From b2491db6c814d614acdef9d7a4e44a8c3b3ae9dc Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Thu, 1 Dec 2016 02:56:55 +0000 Subject: [PATCH] Refactor FP_ILOGB* out of bits/mathdef.h. 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 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 . [__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. --- ChangeLog | 29 ++++++++++++++++++++++ sysdeps/aarch64/bits/mathdef.h => bits/fp-logb.h | 20 +++++++-------- bits/mathdef.h | 9 ------- math/Makefile | 2 +- math/math.h | 19 +++++++++++++- sysdeps/aarch64/bits/mathdef.h | 9 ------- sysdeps/alpha/bits/mathdef.h | 12 --------- .../{s390/bits/mathdef.h => ia64/bits/fp-logb.h} | 17 +++++-------- sysdeps/ia64/bits/mathdef.h | 9 ------- .../bits/mathdef.h => m68k/m680x0/bits/fp-logb.h} | 17 +++++-------- sysdeps/m68k/m680x0/bits/mathdef.h | 9 ------- sysdeps/mips/bits/mathdef.h | 9 ------- sysdeps/powerpc/bits/mathdef.h | 16 ------------ sysdeps/s390/bits/mathdef.h | 9 ------- sysdeps/sparc/bits/mathdef.h | 12 --------- .../{s390/bits/mathdef.h => x86/bits/fp-logb.h} | 17 +++++-------- sysdeps/x86/bits/mathdef.h | 9 ------- 17 files changed, 75 insertions(+), 149 deletions(-) copy sysdeps/aarch64/bits/mathdef.h => bits/fp-logb.h (62%) copy sysdeps/{s390/bits/mathdef.h => ia64/bits/fp-logb.h} (63%) copy sysdeps/{s390/bits/mathdef.h => m68k/m680x0/bits/fp-logb.h} (63%) copy sysdeps/{s390/bits/mathdef.h => x86/bits/fp-logb.h} (63%) diff --git a/ChangeLog b/ChangeLog index 17d5aeb515..c0dbfa236c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,34 @@ 2016-12-01 Joseph Myers + * 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 . + [__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/sysdeps/aarch64/bits/mathdef.h b/bits/fp-logb.h similarity index 62% copy from sysdeps/aarch64/bits/mathdef.h copy to bits/fp-logb.h index 5418beacfb..4c9f592f99 100644 --- a/sysdeps/aarch64/bits/mathdef.h +++ b/bits/fp-logb.h @@ -1,5 +1,5 @@ -/* Copyright (C) 1999-2016 Free Software Foundation, Inc. - +/* 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 @@ -16,15 +16,13 @@ License along with the GNU C Library; if not, see . */ -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use directly; include instead" +#ifndef _MATH_H +# error "Never use directly; include 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) +/* __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. */ -#endif /* ISO C99 */ +#define __FP_LOGB0_IS_MIN 0 +#define __FP_LOGBNAN_IS_MIN 0 diff --git a/bits/mathdef.h b/bits/mathdef.h index 050204ab66..014829790a 100644 --- a/bits/mathdef.h +++ b/bits/mathdef.h @@ -19,15 +19,6 @@ # error "Never use directly; include 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. */ diff --git a/math/Makefile b/math/Makefile index a7c2b07fd8..ac3a90a582 100644 --- a/math/Makefile +++ b/math/Makefile @@ -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 diff --git a/math/math.h b/math/math.h index 95b39b3d92..6e4bf9e528 100644 --- a/math/math.h +++ b/math/math.h @@ -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 +#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 /* Get the architecture specific values describing the floating-point diff --git a/sysdeps/aarch64/bits/mathdef.h b/sysdeps/aarch64/bits/mathdef.h index 5418beacfb..2213635bd8 100644 --- a/sysdeps/aarch64/bits/mathdef.h +++ b/sysdeps/aarch64/bits/mathdef.h @@ -19,12 +19,3 @@ #if !defined _MATH_H && !defined _COMPLEX_H # error "Never use directly; include 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 */ diff --git a/sysdeps/alpha/bits/mathdef.h b/sysdeps/alpha/bits/mathdef.h index fbca194a78..021563f211 100644 --- a/sysdeps/alpha/bits/mathdef.h +++ b/sysdeps/alpha/bits/mathdef.h @@ -19,18 +19,6 @@ # error "Never use directly; include 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/s390/bits/mathdef.h b/sysdeps/ia64/bits/fp-logb.h similarity index 63% copy from sysdeps/s390/bits/mathdef.h copy to sysdeps/ia64/bits/fp-logb.h index 5ad04aecef..065e2ff55f 100644 --- a/sysdeps/s390/bits/mathdef.h +++ b/sysdeps/ia64/bits/fp-logb.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1997-2016 Free Software Foundation, Inc. +/* 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 @@ -15,15 +16,9 @@ License along with the GNU C Library; if not, see . */ -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use directly; include instead" +#ifndef _MATH_H +# error "Never use directly; include 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 */ +#define __FP_LOGB0_IS_MIN 1 +#define __FP_LOGBNAN_IS_MIN 0 diff --git a/sysdeps/ia64/bits/mathdef.h b/sysdeps/ia64/bits/mathdef.h index 44a7642342..e689835716 100644 --- a/sysdeps/ia64/bits/mathdef.h +++ b/sysdeps/ia64/bits/mathdef.h @@ -18,12 +18,3 @@ #if !defined _MATH_H && !defined _COMPLEX_H # error "Never use directly; include 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/s390/bits/mathdef.h b/sysdeps/m68k/m680x0/bits/fp-logb.h similarity index 63% copy from sysdeps/s390/bits/mathdef.h copy to sysdeps/m68k/m680x0/bits/fp-logb.h index 5ad04aecef..8ece1265c9 100644 --- a/sysdeps/s390/bits/mathdef.h +++ b/sysdeps/m68k/m680x0/bits/fp-logb.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1997-2016 Free Software Foundation, Inc. +/* 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 @@ -15,15 +16,9 @@ License along with the GNU C Library; if not, see . */ -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use directly; include instead" +#ifndef _MATH_H +# error "Never use directly; include 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 */ +#define __FP_LOGB0_IS_MIN 1 +#define __FP_LOGBNAN_IS_MIN 0 diff --git a/sysdeps/m68k/m680x0/bits/mathdef.h b/sysdeps/m68k/m680x0/bits/mathdef.h index 702bd0e33a..7926c6aaf7 100644 --- a/sysdeps/m68k/m680x0/bits/mathdef.h +++ b/sysdeps/m68k/m680x0/bits/mathdef.h @@ -18,12 +18,3 @@ #if !defined _MATH_H && !defined _COMPLEX_H # error "Never use directly; include 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/mips/bits/mathdef.h b/sysdeps/mips/bits/mathdef.h index 74abf97ea3..31fc4001df 100644 --- a/sysdeps/mips/bits/mathdef.h +++ b/sysdeps/mips/bits/mathdef.h @@ -21,15 +21,6 @@ #include -#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. */ diff --git a/sysdeps/powerpc/bits/mathdef.h b/sysdeps/powerpc/bits/mathdef.h index 392e4e5ac6..eeea6fcdc2 100644 --- a/sysdeps/powerpc/bits/mathdef.h +++ b/sysdeps/powerpc/bits/mathdef.h @@ -18,19 +18,3 @@ #if !defined _MATH_H && !defined _COMPLEX_H # error "Never use directly; include 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 */ diff --git a/sysdeps/s390/bits/mathdef.h b/sysdeps/s390/bits/mathdef.h index 5ad04aecef..eeea6fcdc2 100644 --- a/sysdeps/s390/bits/mathdef.h +++ b/sysdeps/s390/bits/mathdef.h @@ -18,12 +18,3 @@ #if !defined _MATH_H && !defined _COMPLEX_H # error "Never use directly; include 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 */ diff --git a/sysdeps/sparc/bits/mathdef.h b/sysdeps/sparc/bits/mathdef.h index 55a35306ce..65ab45aad3 100644 --- a/sysdeps/sparc/bits/mathdef.h +++ b/sysdeps/sparc/bits/mathdef.h @@ -20,15 +20,3 @@ #endif #include - -/* 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/s390/bits/mathdef.h b/sysdeps/x86/bits/fp-logb.h similarity index 63% copy from sysdeps/s390/bits/mathdef.h copy to sysdeps/x86/bits/fp-logb.h index 5ad04aecef..159cea39ac 100644 --- a/sysdeps/s390/bits/mathdef.h +++ b/sysdeps/x86/bits/fp-logb.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1997-2016 Free Software Foundation, Inc. +/* 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 @@ -15,15 +16,9 @@ License along with the GNU C Library; if not, see . */ -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use directly; include instead" +#ifndef _MATH_H +# error "Never use directly; include 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 */ +#define __FP_LOGB0_IS_MIN 1 +#define __FP_LOGBNAN_IS_MIN 1 diff --git a/sysdeps/x86/bits/mathdef.h b/sysdeps/x86/bits/mathdef.h index 17ad1efa89..1c6aee6ba5 100644 --- a/sysdeps/x86/bits/mathdef.h +++ b/sysdeps/x86/bits/mathdef.h @@ -18,12 +18,3 @@ #if !defined _MATH_H && !defined _COMPLEX_H # error "Never use directly; include 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 */ -- 2.11.4.GIT