]> sourceware.org Git - glibc.git/commitdiff
Refactor FP_FAST_* into bits/fp-fast.h.
authorJoseph Myers <joseph@codesourcery.com>
Tue, 29 Nov 2016 01:45:00 +0000 (01:45 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 29 Nov 2016 01:45:00 +0000 (01:45 +0000)
Continuing the refactoring of bits/mathdef.h, this patch moves the
FP_FAST_* definitions into a new bits/fp-fast.h header.  Currently
this is only for FP_FAST_FMA*, but in future it would be the
appropriate place for the FP_FAST_* macros from TS 18661-1 as well.

The generic bits/mathdef.h header defines these macros based on
whether the compiler defines __FP_FAST_*.  Most architecture-specific
headers, however, fail to do so, meaning that if the architecture (or
some particular processors) does in fact have fused operations, and
GCC knows to use them inline, the FP_FAST_* macros will still not be
defined.

By refactoring, this patch causes the generic version (based on
__FP_FAST_*) to be used in more cases, and so the macro definitions to
be more accurate.  Architectures that already defined some or all of
these macros other than based on the predefines have their own
versions of fp-fast.h, which are arranged so they define FP_FAST_* if
either the architecture-specific conditions are true or __FP_FAST_*
are defined.

After this refactoring, various bits/mathdef.h headers for
architectures with long double = double are semantically identical to
the generic version.  The patch removes those headers that are
redundant.  (In fact two of the four removed were already redundant
before this patch because they did use __FP_FAST_*.)

Tested for x86_64 and x86, and compilation-only with
build-many-glibcs.py.

* bits/fp-fast.h: New file.
* sysdeps/aarch64/bits/fp-fast.h: Likewise.
* sysdeps/powerpc/bits/fp-fast.h: Likewise.
* math/Makefile (headers): Add bits/fp-fast.h.
* math/math.h: Include <bits/fp-fast.h>.
* bits/mathdef.h (FP_FAST_FMA): Remove.
(FP_FAST_FMAF): Likewise.
(FP_FAST_FMAL): Likewise.
* sysdeps/aarch64/bits/mathdef.h (FP_FAST_FMA): Likewise.
(FP_FAST_FMAF): Likewise.
* sysdeps/powerpc/bits/mathdef.h (FP_FAST_FMA): Likewise.
(FP_FAST_FMAF): Likewise.
* sysdeps/x86/bits/mathdef.h (FP_FAST_FMA): Likewise.
(FP_FAST_FMAF): Likewise.
(FP_FAST_FMAL): Likewise.
* sysdeps/arm/bits/mathdef.h: Remove file.
* sysdeps/hppa/fpu/bits/mathdef.h: Likewise.
* sysdeps/sh/sh4/bits/mathdef.h: Likewise.
* sysdeps/tile/bits/mathdef.h: Likewise.

12 files changed:
ChangeLog
bits/fp-fast.h [moved from sysdeps/arm/bits/mathdef.h with 58% similarity]
bits/mathdef.h
math/Makefile
math/math.h
sysdeps/aarch64/bits/fp-fast.h [new file with mode: 0644]
sysdeps/aarch64/bits/mathdef.h
sysdeps/hppa/fpu/bits/mathdef.h [deleted file]
sysdeps/powerpc/bits/fp-fast.h [moved from sysdeps/tile/bits/mathdef.h with 53% similarity]
sysdeps/powerpc/bits/mathdef.h
sysdeps/sh/sh4/bits/mathdef.h [deleted file]
sysdeps/x86/bits/mathdef.h

index 6b6414505032dcdc9dfc0edf2ff1e6570dc59978..2d1964573fb79aaa98ed07e27501a157243f0adf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2016-11-29  Joseph Myers  <joseph@codesourcery.com>
+
+       * bits/fp-fast.h: New file.
+       * sysdeps/aarch64/bits/fp-fast.h: Likewise.
+       * sysdeps/powerpc/bits/fp-fast.h: Likewise.
+       * math/Makefile (headers): Add bits/fp-fast.h.
+       * math/math.h: Include <bits/fp-fast.h>.
+       * bits/mathdef.h (FP_FAST_FMA): Remove.
+       (FP_FAST_FMAF): Likewise.
+       (FP_FAST_FMAL): Likewise.
+       * sysdeps/aarch64/bits/mathdef.h (FP_FAST_FMA): Likewise.
+       (FP_FAST_FMAF): Likewise.
+       * sysdeps/powerpc/bits/mathdef.h (FP_FAST_FMA): Likewise.
+       (FP_FAST_FMAF): Likewise.
+       * sysdeps/x86/bits/mathdef.h (FP_FAST_FMA): Likewise.
+       (FP_FAST_FMAF): Likewise.
+       (FP_FAST_FMAL): Likewise.
+       * sysdeps/arm/bits/mathdef.h: Remove file.
+       * sysdeps/hppa/fpu/bits/mathdef.h: Likewise.
+       * sysdeps/sh/sh4/bits/mathdef.h: Likewise.
+       * sysdeps/tile/bits/mathdef.h: Likewise.
+
 2016-11-28  Joseph Myers  <joseph@codesourcery.com>
 
        * math/w_ilogb_template.c: New file.  Based on math/w_ilogb.c.
similarity index 58%
rename from sysdeps/arm/bits/mathdef.h
rename to bits/fp-fast.h
index 68c96f0ce4ab6091bd39f57fb88e7cd386c95a48..8598710c1af8e19295667da4c3f9b16b0161886f 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 1999-2016 Free Software Foundation, Inc.
+/* Define FP_FAST_* macros.
+   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
    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
+   License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#if !defined _MATH_H && !defined _COMPLEX_H
-# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+#ifndef _MATH_H
+# error "Never use <bits/fp-fast.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)
+#ifdef __USE_ISOC99
 
 /* The GCC 4.6 compiler will define __FP_FAST_FMA{,F,L} if the fma{,f,l}
    builtins are supported.  */
 #  define FP_FAST_FMAL 1
 # endif
 
-#endif /* ISO C99 */
-
-#ifndef __NO_LONG_DOUBLE_MATH
-/* Signal that we do not really have a `long double'.  This disables the
-   declaration of all the `long double' function variants.  */
-# define __NO_LONG_DOUBLE_MATH 1
 #endif
index 6dedc51c8332142c4220df3d8d104d666a7b31e5..050204ab66b2aa7b4de1b3d1830b4a40383f7f09 100644 (file)
 # define FP_ILOGB0     (-2147483647)
 # define FP_ILOGBNAN   2147483647
 
-/* The GCC 4.6 compiler will define __FP_FAST_FMA{,F,L} if the fma{,f,l}
-   builtins are supported.  */
-#ifdef __FP_FAST_FMA
-# define FP_FAST_FMA 1
-#endif
-
-#ifdef __FP_FAST_FMAF
-# define FP_FAST_FMAF 1
-#endif
-
-#ifdef __FP_FAST_FMAL
-# define FP_FAST_FMAL 1
-#endif
-
 #endif /* ISO C99 */
 
 #ifndef __NO_LONG_DOUBLE_MATH
index bcf627d1735a087bdbadfedd97ade2d5a5febd7f..a7c2b07fd8bd92b7df4f638d30f96cf3c03ec3b7 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/flt-eval-method.h bits/fp-fast.h
 
 # FPU support code.
 aux            := setfpucw fpu_control
index 70bf8e5ac0869a8fcabdf8f2b2c07d2a370c500c..95b39b3d92b2cbf0c47ac25898cdb46f1c927f8a 100644 (file)
@@ -97,6 +97,15 @@ typedef _Float128x double_t;
 # endif
 #endif
 
+/* Define macros for the return value of ilogb.
+
+    FP_ILOGB0  Expands to a value returned by `ilogb (0.0)'.
+    FP_ILOGBNAN        Expands to a value returned by `ilogb (NAN)'.
+
+*/
+
+#include <bits/mathdef.h>
+
 /* Get the architecture specific values describing the floating-point
    evaluation.  The following symbols will get defined:
 
@@ -107,13 +116,9 @@ typedef _Float128x double_t;
                generally executes about as fast as a multiply and an add.
                This macro is defined only iff the `fma' function is
                implemented directly with a hardware multiply-add instructions.
-
-    FP_ILOGB0  Expands to a value returned by `ilogb (0.0)'.
-    FP_ILOGBNAN        Expands to a value returned by `ilogb (NAN)'.
-
 */
 
-#include <bits/mathdef.h>
+#include <bits/fp-fast.h>
 
 /* The file <bits/mathcalls.h> contains the prototypes for all the
    actual math functions.  These macros are used for those prototypes,
diff --git a/sysdeps/aarch64/bits/fp-fast.h b/sysdeps/aarch64/bits/fp-fast.h
new file mode 100644 (file)
index 0000000..d84249d
--- /dev/null
@@ -0,0 +1,34 @@
+/* Define FP_FAST_* macros.  AArch64 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-fast.h> directly; include <math.h> instead."
+#endif
+
+#ifdef __USE_ISOC99
+
+/* The GCC 4.6 compiler will define __FP_FAST_FMA{,F,L} if the fma{,f,l}
+   builtins are supported.  */
+# define FP_FAST_FMA 1
+# define FP_FAST_FMAF 1
+
+# ifdef __FP_FAST_FMAL
+#  define FP_FAST_FMAL 1
+# endif
+
+#endif
index 2b55b59a5e4292862a92d272e7af3af4ab2476d1..5418beacfbd13a52f4dd346450db34ac4bbc7830 100644 (file)
@@ -27,7 +27,4 @@
 # define FP_ILOGB0     (-2147483647)
 # define FP_ILOGBNAN   (2147483647)
 
-# define FP_FAST_FMA 1
-# define FP_FAST_FMAF 1
-
 #endif /* ISO C99 */
diff --git a/sysdeps/hppa/fpu/bits/mathdef.h b/sysdeps/hppa/fpu/bits/mathdef.h
deleted file mode 100644 (file)
index 24b67b2..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 2006-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/>.  */
-
-#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 */
-
-#ifndef __NO_LONG_DOUBLE_MATH
-/* On hppa `long double' and `double' are 64-bits.  So, libm is built
-   with NO_LONG_DOUBLE defined.  The following define ensures the library
-   and headers are consistent.  This disables the declaration of all the
-   `long double' function variants.  */
-# define __NO_LONG_DOUBLE_MATH 1
-#endif
similarity index 53%
rename from sysdeps/tile/bits/mathdef.h
rename to sysdeps/powerpc/bits/fp-fast.h
index 8ed7ac43412fa05f1302c72bc9457d42ef0f95c7..1b6c32c16b1c6224c57d3818265071b435c69ba3 100644 (file)
@@ -1,6 +1,6 @@
-/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+/* Define FP_FAST_* macros.  PowerPC version.
+   Copyright (C) 2016 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
-   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
 
    The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    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
+   License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#if !defined _MATH_H && !defined _COMPLEX_H
-# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+#ifndef _MATH_H
+# error "Never use <bits/fp-fast.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)
+#ifdef __USE_ISOC99
 
 /* The GCC 4.6 compiler will define __FP_FAST_FMA{,F,L} if the fma{,f,l}
    builtins are supported.  */
-# ifdef __FP_FAST_FMA
+# if (!defined _SOFT_FLOAT && !defined __NO_FPRS__) || defined __FP_FAST_FMA
 #  define FP_FAST_FMA 1
 # endif
 
-# ifdef __FP_FAST_FMAF
+# if (!defined _SOFT_FLOAT && !defined __NO_FPRS__) || defined __FP_FAST_FMAF
 #  define FP_FAST_FMAF 1
 # endif
 
 #  define FP_FAST_FMAL 1
 # endif
 
-#endif /* ISO C99 */
-
-#ifndef __NO_LONG_DOUBLE_MATH
-/* Signal that we do not really have a `long double'.  This disables the
-   declaration of all the `long double' function variants.  */
-# define __NO_LONG_DOUBLE_MATH 1
 #endif
index debb5a5d26753400b64e3c3f146d3c8a4647e14c..392e4e5ac6b7cc9327bdcee379a3ffb304071e92 100644 (file)
 # define FP_ILOGB0     (-2147483647)
 # define FP_ILOGBNAN   (2147483647)
 
-# if !defined _SOFT_FLOAT && !defined __NO_FPRS__
-/* The powerpc has a combined multiply/add instruction.  */
-#  define FP_FAST_FMA 1
-#  define FP_FAST_FMAF 1
-# endif
-
 #endif /* ISO C99 */
diff --git a/sysdeps/sh/sh4/bits/mathdef.h b/sysdeps/sh/sh4/bits/mathdef.h
deleted file mode 100644 (file)
index f3ee287..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright (C) 1997-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/>.  */
-
-#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     (-0x7fffffff)
-# define FP_ILOGBNAN   0x7fffffff
-
-#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.  */
-# define __NO_LONG_DOUBLE_MATH 1
-#endif
index 2f0025c38d5c90105b7d98673a7f4d43ef9a642d..17ad1efa895d4752c29c42ebf8dbea36712c662e 100644 (file)
 # define FP_ILOGB0     (-2147483647 - 1)
 # define FP_ILOGBNAN   (-2147483647 - 1)
 
-/* The GCC 4.6 compiler will define __FP_FAST_FMA{,F,L} if the fma{,f,l}
-   builtins are supported.  */
-# ifdef __FP_FAST_FMA
-#  define FP_FAST_FMA 1
-# endif
-
-# ifdef __FP_FAST_FMAF
-#  define FP_FAST_FMAF 1
-# endif
-
-# ifdef __FP_FAST_FMAL
-#  define FP_FAST_FMAL 1
-# endif
-
 #endif /* ISO C99 */
This page took 0.162836 seconds and 5 git commands to generate.