diff --git a/math_private.h b/math_private.h --- a/math_private.h +++ b/math_private.h @@ -14,52 +14,38 @@ * $FreeBSD$ */ #ifndef _MATH_PRIVATE_H_ #define _MATH_PRIVATE_H_ #include #include -#include + +#include "mozilla/EndianUtils.h" #include "fdlibm.h" /* * The original fdlibm code used statements like: * n0 = ((*(int*)&one)>>29)^1; * index of high word * * ix0 = *(n0+(int*)&x); * high word of x * * ix1 = *((1-n0)+(int*)&x); * low word of x * * to dig two 32 bit words out of the 64 bit IEEE floating point * value. That is non-ANSI, and, moreover, the gcc instruction * scheduler gets it wrong. We instead use the following macros. * Unlike the original code, we determine the endianness at compile * time, not at run time; I don't see much benefit to selecting * endianness at run time. */ -/* - * A union which permits us to convert between a double and two 32 bit - * ints. - */ - -#ifdef __arm__ -#if defined(__VFP_FP__) || defined(__ARM_EABI__) -#define IEEE_WORD_ORDER BYTE_ORDER -#else -#define IEEE_WORD_ORDER BIG_ENDIAN -#endif -#else /* __arm__ */ -#define IEEE_WORD_ORDER BYTE_ORDER -#endif - /* A union which permits us to convert between a long double and four 32 bit ints. */ -#if IEEE_WORD_ORDER == BIG_ENDIAN +#if MOZ_BIG_ENDIAN() typedef union { long double value; struct { u_int32_t mswhi; u_int32_t mswlo; u_int32_t lswhi; @@ -68,17 +54,17 @@ typedef union struct { u_int64_t msw; u_int64_t lsw; } parts64; } ieee_quad_shape_type; #endif -#if IEEE_WORD_ORDER == LITTLE_ENDIAN +#if MOZ_LITTLE_ENDIAN() typedef union { long double value; struct { u_int32_t lswlo; u_int32_t lswhi; u_int32_t mswlo; @@ -87,17 +73,17 @@ typedef union struct { u_int64_t lsw; u_int64_t msw; } parts64; } ieee_quad_shape_type; #endif -#if IEEE_WORD_ORDER == BIG_ENDIAN +#if MOZ_BIG_ENDIAN() typedef union { double value; struct { u_int32_t msw; u_int32_t lsw; @@ -105,17 +91,17 @@ typedef union struct { u_int64_t w; } xparts; } ieee_double_shape_type; #endif -#if IEEE_WORD_ORDER == LITTLE_ENDIAN +#if MOZ_LITTLE_ENDIAN() typedef union { double value; struct { u_int32_t lsw; u_int32_t msw;