diff options
Diffstat (limited to 'modules/fdlibm/patches/06_use_mfbt_endian_h_in_math_private_h.patch')
-rw-r--r-- | modules/fdlibm/patches/06_use_mfbt_endian_h_in_math_private_h.patch | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/modules/fdlibm/patches/06_use_mfbt_endian_h_in_math_private_h.patch b/modules/fdlibm/patches/06_use_mfbt_endian_h_in_math_private_h.patch new file mode 100644 index 0000000000..b4374fc948 --- /dev/null +++ b/modules/fdlibm/patches/06_use_mfbt_endian_h_in_math_private_h.patch @@ -0,0 +1,116 @@ +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 <stdint.h> + #include <sys/types.h> +-#include <machine/endian.h> ++ ++#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; |