diff --git a/intl/uconv/ucvlatin/nsUCS2BEToUnicode.cpp b/intl/uconv/ucvlatin/nsUCS2BEToUnicode.cpp index 02fcae5b2094..9314c2b4173d 100644 --- a/intl/uconv/ucvlatin/nsUCS2BEToUnicode.cpp +++ b/intl/uconv/ucvlatin/nsUCS2BEToUnicode.cpp @@ -112,7 +112,11 @@ UTF16ConvertToUnicode(PRUint8& aState, PRUint8& aOddByte, if (dest == destEnd) goto error; +#if !defined(__sparc__) && !defined(__arm__) u = *(const PRUnichar*)src; +#else + memcpy(&u, src, 2); +#endif src += 2; have_codepoint: diff --git a/intl/uconv/ucvlatin/nsUTF32ToUnicode.cpp b/intl/uconv/ucvlatin/nsUTF32ToUnicode.cpp index a16cb5bcb902..c1f97e7d9f34 100644 --- a/intl/uconv/ucvlatin/nsUTF32ToUnicode.cpp +++ b/intl/uconv/ucvlatin/nsUTF32ToUnicode.cpp @@ -46,7 +46,7 @@ //---------------------------------------------------------------------- // static functions and macro definition common to nsUTF32(BE|LE)ToUnicode -#ifdef IS_BIG_ENDIAN +#if defined(IS_BIG_ENDIAN) || defined(__arm__) #define LE_STRING_TO_UCS4(s) \ (PRUint8(*(s)) | (PRUint8(*((s) + 1)) << 8) | \ (PRUint8(*((s) + 2)) << 16) | (PRUint8(*((s) + 3)) << 24)) @@ -54,7 +54,7 @@ #define LE_STRING_TO_UCS4(s) (*(PRUint32*) (s)) #endif -#ifdef IS_BIG_ENDIAN +#if defined(IS_BIG_ENDIAN) && !defined(__sparc__) #define BE_STRING_TO_UCS4(s) (*(PRUint32*) (s)) #else #define BE_STRING_TO_UCS4(s) \