64 lines
2.0 KiB
Diff
64 lines
2.0 KiB
Diff
Description: Fix detection of floating point endianness
|
|
See https://lists.gnu.org/archive/html/bug-gnulib/2013-12/msg00104.html
|
|
Author: Alan Modra <amodra@gmail.com>
|
|
Author: Colin Watson <cjwatson@ubuntu.com>
|
|
Forwarded: no
|
|
Last-Update: 2013-12-18
|
|
|
|
--- a/tests/test-isnanl.h
|
|
+++ b/tests/test-isnanl.h
|
|
@@ -24,6 +24,12 @@
|
|
#include "nan.h"
|
|
#include "macros.h"
|
|
|
|
+#ifdef __FLOAT_WORD_ORDER__
|
|
+# define FLOAT_BIG_ENDIAN (__FLOAT_WORD_ORDER__ != __ORDER_LITTLE_ENDIAN__)
|
|
+#else
|
|
+# define FLOAT_BIG_ENDIAN (LDBL_EXPBIT0_WORD < NWORDS / 2)
|
|
+#endif
|
|
+
|
|
int
|
|
main ()
|
|
{
|
|
@@ -65,10 +71,10 @@
|
|
# if LDBL_EXPBIT0_BIT > 0
|
|
m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1);
|
|
# else
|
|
- m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)]
|
|
+ m.word[LDBL_EXPBIT0_WORD + (FLOAT_BIG_ENDIAN ? 1 : - 1)]
|
|
^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1);
|
|
# endif
|
|
- m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)]
|
|
+ m.word[LDBL_EXPBIT0_WORD + (FLOAT_BIG_ENDIAN ? 1 : - 1)]
|
|
|= (unsigned int) 1 << LDBL_EXPBIT0_BIT;
|
|
ASSERT (isnanl (m.value));
|
|
}
|
|
--- a/tests/test-signbit.c
|
|
+++ b/tests/test-signbit.c
|
|
@@ -36,6 +36,12 @@
|
|
double zerod = 0.0;
|
|
long double zerol = 0.0L;
|
|
|
|
+#ifdef __FLOAT_WORD_ORDER__
|
|
+# define FLOAT_BIG_ENDIAN (__FLOAT_WORD_ORDER__ != __ORDER_LITTLE_ENDIAN__)
|
|
+#else
|
|
+# define FLOAT_BIG_ENDIAN (LDBL_EXPBIT0_WORD < NWORDS / 2)
|
|
+#endif
|
|
+
|
|
static void
|
|
test_signbitf ()
|
|
{
|
|
@@ -166,10 +172,10 @@
|
|
# if LDBL_EXPBIT0_BIT > 0
|
|
m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1);
|
|
# else
|
|
- m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)]
|
|
+ m.word[LDBL_EXPBIT0_WORD + (FLOAT_BIG_ENDIAN ? 1 : - 1)]
|
|
^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1);
|
|
# endif
|
|
- m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)]
|
|
+ m.word[LDBL_EXPBIT0_WORD + (FLOAT_BIG_ENDIAN ? 1 : - 1)]
|
|
|= (unsigned int) 1 << LDBL_EXPBIT0_BIT;
|
|
(void) signbit (m.value);
|
|
#undef NWORDS
|