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 /sysdeps | |
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 'sysdeps')
-rw-r--r-- | sysdeps/aarch64/bits/fp-fast.h (renamed from sysdeps/tile/bits/mathdef.h) | 32 | ||||
-rw-r--r-- | sysdeps/aarch64/bits/mathdef.h | 3 | ||||
-rw-r--r-- | sysdeps/hppa/fpu/bits/mathdef.h | 37 | ||||
-rw-r--r-- | sysdeps/powerpc/bits/fp-fast.h (renamed from sysdeps/arm/bits/mathdef.h) | 26 | ||||
-rw-r--r-- | sysdeps/powerpc/bits/mathdef.h | 6 | ||||
-rw-r--r-- | sysdeps/sh/sh4/bits/mathdef.h | 42 | ||||
-rw-r--r-- | sysdeps/x86/bits/mathdef.h | 14 |
7 files changed, 16 insertions, 144 deletions
diff --git a/sysdeps/tile/bits/mathdef.h b/sysdeps/aarch64/bits/fp-fast.h index 8ed7ac4341..d84249d162 100644 --- a/sysdeps/tile/bits/mathdef.h +++ b/sysdeps/aarch64/bits/fp-fast.h @@ -1,6 +1,6 @@ -/* Copyright (C) 2011-2016 Free Software Foundation, Inc. +/* Define FP_FAST_* macros. AArch64 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 @@ -13,38 +13,22 @@ 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 -# define FP_FAST_FMA 1 -# endif - -# ifdef __FP_FAST_FMAF -# define FP_FAST_FMAF 1 -# endif +# define FP_FAST_FMA 1 +# define FP_FAST_FMAF 1 # ifdef __FP_FAST_FMAL # 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 diff --git a/sysdeps/aarch64/bits/mathdef.h b/sysdeps/aarch64/bits/mathdef.h index 2b55b59a5e..5418beacfb 100644 --- a/sysdeps/aarch64/bits/mathdef.h +++ b/sysdeps/aarch64/bits/mathdef.h @@ -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 index 24b67b2f62..0000000000 --- a/sysdeps/hppa/fpu/bits/mathdef.h +++ /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 diff --git a/sysdeps/arm/bits/mathdef.h b/sysdeps/powerpc/bits/fp-fast.h index 68c96f0ce4..1b6c32c16b 100644 --- a/sysdeps/arm/bits/mathdef.h +++ b/sysdeps/powerpc/bits/fp-fast.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1999-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. The GNU C Library is free software; you can redistribute it and/or @@ -12,27 +13,22 @@ 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 @@ -40,10 +36,4 @@ # 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 diff --git a/sysdeps/powerpc/bits/mathdef.h b/sysdeps/powerpc/bits/mathdef.h index debb5a5d26..392e4e5ac6 100644 --- a/sysdeps/powerpc/bits/mathdef.h +++ b/sysdeps/powerpc/bits/mathdef.h @@ -33,10 +33,4 @@ # 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 index f3ee2879a7..0000000000 --- a/sysdeps/sh/sh4/bits/mathdef.h +++ /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 diff --git a/sysdeps/x86/bits/mathdef.h b/sysdeps/x86/bits/mathdef.h index 2f0025c38d..17ad1efa89 100644 --- a/sysdeps/x86/bits/mathdef.h +++ b/sysdeps/x86/bits/mathdef.h @@ -26,18 +26,4 @@ # 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 */ |