Source code

Revision control

Copy as Markdown

Other Tools

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;