diff options
Diffstat (limited to 'sysdeps')
32 files changed, 219 insertions, 39 deletions
diff --git a/sysdeps/arm/nofpu/Implies b/sysdeps/arm/nofpu/Implies new file mode 100644 index 0000000000..abcbadb25f --- /dev/null +++ b/sysdeps/arm/nofpu/Implies @@ -0,0 +1 @@ +ieee754/soft-fp diff --git a/sysdeps/arm/preconfigure b/sysdeps/arm/preconfigure index 33e9501c4f..d803256d9f 100644 --- a/sysdeps/arm/preconfigure +++ b/sysdeps/arm/preconfigure @@ -52,4 +52,5 @@ $as_echo "$as_me: WARNING: arm/preconfigure: Did not find ARM architecture type; esac machine=arm/$machine + with_fp_cond="!defined __SOFTFP__" esac diff --git a/sysdeps/arm/preconfigure.ac b/sysdeps/arm/preconfigure.ac index 20de5bcfea..43d014031d 100644 --- a/sysdeps/arm/preconfigure.ac +++ b/sysdeps/arm/preconfigure.ac @@ -47,4 +47,5 @@ arm*) esac machine=arm/$machine + with_fp_cond="!defined __SOFTFP__" esac diff --git a/sysdeps/arm/s_fma.c b/sysdeps/arm/s_fma.c deleted file mode 100644 index dc4e27bfc1..0000000000 --- a/sysdeps/arm/s_fma.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __SOFTFP__ -# include <soft-fp/fmadf4.c> -#else -# include <sysdeps/ieee754/dbl-64/s_fma.c> -#endif diff --git a/sysdeps/arm/s_fmaf.c b/sysdeps/arm/s_fmaf.c deleted file mode 100644 index 550d8b85d3..0000000000 --- a/sysdeps/arm/s_fmaf.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __SOFTFP__ -# include <soft-fp/fmasf4.c> -#else -# include <sysdeps/ieee754/dbl-64/s_fmaf.c> -#endif diff --git a/sysdeps/ieee754/soft-fp/Makefile b/sysdeps/ieee754/soft-fp/Makefile new file mode 100644 index 0000000000..ada13e8b70 --- /dev/null +++ b/sysdeps/ieee754/soft-fp/Makefile @@ -0,0 +1,3 @@ +ifeq ($(subdir),math) +CPPFLAGS += -I../soft-fp +endif diff --git a/sysdeps/ieee754/soft-fp/s_fma.c b/sysdeps/ieee754/soft-fp/s_fma.c new file mode 100644 index 0000000000..313547d061 --- /dev/null +++ b/sysdeps/ieee754/soft-fp/s_fma.c @@ -0,0 +1,68 @@ +/* Implement fma using soft-fp. + Copyright (C) 2013-2017 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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/>. */ + +#include <math.h> +#include <libc-diag.h> +#include <libm-alias-double.h> + +/* R_e is not set in cases where it is not used in packing, but the + compiler does not see that it is set in all cases where it is + used, resulting in warnings that it may be used uninitialized. + The location of the warning differs in different versions of GCC, + it may be where R is defined using a macro or it may be where the + macro is defined. */ +DIAG_PUSH_NEEDS_COMMENT; +DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wmaybe-uninitialized"); + +#include "soft-fp.h" +#include "double.h" + +double +__fma (double a, double b, double c) +{ + FP_DECL_EX; + FP_DECL_D (A); + FP_DECL_D (B); + FP_DECL_D (C); + FP_DECL_D (R); + double r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_D (A, a); + FP_UNPACK_D (B, b); + FP_UNPACK_D (C, c); + FP_FMA_D (R, A, B, C); + FP_PACK_D (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} +DIAG_POP_NEEDS_COMMENT; + +#ifndef __fma +libm_alias_double (__fma, fma) +#endif diff --git a/sysdeps/ieee754/soft-fp/s_fmaf.c b/sysdeps/ieee754/soft-fp/s_fmaf.c new file mode 100644 index 0000000000..295223da50 --- /dev/null +++ b/sysdeps/ieee754/soft-fp/s_fmaf.c @@ -0,0 +1,68 @@ +/* Implement fmaf using soft-fp. + Copyright (C) 2013-2017 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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/>. */ + +#include <math.h> +#include <libc-diag.h> +#include <libm-alias-float.h> + +/* R_e is not set in cases where it is not used in packing, but the + compiler does not see that it is set in all cases where it is + used, resulting in warnings that it may be used uninitialized. + The location of the warning differs in different versions of GCC, + it may be where R is defined using a macro or it may be where the + macro is defined. */ +DIAG_PUSH_NEEDS_COMMENT; +DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wmaybe-uninitialized"); + +#include "soft-fp.h" +#include "single.h" + +float +__fmaf (float a, float b, float c) +{ + FP_DECL_EX; + FP_DECL_S (A); + FP_DECL_S (B); + FP_DECL_S (C); + FP_DECL_S (R); + float r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); + FP_UNPACK_S (B, b); + FP_UNPACK_S (C, c); + FP_FMA_S (R, A, B, C); + FP_PACK_S (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} +DIAG_POP_NEEDS_COMMENT; + +#ifndef __fmaf +libm_alias_float (__fma, fma) +#endif diff --git a/sysdeps/ieee754/soft-fp/s_fmal.c b/sysdeps/ieee754/soft-fp/s_fmal.c new file mode 100644 index 0000000000..79be52c4f1 --- /dev/null +++ b/sysdeps/ieee754/soft-fp/s_fmal.c @@ -0,0 +1,66 @@ +/* Implement fmal using soft-fp. + Copyright (C) 2013-2017 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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/>. */ + +#include <math.h> +#include <libc-diag.h> +#include <libm-alias-ldouble.h> + +/* R_e is not set in cases where it is not used in packing, but the + compiler does not see that it is set in all cases where it is + used, resulting in warnings that it may be used uninitialized. + The location of the warning differs in different versions of GCC, + it may be where R is defined using a macro or it may be where the + macro is defined. */ +DIAG_PUSH_NEEDS_COMMENT; +DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wmaybe-uninitialized"); + +#include "soft-fp.h" +#include "quad.h" + +long double +__fmal (long double a, long double b, long double c) +{ + FP_DECL_EX; + FP_DECL_Q (A); + FP_DECL_Q (B); + FP_DECL_Q (C); + FP_DECL_Q (R); + long double r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_Q (A, a); + FP_UNPACK_Q (B, b); + FP_UNPACK_Q (C, c); + FP_FMA_Q (R, A, B, C); + FP_PACK_Q (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} +DIAG_POP_NEEDS_COMMENT; + +libm_alias_ldouble (__fma, fma) diff --git a/sysdeps/m68k/coldfire/nofpu/Implies b/sysdeps/m68k/coldfire/nofpu/Implies new file mode 100644 index 0000000000..abcbadb25f --- /dev/null +++ b/sysdeps/m68k/coldfire/nofpu/Implies @@ -0,0 +1 @@ +ieee754/soft-fp diff --git a/sysdeps/m68k/coldfire/nofpu/s_fma.c b/sysdeps/m68k/coldfire/nofpu/s_fma.c deleted file mode 100644 index d9613fa67c..0000000000 --- a/sysdeps/m68k/coldfire/nofpu/s_fma.c +++ /dev/null @@ -1 +0,0 @@ -#include <soft-fp/fmadf4.c> diff --git a/sysdeps/m68k/coldfire/nofpu/s_fmaf.c b/sysdeps/m68k/coldfire/nofpu/s_fmaf.c deleted file mode 100644 index aa5c9b2d91..0000000000 --- a/sysdeps/m68k/coldfire/nofpu/s_fmaf.c +++ /dev/null @@ -1 +0,0 @@ -#include <soft-fp/fmasf4.c> diff --git a/sysdeps/microblaze/Implies b/sysdeps/microblaze/Implies index 73c766c52e..746b21ad66 100644 --- a/sysdeps/microblaze/Implies +++ b/sysdeps/microblaze/Implies @@ -1,4 +1,5 @@ wordsize-32 # MicroBlaze uses IEEE 754 floating point. +ieee754/soft-fp ieee754/flt-32 ieee754/dbl-64 diff --git a/sysdeps/microblaze/s_fma.c b/sysdeps/microblaze/s_fma.c deleted file mode 100644 index d9613fa67c..0000000000 --- a/sysdeps/microblaze/s_fma.c +++ /dev/null @@ -1 +0,0 @@ -#include <soft-fp/fmadf4.c> diff --git a/sysdeps/microblaze/s_fmaf.c b/sysdeps/microblaze/s_fmaf.c deleted file mode 100644 index aa5c9b2d91..0000000000 --- a/sysdeps/microblaze/s_fmaf.c +++ /dev/null @@ -1 +0,0 @@ -#include <soft-fp/fmasf4.c> diff --git a/sysdeps/mips/ieee754/s_fma.c b/sysdeps/mips/ieee754/s_fma.c deleted file mode 100644 index 574141416b..0000000000 --- a/sysdeps/mips/ieee754/s_fma.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __mips_hard_float -# include <sysdeps/ieee754/dbl-64/s_fma.c> -#else -# include <soft-fp/fmadf4.c> -#endif diff --git a/sysdeps/mips/ieee754/s_fmaf.c b/sysdeps/mips/ieee754/s_fmaf.c deleted file mode 100644 index 30bcdae620..0000000000 --- a/sysdeps/mips/ieee754/s_fmaf.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __mips_hard_float -# include <sysdeps/ieee754/dbl-64/s_fmaf.c> -#else -# include <soft-fp/fmasf4.c> -#endif diff --git a/sysdeps/mips/ieee754/s_fmal.c b/sysdeps/mips/ieee754/s_fmal.c index 6b83e914fe..c52331967d 100644 --- a/sysdeps/mips/ieee754/s_fmal.c +++ b/sysdeps/mips/ieee754/s_fmal.c @@ -4,4 +4,4 @@ # error "long double fma being compiled for o32 ABI" #endif -#include <soft-fp/fmatf4.c> +#include <sysdeps/ieee754/soft-fp/s_fmal.c> diff --git a/sysdeps/mips/mips32/nofpu/Implies b/sysdeps/mips/mips32/nofpu/Implies new file mode 100644 index 0000000000..abcbadb25f --- /dev/null +++ b/sysdeps/mips/mips32/nofpu/Implies @@ -0,0 +1 @@ +ieee754/soft-fp diff --git a/sysdeps/mips/mips64/n32/fpu/s_fma.c b/sysdeps/mips/mips64/n32/fpu/s_fma.c new file mode 100644 index 0000000000..b61fa643de --- /dev/null +++ b/sysdeps/mips/mips64/n32/fpu/s_fma.c @@ -0,0 +1 @@ +#include <sysdeps/ieee754/dbl-64/s_fma.c> diff --git a/sysdeps/mips/mips64/n32/nofpu/Implies b/sysdeps/mips/mips64/n32/nofpu/Implies new file mode 100644 index 0000000000..abcbadb25f --- /dev/null +++ b/sysdeps/mips/mips64/n32/nofpu/Implies @@ -0,0 +1 @@ +ieee754/soft-fp diff --git a/sysdeps/mips/mips64/n64/fpu/s_fma.c b/sysdeps/mips/mips64/n64/fpu/s_fma.c new file mode 100644 index 0000000000..b61fa643de --- /dev/null +++ b/sysdeps/mips/mips64/n64/fpu/s_fma.c @@ -0,0 +1 @@ +#include <sysdeps/ieee754/dbl-64/s_fma.c> diff --git a/sysdeps/mips/mips64/n64/nofpu/Implies b/sysdeps/mips/mips64/n64/nofpu/Implies new file mode 100644 index 0000000000..abcbadb25f --- /dev/null +++ b/sysdeps/mips/mips64/n64/nofpu/Implies @@ -0,0 +1 @@ +ieee754/soft-fp diff --git a/sysdeps/nios2/Implies b/sysdeps/nios2/Implies index 387a0ca052..7d69983412 100644 --- a/sysdeps/nios2/Implies +++ b/sysdeps/nios2/Implies @@ -1,3 +1,4 @@ wordsize-32 +ieee754/soft-fp ieee754/dbl-64 ieee754/flt-32 diff --git a/sysdeps/nios2/s_fma.c b/sysdeps/nios2/s_fma.c deleted file mode 100644 index d9613fa67c..0000000000 --- a/sysdeps/nios2/s_fma.c +++ /dev/null @@ -1 +0,0 @@ -#include <soft-fp/fmadf4.c> diff --git a/sysdeps/nios2/s_fmaf.c b/sysdeps/nios2/s_fmaf.c deleted file mode 100644 index aa5c9b2d91..0000000000 --- a/sysdeps/nios2/s_fmaf.c +++ /dev/null @@ -1 +0,0 @@ -#include <soft-fp/fmasf4.c> diff --git a/sysdeps/sh/nofpu/Implies b/sysdeps/sh/nofpu/Implies new file mode 100644 index 0000000000..abcbadb25f --- /dev/null +++ b/sysdeps/sh/nofpu/Implies @@ -0,0 +1 @@ +ieee754/soft-fp diff --git a/sysdeps/sh/s_fma.c b/sysdeps/sh/s_fma.c deleted file mode 100644 index d92438d448..0000000000 --- a/sysdeps/sh/s_fma.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __SH_FPU_ANY__ -# include <sysdeps/ieee754/dbl-64/s_fma.c> -#else -# include <soft-fp/fmadf4.c> -#endif diff --git a/sysdeps/sh/s_fmaf.c b/sysdeps/sh/s_fmaf.c deleted file mode 100644 index 3b811ae6da..0000000000 --- a/sysdeps/sh/s_fmaf.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __SH_FPU_ANY__ -# include <sysdeps/ieee754/dbl-64/s_fmaf.c> -#else -# include <soft-fp/fmasf4.c> -#endif diff --git a/sysdeps/tile/Implies b/sysdeps/tile/Implies index 5b29b26128..1cbc053905 100644 --- a/sysdeps/tile/Implies +++ b/sysdeps/tile/Implies @@ -1,2 +1,3 @@ +ieee754/soft-fp ieee754/dbl-64 ieee754/flt-32 diff --git a/sysdeps/tile/s_fma.c b/sysdeps/tile/s_fma.c deleted file mode 100644 index d9613fa67c..0000000000 --- a/sysdeps/tile/s_fma.c +++ /dev/null @@ -1 +0,0 @@ -#include <soft-fp/fmadf4.c> diff --git a/sysdeps/tile/s_fmaf.c b/sysdeps/tile/s_fmaf.c deleted file mode 100644 index aa5c9b2d91..0000000000 --- a/sysdeps/tile/s_fmaf.c +++ /dev/null @@ -1 +0,0 @@ -#include <soft-fp/fmasf4.c> |