]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Refactor FP_ILOGB* out of bits/mathdef.h.
authorJoseph Myers <joseph@codesourcery.com>
Thu, 1 Dec 2016 02:56:55 +0000 (02:56 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Thu, 1 Dec 2016 02:56:55 +0000 (02:56 +0000)
Continuing the refactoring of bits/mathdef.h, this patch stops it
defining FP_ILOGB0 and FP_ILOGBNAN, moving the required information to
a new header bits/fp-logb.h.

There are only two possible values of each of those macros permitted
by ISO C.  TS 18661-1 adds corresponding macros for llogb, and their
values are required to correspond to those of the ilogb macros in the
obvious way.  Thus two boolean values - for which the same choices are
correct for most architectures - suffice to determine the value of all
these macros, and by defining macros for those boolean values in
bits/fp-logb.h we can then define the public FP_* macros in math.h and
avoid the present duplication of the associated feature test macro
logic.

This patch duly moves to bits/fp-logb.h defining __FP_LOGB0_IS_MIN and
__FP_LOGBNAN_IS_MIN.  Default definitions of those to 0 are correct
for both architectures, while ia64, m68k and x86 get their own
versions of bits/fp-logb.h to reflect their use of values different
from the defaults.

The patch renders many copies of bits/mathdef.h trivial (needed only
to avoid the default __NO_LONG_DOUBLE_MATH).  I'll revise
<https://sourceware.org/ml/libc-alpha/2016-11/msg00865.html>
accordingly so that it removes all bits/mathdef.h headers except the
default one and the alpha one, and arranges for the header to be
included only by complex.h as the only remaining use at that point
will be for the alpha ABI issues there.

Tested for x86_64 and x86.  Also did compile-only testing with
build-many-glibcs.py (using glibc sources from before the commit that
introduced many build failures with undefined __GI___sigsetjmp).

* bits/fp-logb.h: New file.
* sysdeps/ia64/bits/fp-logb.h: Likewise.
* sysdeps/m68k/m680x0/bits/fp-logb.h: Likewise.
* sysdeps/x86/bits/fp-logb.h: Likewise.
* math/Makefile (headers): Add bits/fp-logb.h.
* math/math.h: Include <bits/fp-logb.h>.
[__USE_ISOC99] (FP_ILOGB0): Define based on __FP_LOGB0_IS_MIN.
[__USE_ISOC99] (FP_ILOGBNAN): Define based on __FP_LOGBNAN_IS_MIN.
* bits/mathdef.h (FP_ILOGB0): Remove.
(FP_ILOGBNAN): Likewise.
* sysdeps/aarch64/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/alpha/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/ia64/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/m68k/m680x0/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/mips/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/powerpc/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/s390/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/sparc/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/x86/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.

17 files changed:
ChangeLog
bits/fp-logb.h [new file with mode: 0644]
bits/mathdef.h
math/Makefile
math/math.h
sysdeps/aarch64/bits/mathdef.h
sysdeps/alpha/bits/mathdef.h
sysdeps/ia64/bits/fp-logb.h [new file with mode: 0644]
sysdeps/ia64/bits/mathdef.h
sysdeps/m68k/m680x0/bits/fp-logb.h [new file with mode: 0644]
sysdeps/m68k/m680x0/bits/mathdef.h
sysdeps/mips/bits/mathdef.h
sysdeps/powerpc/bits/mathdef.h
sysdeps/s390/bits/mathdef.h
sysdeps/sparc/bits/mathdef.h
sysdeps/x86/bits/fp-logb.h [new file with mode: 0644]
sysdeps/x86/bits/mathdef.h

index 17d5aeb51564ae0c98a389ae0f60c4a69f0de132..c0dbfa236c82195102d95a5587be2309f5cf9f5c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,34 @@
 2016-12-01  Joseph Myers  <joseph@codesourcery.com>
 
+       * bits/fp-logb.h: New file.
+       * sysdeps/ia64/bits/fp-logb.h: Likewise.
+       * sysdeps/m68k/m680x0/bits/fp-logb.h: Likewise.
+       * sysdeps/x86/bits/fp-logb.h: Likewise.
+       * math/Makefile (headers): Add bits/fp-logb.h.
+       * math/math.h: Include <bits/fp-logb.h>.
+       [__USE_ISOC99] (FP_ILOGB0): Define based on __FP_LOGB0_IS_MIN.
+       [__USE_ISOC99] (FP_ILOGBNAN): Define based on __FP_LOGBNAN_IS_MIN.
+       * bits/mathdef.h (FP_ILOGB0): Remove.
+       (FP_ILOGBNAN): Likewise.
+       * sysdeps/aarch64/bits/mathdef.h (FP_ILOGB0): Likewise.
+       (FP_ILOGBNAN): Likewise.
+       * sysdeps/alpha/bits/mathdef.h (FP_ILOGB0): Likewise.
+       (FP_ILOGBNAN): Likewise.
+       * sysdeps/ia64/bits/mathdef.h (FP_ILOGB0): Likewise.
+       (FP_ILOGBNAN): Likewise.
+       * sysdeps/m68k/m680x0/bits/mathdef.h (FP_ILOGB0): Likewise.
+       (FP_ILOGBNAN): Likewise.
+       * sysdeps/mips/bits/mathdef.h (FP_ILOGB0): Likewise.
+       (FP_ILOGBNAN): Likewise.
+       * sysdeps/powerpc/bits/mathdef.h (FP_ILOGB0): Likewise.
+       (FP_ILOGBNAN): Likewise.
+       * sysdeps/s390/bits/mathdef.h (FP_ILOGB0): Likewise.
+       (FP_ILOGBNAN): Likewise.
+       * sysdeps/sparc/bits/mathdef.h (FP_ILOGB0): Likewise.
+       (FP_ILOGBNAN): Likewise.
+       * sysdeps/x86/bits/mathdef.h (FP_ILOGB0): Likewise.
+       (FP_ILOGBNAN): Likewise.
+
        * scripts/build-many-glibcs.py: Add bot to usage message.  Import
        time module.
        (Context.__init__): Initialize self.logsdir_old.
diff --git a/bits/fp-logb.h b/bits/fp-logb.h
new file mode 100644 (file)
index 0000000..4c9f592
--- /dev/null
@@ -0,0 +1,28 @@
+/* Define __FP_LOGB0_IS_MIN and __FP_LOGBNAN_IS_MIN.
+   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 _MATH_H
+# error "Never use <bits/fp-logb.h> directly; include <math.h> instead."
+#endif
+
+/* __FP_LOGB0_IS_MIN is defined to 1 if FP_ILOGB0 is INT_MIN, and 0 if
+   it is -INT_MAX.  __FP_LOGBNAN_IS_MIN is defined to 1 if FP_ILOGBNAN
+   is INT_MIN, and 0 if it is INT_MAX.  */
+
+#define __FP_LOGB0_IS_MIN      0
+#define __FP_LOGBNAN_IS_MIN    0
index 050204ab66b2aa7b4de1b3d1830b4a40383f7f09..014829790ab857c240b785833d38ecfcd3e4ade7 100644 (file)
 # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
 #endif
 
-#if defined  __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0     (-2147483647)
-# define FP_ILOGBNAN   2147483647
-
-#endif /* ISO C99 */
-
 #ifndef __NO_LONG_DOUBLE_MATH
 /* Signal that we do not really have a `long double'.  The disables the
    declaration of all the `long double' function variants.  */
index a7c2b07fd8bd92b7df4f638d30f96cf3c03ec3b7..ac3a90a58263d27973d8765f5855d2883b9d80c7 100644 (file)
@@ -28,7 +28,7 @@ headers               := math.h bits/mathcalls.h bits/mathinline.h bits/huge_val.h \
                   bits/fenv.h bits/fenvinline.h bits/mathdef.h tgmath.h \
                   bits/math-finite.h bits/math-vector.h \
                   bits/libm-simd-decl-stubs.h bits/iscanonical.h \
-                  bits/flt-eval-method.h bits/fp-fast.h
+                  bits/flt-eval-method.h bits/fp-fast.h bits/fp-logb.h
 
 # FPU support code.
 aux            := setfpucw fpu_control
index 95b39b3d92b2cbf0c47ac25898cdb46f1c927f8a..6e4bf9e528a02cd703c5a069d52bda1e1b6db17d 100644 (file)
@@ -97,13 +97,30 @@ typedef _Float128x double_t;
 # endif
 #endif
 
-/* Define macros for the return value of ilogb.
+/* Define macros for the return value of ilogb, based on
+   __FP_LOGB0_IS_MIN and __FP_LOGBNAN_IS_MIN.
 
     FP_ILOGB0  Expands to a value returned by `ilogb (0.0)'.
     FP_ILOGBNAN        Expands to a value returned by `ilogb (NAN)'.
 
 */
 
+#include <bits/fp-logb.h>
+#ifdef __USE_ISOC99
+# if __FP_LOGB0_IS_MIN
+#  define FP_ILOGB0    (-2147483647 - 1)
+# else
+#  define FP_ILOGB0    (-2147483647)
+# endif
+# if __FP_LOGBNAN_IS_MIN
+#  define FP_ILOGBNAN  (-2147483647 - 1)
+# else
+#  define FP_ILOGBNAN  2147483647
+# endif
+#endif
+
+/* Get information about long double.  */
+
 #include <bits/mathdef.h>
 
 /* Get the architecture specific values describing the floating-point
index 5418beacfbd13a52f4dd346450db34ac4bbc7830..2213635bd84e085d2aafb3618349b086e47db311 100644 (file)
 #if !defined _MATH_H && !defined _COMPLEX_H
 # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
 #endif
-
-#if defined  __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0     (-2147483647)
-# define FP_ILOGBNAN   (2147483647)
-
-#endif /* ISO C99 */
index fbca194a78153788e7e6f74a36c03360f89343c2..021563f211fe1c64618f5367bf95046408173377 100644 (file)
 # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
 #endif
 
-/* FIXME! This file describes properties of the compiler, not the machine;
-   it should not be part of libc!  */
-
-#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0     (-2147483647)
-# define FP_ILOGBNAN   (2147483647)
-
-#endif /* ISO C99 && MATH_H */
-
 #if defined _COMPLEX_H && !defined _COMPLEX_H_MATHDEF
 # define _COMPLEX_H_MATHDEF 1
 # if defined(__GNUC__) && !__GNUC_PREREQ(3,4)
diff --git a/sysdeps/ia64/bits/fp-logb.h b/sysdeps/ia64/bits/fp-logb.h
new file mode 100644 (file)
index 0000000..065e2ff
--- /dev/null
@@ -0,0 +1,24 @@
+/* Define __FP_LOGB0_IS_MIN and __FP_LOGBNAN_IS_MIN.  IA64 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 _MATH_H
+# error "Never use <bits/fp-logb.h> directly; include <math.h> instead."
+#endif
+
+#define __FP_LOGB0_IS_MIN      1
+#define __FP_LOGBNAN_IS_MIN    0
index 44a7642342292d3c76da17cfb16c37062a9a667a..e689835716a7a8685a01d600f8c6f18657a0a346 100644 (file)
 #if !defined _MATH_H && !defined _COMPLEX_H
 # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
 #endif
-
-#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0     (-2147483647 - 1)
-# define FP_ILOGBNAN   2147483647
-
-#endif /* ISO C99 */
diff --git a/sysdeps/m68k/m680x0/bits/fp-logb.h b/sysdeps/m68k/m680x0/bits/fp-logb.h
new file mode 100644 (file)
index 0000000..8ece126
--- /dev/null
@@ -0,0 +1,24 @@
+/* Define __FP_LOGB0_IS_MIN and __FP_LOGBNAN_IS_MIN.  M68K 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 _MATH_H
+# error "Never use <bits/fp-logb.h> directly; include <math.h> instead."
+#endif
+
+#define __FP_LOGB0_IS_MIN      1
+#define __FP_LOGBNAN_IS_MIN    0
index 702bd0e33a630732c9bba85278adb9bddedb9ccb..7926c6aaf79811a833a4d162547ddedf02006c1c 100644 (file)
 #if !defined _MATH_H && !defined _COMPLEX_H
 # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
 #endif
-
-#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0     (-2147483647 - 1)
-# define FP_ILOGBNAN   (2147483647)
-
-#endif /* ISO C99 */
index 74abf97ea3b30a6f379a6c8a076cc9d9649a1083..31fc4001dfadb2816f1c06251cbd21e3dc64e3f6 100644 (file)
 
 #include <sgidefs.h>
 
-#if defined  __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0     (-2147483647)
-# define FP_ILOGBNAN   2147483647
-
-#endif /* ISO C99 */
-
 #if ! defined __NO_LONG_DOUBLE_MATH && _MIPS_SIM == _ABIO32
 /* Signal that we do not really have a `long double'.  This disables the
    declaration of all the `long double' function variants.  */
index 392e4e5ac6b7cc9327bdcee379a3ffb304071e92..eeea6fcdc2edbbb72fc3770b042a4b579ca67592 100644 (file)
 #if !defined _MATH_H && !defined _COMPLEX_H
 # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
 #endif
-
-
-/* FIXME! This file describes properties of the compiler, not the machine;
-   it should not be part of libc!
-
-   FIXME! This file does not deal with the -fshort-double option of
-   gcc! */
-
-#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0     (-2147483647)
-# define FP_ILOGBNAN   (2147483647)
-
-#endif /* ISO C99 */
index 5ad04aecef24b0eb963ca73ff584963c6e54bc79..eeea6fcdc2edbbb72fc3770b042a4b579ca67592 100644 (file)
 #if !defined _MATH_H && !defined _COMPLEX_H
 # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
 #endif
-
-#if defined  __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0     (-2147483647)
-# define FP_ILOGBNAN   2147483647
-
-#endif /* ISO C99 */
index 55a35306cec79cbcd495a77544550d599a6c840f..65ab45aad334ae9f8c076370f19e2cf85f2b11f6 100644 (file)
 #endif
 
 #include <bits/wordsize.h>
-
-/* FIXME! This file describes properties of the compiler, not the machine;
-   it should not be part of libc!  */
-
-#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0       (-2147483647)
-# define FP_ILOGBNAN     (2147483647)
-
-#endif /* ISO C99 */
diff --git a/sysdeps/x86/bits/fp-logb.h b/sysdeps/x86/bits/fp-logb.h
new file mode 100644 (file)
index 0000000..159cea3
--- /dev/null
@@ -0,0 +1,24 @@
+/* Define __FP_LOGB0_IS_MIN and __FP_LOGBNAN_IS_MIN.  x86 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 _MATH_H
+# error "Never use <bits/fp-logb.h> directly; include <math.h> instead."
+#endif
+
+#define __FP_LOGB0_IS_MIN      1
+#define __FP_LOGBNAN_IS_MIN    1
index 17ad1efa895d4752c29c42ebf8dbea36712c662e..1c6aee6ba510dd621a4b8a4cca78a476874f5cc1 100644 (file)
 #if !defined _MATH_H && !defined _COMPLEX_H
 # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
 #endif
-
-#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0     (-2147483647 - 1)
-# define FP_ILOGBNAN   (-2147483647 - 1)
-
-#endif /* ISO C99 */