]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Define HIGH_ORDER_BIT_IS_SET_FOR_SNAN to 0 or 1.
authorJoseph Myers <joseph@codesourcery.com>
Mon, 17 Oct 2016 22:48:51 +0000 (22:48 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Mon, 17 Oct 2016 22:48:51 +0000 (22:48 +0000)
This patch moves the HIGH_ORDER_BIT_IS_SET_FOR_SNAN macro from being
defined or undefined to the preferred convention of always being
defined, to either 0 or 1, so allowing typo-proof tests with #if.

The macro is moved from math_private.h to a new header
nan-high-order-bit.h to make it easy for all architectures to define,
either through the sysdeps/generic version of the header or through
providing their own version of the header, without needing #ifndef in
the generic math_private.h to give a default definition.  The move
also allows the macro to be used without needing math_private.h to be
included; the immediate motivation of this patch is to allow tests to
access this information (to know what kinds of NaNs 0 is a valid
payload for) without needing to include math_private.h.  Existing
C level rather than preprocessor conditionals at all, but this patch
does not make such a change).

Tested for x86_64 and x86 (testsuite); also verified for x86_64, x86,
mips64 and powerpc that installed stripped shared libraries are
unchanged by the patch.

* sysdeps/generic/nan-high-order-bit.h: New file.
* sysdeps/hppa/nan-high-order-bit.h: Likewise.
* sysdeps/mips/nan-high-order-bit.h: Likewise.
* sysdeps/hppa/math_private.h: Remove file.
* sysdeps/mips/math_private.h (HIGH_ORDER_BIT_IS_SET_FOR_SNAN): Do
not define here.
* sysdeps/ieee754/dbl-64/s_issignaling.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/dbl-64/s_totalorder.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/dbl-64/s_totalordermag.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/dbl-64/wordsize-64/s_issignaling.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/dbl-64/wordsize-64/s_totalorder.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/dbl-64/wordsize-64/s_totalordermag.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/flt-32/s_issignalingf.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/flt-32/s_totalorderf.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/flt-32/s_totalordermagf.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/ldbl-128/s_issignalingl.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/ldbl-128/s_totalorderl.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/ldbl-128/s_totalordermagl.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/ldbl-128ibm/s_issignalingl.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/ldbl-128ibm/s_totalorderl.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/ldbl-128ibm/s_totalordermagl.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/ldbl-96/s_issignalingl.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/ldbl-96/s_totalorderl.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
* sysdeps/ieee754/ldbl-96/s_totalordermagl.c: Include
<nan-high-order-bit.h>.
[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.

23 files changed:
ChangeLog
sysdeps/generic/nan-high-order-bit.h [new file with mode: 0644]
sysdeps/hppa/nan-high-order-bit.h [moved from sysdeps/hppa/math_private.h with 64% similarity]
sysdeps/ieee754/dbl-64/s_issignaling.c
sysdeps/ieee754/dbl-64/s_totalorder.c
sysdeps/ieee754/dbl-64/s_totalordermag.c
sysdeps/ieee754/dbl-64/wordsize-64/s_issignaling.c
sysdeps/ieee754/dbl-64/wordsize-64/s_totalorder.c
sysdeps/ieee754/dbl-64/wordsize-64/s_totalordermag.c
sysdeps/ieee754/flt-32/s_issignalingf.c
sysdeps/ieee754/flt-32/s_totalorderf.c
sysdeps/ieee754/flt-32/s_totalordermagf.c
sysdeps/ieee754/ldbl-128/s_issignalingl.c
sysdeps/ieee754/ldbl-128/s_totalorderl.c
sysdeps/ieee754/ldbl-128/s_totalordermagl.c
sysdeps/ieee754/ldbl-128ibm/s_issignalingl.c
sysdeps/ieee754/ldbl-128ibm/s_totalorderl.c
sysdeps/ieee754/ldbl-128ibm/s_totalordermagl.c
sysdeps/ieee754/ldbl-96/s_issignalingl.c
sysdeps/ieee754/ldbl-96/s_totalorderl.c
sysdeps/ieee754/ldbl-96/s_totalordermagl.c
sysdeps/mips/math_private.h
sysdeps/mips/nan-high-order-bit.h [new file with mode: 0644]

index 3c328b2af67f2598c9fad1157a693a710052ca53..5448fad7b6518d522a313acdfa3c86069013b2e3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,66 @@
+2016-10-17  Joseph Myers  <joseph@codesourcery.com>
+
+       * sysdeps/generic/nan-high-order-bit.h: New file.
+       * sysdeps/hppa/nan-high-order-bit.h: Likewise.
+       * sysdeps/mips/nan-high-order-bit.h: Likewise.
+       * sysdeps/hppa/math_private.h: Remove file.
+       * sysdeps/mips/math_private.h (HIGH_ORDER_BIT_IS_SET_FOR_SNAN): Do
+       not define here.
+       * sysdeps/ieee754/dbl-64/s_issignaling.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/dbl-64/s_totalorder.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/dbl-64/s_totalordermag.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/dbl-64/wordsize-64/s_issignaling.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/dbl-64/wordsize-64/s_totalorder.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/dbl-64/wordsize-64/s_totalordermag.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/flt-32/s_issignalingf.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/flt-32/s_totalorderf.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/flt-32/s_totalordermagf.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/ldbl-128/s_issignalingl.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/ldbl-128/s_totalorderl.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/ldbl-128/s_totalordermagl.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/ldbl-128ibm/s_issignalingl.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/ldbl-128ibm/s_totalorderl.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/ldbl-128ibm/s_totalordermagl.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/ldbl-96/s_issignalingl.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/ldbl-96/s_totalorderl.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+       * sysdeps/ieee754/ldbl-96/s_totalordermagl.c: Include
+       <nan-high-order-bit.h>.
+       [HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
+
 2016-10-17  Stefan Liebler  <stli@linux.vnet.ibm.com>
 
        * sysdeps/s390/fpu/fix-fp-int-compare-invalid.h: New file.
diff --git a/sysdeps/generic/nan-high-order-bit.h b/sysdeps/generic/nan-high-order-bit.h
new file mode 100644 (file)
index 0000000..1561915
--- /dev/null
@@ -0,0 +1,27 @@
+/* Specify NaN high-order bit conventions.  Generic version.
+   Copyright (C) 2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef NAN_HIGH_ORDER_BIT_H
+#define NAN_HIGH_ORDER_BIT_H   1
+
+/* Define this macro to 1 if the high-order bit of a NaN's mantissa is
+   set for signaling NaNs and clear for quiet NaNs, 0 otherwise (the
+   preferred IEEE convention).  */
+#define HIGH_ORDER_BIT_IS_SET_FOR_SNAN 0
+
+#endif /* nan-high-order-bit.h */
similarity index 64%
rename from sysdeps/hppa/math_private.h
rename to sysdeps/hppa/nan-high-order-bit.h
index 1acfb9ae4af2138f1eea7fb47345b2bff5b52602..a63d6a789a821c0b27bc158d23153556a00ffa4d 100644 (file)
@@ -1,5 +1,5 @@
-/* Internal math stuff.  HPPA version.
-   Copyright (C) 2013-2016 Free Software Foundation, Inc.
+/* Specify NaN high-order bit conventions.  HPPA version.
+   Copyright (C) 2016 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifndef HPPA_MATH_PRIVATE_H
-#define HPPA_MATH_PRIVATE_H 1
+#ifndef NAN_HIGH_ORDER_BIT_H
+#define NAN_HIGH_ORDER_BIT_H   1
 
-/* One of the few architectures where the meaning of the quiet/signaling bit is
-   inverse to IEEE 754-2008 (as well as common practice for IEEE 754-1985).  */
-#define HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+/* One of the few architectures where the meaning of the
+   quiet/signaling bit is inverse to IEEE 754-2008 (as well as common
+   practice for IEEE 754-1985).  */
+#define HIGH_ORDER_BIT_IS_SET_FOR_SNAN 1
 
-#include_next <math_private.h>
-
-#endif
+#endif /* nan-high-order-bit.h */
index 4b93d6ae60fc69453cf82a5597f57a4ea9426818..0b845e244e47a5be0f8686920ea474cff32b635e 100644 (file)
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 
 int
 __issignaling (double x)
 {
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
   u_int32_t hxi;
   GET_HIGH_WORD (hxi, x);
   /* We only have to care about the high-order bit of x's significand, because
index 73ac32f78be0c9573733a3e424b7b5272cae7053..c4ec917207fefed21f19da2a3d17414cfaa93eec 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 #include <stdint.h>
 
 int
@@ -27,7 +28,7 @@ totalorder (double x, double y)
   uint32_t lx, ly;
   EXTRACT_WORDS (hx, lx, x);
   EXTRACT_WORDS (hy, ly, y);
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
   uint32_t uhx = hx & 0x7fffffff, uhy = hy & 0x7fffffff;
   /* For the preferred quiet NaN convention, this operation is a
      comparison of the representations of the arguments interpreted as
index e41dade54a0b12238d172ea8d7e201a8dee1878c..3850c33235a6d551f2d8de5f84af85712b436293 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 #include <stdint.h>
 
 int
@@ -29,7 +30,7 @@ totalordermag (double x, double y)
   EXTRACT_WORDS (hy, ly, y);
   hx &= 0x7fffffff;
   hy &= 0x7fffffff;
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
   /* For the preferred quiet NaN convention, this operation is a
      comparison of the representations of the absolute values of the
      arguments.  If both arguments are NaNs, invert the
index c22e608c6ea1eaaf1428801e03891759eb2dcc32..18d1acd0c9bfd2ffc0216e864d99f76d76e96aaf 100644 (file)
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 
 int
 __issignaling (double x)
 {
   u_int64_t xi;
   EXTRACT_WORDS64 (xi, x);
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
   /* We only have to care about the high-order bit of x's significand, because
      having it set (sNaN) already makes the significand different from that
      used to designate infinity.  */
index 02cd799cf66928ffcb24e6829eed8f2f590e60c7..dd5587ba21d05351a101a85534e88c1767cc92b9 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 #include <stdint.h>
 
 int
@@ -26,7 +27,7 @@ totalorder (double x, double y)
   int64_t ix, iy;
   EXTRACT_WORDS64 (ix, x);
   EXTRACT_WORDS64 (iy, y);
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
   /* For the preferred quiet NaN convention, this operation is a
      comparison of the representations of the arguments interpreted as
      sign-magnitude integers.  If both arguments are NaNs, invert the
index 38f2e1ba8fcf02e4d94e1c8cd7a837212a214e97..999a9196f31abe4961dce3320326856aa3c529fd 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 #include <stdint.h>
 
 int
@@ -28,7 +29,7 @@ totalordermag (double x, double y)
   EXTRACT_WORDS64 (iy, y);
   ix &= 0x7fffffffffffffffULL;
   iy &= 0x7fffffffffffffffULL;
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
   /* For the preferred quiet NaN convention, this operation is a
      comparison of the representations of the absolute values of the
      arguments.  If both arguments are NaNs, invert the
index 2409ff408cad6d327102da0c6aecd34d31d0b733..965ba92536c2f19442346e0293386132e4f93d98 100644 (file)
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 
 int
 __issignalingf (float x)
 {
   u_int32_t xi;
   GET_FLOAT_WORD (xi, x);
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
   /* We only have to care about the high-order bit of x's significand, because
      having it set (sNaN) already makes the significand different from that
      used to designate infinity.  */
index 1ed30d81162635a739b4cadf7ad68faf431107ef..243387b11ef21924aae5fe6f0e5714b91b415a64 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 #include <stdint.h>
 
 int
@@ -26,7 +27,7 @@ totalorderf (float x, float y)
   int32_t ix, iy;
   GET_FLOAT_WORD (ix, x);
   GET_FLOAT_WORD (iy, y);
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
   /* For the preferred quiet NaN convention, this operation is a
      comparison of the representations of the arguments interpreted as
      sign-magnitude integers.  If both arguments are NaNs, invert the
index 7c01edc29aa8ccbe3a23e9495139ab1b30ec71e9..be78eae7801d93a9fdb99bde4568ac5662fd7407 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 #include <stdint.h>
 
 int
@@ -28,7 +29,7 @@ totalordermagf (float x, float y)
   GET_FLOAT_WORD (iy, y);
   ix &= 0x7fffffff;
   iy &= 0x7fffffff;
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
   /* For the preferred quiet NaN convention, this operation is a
      comparison of the representations of the absolute values of the
      arguments.  If both arguments are NaNs, invert the
index 6af1db4e3785f47e2648f2b67c31660d40b56f46..cb0f2a538338ef7007d806988c358e12e7677528 100644 (file)
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 
 int
 __issignalingl (_Float128 x)
 {
   u_int64_t hxi, lxi __attribute__ ((unused));
   GET_LDOUBLE_WORDS64 (hxi, lxi, x);
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
   /* We only have to care about the high-order bit of x's significand, because
      having it set (sNaN) already makes the significand different from that
      used to designate infinity.  */
index dc76ccf2042669c746091781a9877e21f6818580..32ede1f4bee9c93b99db7c8bb736f23aaa9d7361 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 #include <stdint.h>
 
 int
@@ -27,7 +28,7 @@ totalorderl (_Float128 x, _Float128 y)
   uint64_t lx, ly;
   GET_LDOUBLE_WORDS64 (hx, lx, x);
   GET_LDOUBLE_WORDS64 (hy, ly, y);
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
   uint64_t uhx = hx & 0x7fffffffffffffffULL;
   uint64_t uhy = hy & 0x7fffffffffffffffULL;
   /* For the preferred quiet NaN convention, this operation is a
index bcfeecd4c44d176b4080ad35334029b1f3f8ae0f..5446809a42712e1f9ff8d38b5c094cba85e8e9e5 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 #include <stdint.h>
 
 int
@@ -29,7 +30,7 @@ totalordermagl (_Float128 x, _Float128 y)
   GET_LDOUBLE_WORDS64 (hy, ly, y);
   hx &= 0x7fffffffffffffffULL;
   hy &= 0x7fffffffffffffffULL;
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
   /* For the preferred quiet NaN convention, this operation is a
      comparison of the representations of the absolute values of the
      arguments.  If both arguments are NaNs, invert the
index 091513908b12c6445a0d7294bd79d6e8b49fbe2c..94cfffcd4b000ef783b1b71b29f54f589d4cffe5 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 
 int
 __issignalingl (long double x)
@@ -29,7 +30,7 @@ __issignalingl (long double x)
 
   xhi = ldbl_high (x);
   EXTRACT_WORDS64 (xi, xhi);
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
 # error untested
   /* We only have to care about the high-order bit of x's significand, because
      having it set (sNaN) already makes the significand different from that
index 1535b2fb1e546fccf3b3f3e8161a58b23180ad1b..ff557794334d55b03159b0be50172a1aed0f88f9 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 #include <stdint.h>
 
 int
@@ -30,7 +31,7 @@ totalorderl (long double x, long double y)
   EXTRACT_WORDS64 (hx, xhi);
   ldbl_unpack (y, &yhi, &ylo);
   EXTRACT_WORDS64 (hy, yhi);
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
 # error not implemented
 #endif
   uint64_t hx_sign = hx >> 63;
index 509a23a669617c810af72b7411bcf338acb8e830..739e23194e9ee7829c4ca5aac19f85f8ff3ee78d 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 #include <stdint.h>
 
 int
@@ -30,7 +31,7 @@ totalordermagl (long double x, long double y)
   EXTRACT_WORDS64 (hx, xhi);
   ldbl_unpack (y, &yhi, &ylo);
   EXTRACT_WORDS64 (hy, yhi);
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
 # error not implemented
 #endif
   uint64_t x_sign = hx & 0x8000000000000000ULL;
index 73646cac0caefaf93a4078db9239664b8cd6074e..364e5db2224cb59a0b3debfaca21a072aeb716ee 100644 (file)
 
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 
 int
 __issignalingl (long double x)
 {
   u_int32_t exi, hxi, lxi;
   GET_LDOUBLE_WORDS (exi, hxi, lxi, x);
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
 # error not implemented
 #else
   /* To keep the following comparison simple, toggle the quiet/signaling bit,
index 4f14bafb44358e1c8c60aa06efb05e8f34dac6c8..ddc28b84b0a6b9fb91606d2d6c1a4bd07ad68794 100644 (file)
@@ -19,6 +19,7 @@
 #include <float.h>
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 #include <stdint.h>
 
 int
@@ -41,7 +42,7 @@ totalorderl (long double x, long double y)
       if ((expy & 0x7fff) == 0x7fff)
        hy |= 0x80000000;
     }
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
 # error not implemented
 #endif
   uint32_t x_sign = expx >> 15;
index 0167f0fb812ae39ff0fbd45fdf62dc9f4a725819..4ca28e75275d1d8a7fd55676f242f2a3622306e1 100644 (file)
@@ -19,6 +19,7 @@
 #include <float.h>
 #include <math.h>
 #include <math_private.h>
+#include <nan-high-order-bit.h>
 #include <stdint.h>
 
 int
@@ -43,7 +44,7 @@ totalordermagl (long double x, long double y)
       if (expy == 0x7fff)
        hy |= 0x80000000;
     }
-#ifdef HIGH_ORDER_BIT_IS_SET_FOR_SNAN
+#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
 # error not implemented
 #endif
   return expx < expy || (expx == expy && (hx < hy || (hx == hy && lx <= ly)));
index 2ea3c5708ace4ae8450dd6915c2e3a927f1ba50b..4587d0163a0c50fec7d1e41bfa112ea8d0506302 100644 (file)
 #ifndef MIPS_MATH_PRIVATE_H
 #define MIPS_MATH_PRIVATE_H 1
 
-#ifdef __mips_nan2008
-/* MIPS aligned to IEEE 754-2008.  */
-#else
-/* One of the few architectures where the meaning of the quiet/signaling bit is
-   inverse to IEEE 754-2008 (as well as common practice for IEEE 754-1985).  */
-# define HIGH_ORDER_BIT_IS_SET_FOR_SNAN
-#endif
-
 /* Inline functions to speed up the math library implementation.  The
    default versions of these routines are in generic/math_private.h
    and call fesetround, feholdexcept, etc.  These routines use inlined
diff --git a/sysdeps/mips/nan-high-order-bit.h b/sysdeps/mips/nan-high-order-bit.h
new file mode 100644 (file)
index 0000000..0aaef0f
--- /dev/null
@@ -0,0 +1,32 @@
+/* Specify NaN high-order bit conventions.  MIPS version.
+   Copyright (C) 2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef NAN_HIGH_ORDER_BIT_H
+#define NAN_HIGH_ORDER_BIT_H   1
+
+#ifdef __mips_nan2008
+/* MIPS aligned to IEEE 754-2008.  */
+# define HIGH_ORDER_BIT_IS_SET_FOR_SNAN 0
+#else
+/* One of the few architectures where the meaning of the
+   quiet/signaling bit is inverse to IEEE 754-2008 (as well as common
+   practice for IEEE 754-1985).  */
+# define HIGH_ORDER_BIT_IS_SET_FOR_SNAN 1
+#endif
+
+#endif /* nan-high-order-bit.h */