diff options
author | Joseph Myers <joseph@codesourcery.com> | 2016-11-29 01:45:00 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2016-11-29 01:45:00 +0000 |
commit | f11e220d2dde732121da05df25f6aeda0c52e3c9 (patch) | |
tree | c535b44b41db86f5e620ce61579fa4b580fa47a9 /math | |
parent | e5277ba25dc0665f192ebc3f9649a00098dbdc9e (diff) | |
download | glibc-f11e220d2dde732121da05df25f6aeda0c52e3c9.tar.gz glibc-f11e220d2dde732121da05df25f6aeda0c52e3c9.tar.xz glibc-f11e220d2dde732121da05df25f6aeda0c52e3c9.zip |
Refactor FP_FAST_* into bits/fp-fast.h.
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.
Diffstat (limited to 'math')
-rw-r--r-- | math/Makefile | 2 | ||||
-rw-r--r-- | math/math.h | 15 |
2 files changed, 11 insertions, 6 deletions
diff --git a/math/Makefile b/math/Makefile index bcf627d173..a7c2b07fd8 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/flt-eval-method.h bits/fp-fast.h # FPU support code. aux := setfpucw fpu_control diff --git a/math/math.h b/math/math.h index 70bf8e5ac0..95b39b3d92 100644 --- a/math/math.h +++ b/math/math.h @@ -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, |