diff options
Diffstat (limited to 'debian/patches/float-endian-detection.patch')
-rw-r--r-- | debian/patches/float-endian-detection.patch | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/debian/patches/float-endian-detection.patch b/debian/patches/float-endian-detection.patch new file mode 100644 index 00000000..66bed0de --- /dev/null +++ b/debian/patches/float-endian-detection.patch @@ -0,0 +1,67 @@ +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 + +Index: b/tests/test-isnanl.h +=================================================================== +--- a/tests/test-isnanl.h ++++ b/tests/test-isnanl.h +@@ -38,6 +38,12 @@ + long double minus_zero = -0.0L; + #endif + ++#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 () + { +@@ -70,10 +76,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)); + } +Index: b/tests/test-signbit.c +=================================================================== +--- a/tests/test-signbit.c ++++ b/tests/test-signbit.c +@@ -56,6 +56,12 @@ + long double minus_zerol = -0.0L; + #endif + ++#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 () + { +@@ -176,10 +182,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 |