diff options
author | Joseph Myers <joseph@codesourcery.com> | 2016-06-14 16:04:19 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2016-06-14 16:04:19 +0000 |
commit | f4015c8a861803c128112ca41fc62817398bd1c0 (patch) | |
tree | 9feb85605a2ac6ef767caba8f4bebe8b5882575c | |
parent | 4fea2cda618de1c74959aaec79c020993c34c552 (diff) | |
download | glibc-f4015c8a861803c128112ca41fc62817398bd1c0.tar.gz glibc-f4015c8a861803c128112ca41fc62817398bd1c0.tar.xz glibc-f4015c8a861803c128112ca41fc62817398bd1c0.zip |
Use generic fdim on more architectures (bug 6796, bug 20255, bug 20256).
Some architectures have their own versions of fdim functions, which are missing errno setting (bug 6796) and may also return sNaN instead of qNaN for sNaN input, in the case of the x86 / x86_64 long double versions (bug 20256). These versions are not actually doing anything that a compiler couldn't generate, just straightforward comparisons / arithmetic (and, in the x86 / x86_64 case, testing for NaNs with fxam, which isn't actually needed once you use an unordered comparison and let the NaNs pass through the same subtraction as non-NaN inputs). This patch removes the x86 / x86_64 / powerpc versions, so that those architectures use the generic C versions, which correctly handle setting errno and deal properly with sNaN inputs. This seems better than dealing with setting errno in lots of .S versions. The i386 versions also return results with excess range and precision, which is not appropriate for a function exactly defined by reference to IEEE operations. For errno setting to work correctly on overflow, it's necessary to remove excess range with math_narrow_eval, which this patch duly does in the float and double versions so that the tests can reliably pass on x86. For float, this avoids any double rounding issues as the long double precision is more than twice that of float. For double, double rounding issues will need to be addressed separately, so this patch does not fully fix bug 20255. Tested for x86_64, x86 and powerpc. [BZ #6796] [BZ #20255] [BZ #20256] * math/s_fdim.c: Include <math_private.h>. (__fdim): Use math_narrow_eval on result. * math/s_fdimf.c: Include <math_private.h>. (__fdimf): Use math_narrow_eval on result. * sysdeps/i386/fpu/s_fdim.S: Remove file. * sysdeps/i386/fpu/s_fdimf.S: Likewise. * sysdeps/i386/fpu/s_fdiml.S: Likewise. * sysdeps/i386/i686/fpu/s_fdim.S: Likewise. * sysdeps/i386/i686/fpu/s_fdimf.S: Likewise. * sysdeps/i386/i686/fpu/s_fdiml.S: Likewise. * sysdeps/powerpc/fpu/s_fdim.c: Likewise. * sysdeps/powerpc/fpu/s_fdimf.c: Likewise. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: Likewise. * sysdeps/x86_64/fpu/s_fdiml.S: Likewise. * math/libm-test.inc (fdim_test_data): Expect errno setting on overflow. Add sNaN tests.
-rw-r--r-- | ChangeLog | 21 | ||||
-rw-r--r-- | math/libm-test.inc | 35 | ||||
-rw-r--r-- | math/s_fdim.c | 3 | ||||
-rw-r--r-- | math/s_fdimf.c | 3 | ||||
-rw-r--r-- | sysdeps/i386/fpu/s_fdim.S | 51 | ||||
-rw-r--r-- | sysdeps/i386/fpu/s_fdimf.S | 51 | ||||
-rw-r--r-- | sysdeps/i386/fpu/s_fdiml.S | 51 | ||||
-rw-r--r-- | sysdeps/i386/i686/fpu/s_fdim.S | 43 | ||||
-rw-r--r-- | sysdeps/i386/i686/fpu/s_fdimf.S | 43 | ||||
-rw-r--r-- | sysdeps/i386/i686/fpu/s_fdiml.S | 43 | ||||
-rw-r--r-- | sysdeps/powerpc/fpu/s_fdim.c | 30 | ||||
-rw-r--r-- | sysdeps/powerpc/fpu/s_fdimf.c | 26 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/s_fdim.c | 5 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/fpu/s_fdim.c | 5 | ||||
-rw-r--r-- | sysdeps/x86_64/fpu/s_fdiml.S | 43 |
15 files changed, 58 insertions, 395 deletions
diff --git a/ChangeLog b/ChangeLog index abd8fcbba4..b6d20dc89d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,26 @@ 2016-06-14 Joseph Myers <joseph@codesourcery.com> + [BZ #6796] + [BZ #20255] + [BZ #20256] + * math/s_fdim.c: Include <math_private.h>. + (__fdim): Use math_narrow_eval on result. + * math/s_fdimf.c: Include <math_private.h>. + (__fdimf): Use math_narrow_eval on result. + * sysdeps/i386/fpu/s_fdim.S: Remove file. + * sysdeps/i386/fpu/s_fdimf.S: Likewise. + * sysdeps/i386/fpu/s_fdiml.S: Likewise. + * sysdeps/i386/i686/fpu/s_fdim.S: Likewise. + * sysdeps/i386/i686/fpu/s_fdimf.S: Likewise. + * sysdeps/i386/i686/fpu/s_fdiml.S: Likewise. + * sysdeps/powerpc/fpu/s_fdim.c: Likewise. + * sysdeps/powerpc/fpu/s_fdimf.c: Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: Likewise. + * sysdeps/x86_64/fpu/s_fdiml.S: Likewise. + * math/libm-test.inc (fdim_test_data): Expect errno setting on + overflow. Add sNaN tests. + * math/s_fdim.c (__fdim): Use islessequal and isinf instead of fpclassify. * math/s_fdimf.c (__fdimf): Likewise. diff --git a/math/libm-test.inc b/math/libm-test.inc index 010743f98c..cc41c63e7a 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -7211,8 +7211,7 @@ static const struct test_ff_f_data fdim_test_data[] = TEST_ff_f (fdim, max_value, max_value, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, -max_value, -max_value, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, -max_value, max_value, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), - /* Bug 6796: errno setting may be missing. */ - TEST_ff_f (fdim, max_value, -max_value, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION), + TEST_ff_f (fdim, max_value, -max_value, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW), TEST_ff_f (fdim, plus_infty, 9, plus_infty, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, plus_infty, -9, plus_infty, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), @@ -7229,24 +7228,56 @@ static const struct test_ff_f_data fdim_test_data[] = TEST_ff_f (fdim, 0, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, 9, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, -9, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_ff_f (fdim, 0, snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, 9, snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, -9, snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, 0, -snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, 9, -snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, -9, -snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), TEST_ff_f (fdim, qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, qnan_value, 9, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, qnan_value, -9, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, -qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, -qnan_value, 9, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, -qnan_value, -9, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_ff_f (fdim, snan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, snan_value, 9, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, snan_value, -9, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, -snan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, -snan_value, 9, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, -snan_value, -9, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), TEST_ff_f (fdim, plus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, minus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, plus_infty, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, minus_infty, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_ff_f (fdim, plus_infty, snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, minus_infty, snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, plus_infty, -snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, minus_infty, -snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), TEST_ff_f (fdim, qnan_value, plus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, qnan_value, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, -qnan_value, plus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, -qnan_value, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_ff_f (fdim, snan_value, plus_infty, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, snan_value, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, -snan_value, plus_infty, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, -snan_value, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), TEST_ff_f (fdim, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, qnan_value, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, -qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, -qnan_value, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_ff_f (fdim, snan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, snan_value, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, -snan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, -snan_value, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, qnan_value, snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, qnan_value, -snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, -qnan_value, snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, -qnan_value, -snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, snan_value, snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, snan_value, -snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, -snan_value, snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), + TEST_ff_f (fdim, -snan_value, -snan_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION), TEST_ff_f (fdim, plus_infty, plus_infty, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_ff_f (fdim, plus_infty, minus_infty, plus_infty, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), diff --git a/math/s_fdim.c b/math/s_fdim.c index 8789ca4c38..a051ed8db9 100644 --- a/math/s_fdim.c +++ b/math/s_fdim.c @@ -19,6 +19,7 @@ #include <errno.h> #include <math.h> +#include <math_private.h> double __fdim (double x, double y) @@ -26,7 +27,7 @@ __fdim (double x, double y) if (islessequal (x, y)) return 0.0; - double r = x - y; + double r = math_narrow_eval (x - y); if (isinf (r) && !isinf (x) && !isinf (y)) __set_errno (ERANGE); diff --git a/math/s_fdimf.c b/math/s_fdimf.c index 2e8eccfc4f..8aed61d9e7 100644 --- a/math/s_fdimf.c +++ b/math/s_fdimf.c @@ -19,6 +19,7 @@ #include <errno.h> #include <math.h> +#include <math_private.h> float __fdimf (float x, float y) @@ -26,7 +27,7 @@ __fdimf (float x, float y) if (islessequal (x, y)) return 0.0f; - float r = x - y; + float r = math_narrow_eval (x - y); if (isinf (r) && !isinf (x) && !isinf (y)) __set_errno (ERANGE); diff --git a/sysdeps/i386/fpu/s_fdim.S b/sysdeps/i386/fpu/s_fdim.S deleted file mode 100644 index d62069b039..0000000000 --- a/sysdeps/i386/fpu/s_fdim.S +++ /dev/null @@ -1,51 +0,0 @@ -/* Compute positive difference. - Copyright (C) 1997-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. - - 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/>. */ - -#include <sysdep.h> - - .text -ENTRY(__fdim) - fldl 4(%esp) // x - fldl 12(%esp) // x : y - - fucom %st(1) - fnstsw - sahf - jp 1f - - jc 3f - - fstp %st(1) - fldz - jmp 2f - -3: fsubrp %st, %st(1) - ret - -1: fxam - fnstsw - andb $0x45, %ah - cmpb $0x01, %ah - je 2f - - fxch -2: fstp %st(1) - ret -END(__fdim) -weak_alias (__fdim, fdim) diff --git a/sysdeps/i386/fpu/s_fdimf.S b/sysdeps/i386/fpu/s_fdimf.S deleted file mode 100644 index d2bd29a233..0000000000 --- a/sysdeps/i386/fpu/s_fdimf.S +++ /dev/null @@ -1,51 +0,0 @@ -/* Compute positive difference. - Copyright (C) 1997-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. - - 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/>. */ - -#include <sysdep.h> - - .text -ENTRY(__fdimf) - flds 4(%esp) // x - flds 8(%esp) // x : y - - fucom %st(1) - fnstsw - sahf - jp 1f - - jc 3f - - fstp %st(1) - fldz - jmp 2f - -3: fsubrp %st, %st(1) - ret - -1: fxam - fnstsw - andb $0x45, %ah - cmpb $0x01, %ah - je 2f - - fxch -2: fstp %st(1) - ret -END(__fdimf) -weak_alias (__fdimf, fdimf) diff --git a/sysdeps/i386/fpu/s_fdiml.S b/sysdeps/i386/fpu/s_fdiml.S deleted file mode 100644 index df6e9c047a..0000000000 --- a/sysdeps/i386/fpu/s_fdiml.S +++ /dev/null @@ -1,51 +0,0 @@ -/* Compute positive difference. - Copyright (C) 1997-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. - - 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/>. */ - -#include <sysdep.h> - - .text -ENTRY(__fdiml) - fldt 4(%esp) // x - fldt 16(%esp) // x : y - - fucom %st(1) - fnstsw - sahf - jp 1f - - jc 3f - - fstp %st(1) - fldz - jmp 2f - -3: fsubrp %st, %st(1) - ret - -1: fxam - fnstsw - andb $0x45, %ah - cmpb $0x01, %ah - je 2f - - fxch -2: fstp %st(1) - ret -END(__fdiml) -weak_alias (__fdiml, fdiml) diff --git a/sysdeps/i386/i686/fpu/s_fdim.S b/sysdeps/i386/i686/fpu/s_fdim.S deleted file mode 100644 index 2cbf815f98..0000000000 --- a/sysdeps/i386/i686/fpu/s_fdim.S +++ /dev/null @@ -1,43 +0,0 @@ -/* Compute positive difference. - Copyright (C) 1997-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. - - 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/>. */ - -#include <sysdep.h> - - .text -ENTRY(__fdim) - fldl 4(%esp) // x - fldl 12(%esp) // x : y - - fucomi %st(1), %st - jp 1f - - jc 3f - fstp %st(1) - fldz - jmp 2f - -3: fsubrp %st, %st(1) - ret - -1: fucomi %st(0), %st - fcmovnu %st(1), %st -2: fstp %st(1) - ret -END(__fdim) -weak_alias (__fdim, fdim) diff --git a/sysdeps/i386/i686/fpu/s_fdimf.S b/sysdeps/i386/i686/fpu/s_fdimf.S deleted file mode 100644 index 291433f275..0000000000 --- a/sysdeps/i386/i686/fpu/s_fdimf.S +++ /dev/null @@ -1,43 +0,0 @@ -/* Compute positive difference. - Copyright (C) 1997-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. - - 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/>. */ - -#include <sysdep.h> - - .text -ENTRY(__fdimf) - flds 4(%esp) // x - flds 8(%esp) // x : y - - fucomi %st(1), %st - jp 1f - - jc 3f - fstp %st(1) - fldz - jmp 2f - -3: fsubrp %st, %st(1) - ret - -1: fucomi %st(0), %st - fcmovnu %st(1), %st -2: fstp %st(1) - ret -END(__fdimf) -weak_alias (__fdimf, fdimf) diff --git a/sysdeps/i386/i686/fpu/s_fdiml.S b/sysdeps/i386/i686/fpu/s_fdiml.S deleted file mode 100644 index 8cdfedef0a..0000000000 --- a/sysdeps/i386/i686/fpu/s_fdiml.S +++ /dev/null @@ -1,43 +0,0 @@ -/* Compute positive difference. - Copyright (C) 1997-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. - - 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/>. */ - -#include <sysdep.h> - - .text -ENTRY(__fdiml) - fldt 4(%esp) // x - fldt 16(%esp) // x : y - - fucomi %st(1), %st - jp 1f - - jc 3f - fstp %st(1) - fldz - jmp 2f - -3: fsubrp %st, %st(1) - ret - -1: fucomi %st(0), %st - fcmovnu %st(1), %st -2: fstp %st(1) - ret -END(__fdiml) -weak_alias (__fdiml, fdiml) diff --git a/sysdeps/powerpc/fpu/s_fdim.c b/sysdeps/powerpc/fpu/s_fdim.c deleted file mode 100644 index 1d4b6d0665..0000000000 --- a/sysdeps/powerpc/fpu/s_fdim.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Return positive difference between arguments. - 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/>. */ - -#include <math.h> - -double -__fdim (double x, double y) -{ - return x <= y ? 0 : x - y; -} -weak_alias (__fdim, fdim) -#ifdef NO_LONG_DOUBLE -strong_alias (__fdim, __fdiml) -weak_alias (__fdim, fdiml) -#endif diff --git a/sysdeps/powerpc/fpu/s_fdimf.c b/sysdeps/powerpc/fpu/s_fdimf.c deleted file mode 100644 index 8c645c413a..0000000000 --- a/sysdeps/powerpc/fpu/s_fdimf.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Return positive difference between arguments. - 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/>. */ - -#include <math.h> - -float -__fdimf (float x, float y) -{ - return x <= y ? 0 : x - y; -} -weak_alias (__fdimf, fdimf) diff --git a/sysdeps/powerpc/powerpc32/fpu/s_fdim.c b/sysdeps/powerpc/powerpc32/fpu/s_fdim.c deleted file mode 100644 index e34b51ee54..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_fdim.c +++ /dev/null @@ -1,5 +0,0 @@ -#include <math_ldbl_opt.h> -#include <sysdeps/powerpc/fpu/s_fdim.c> -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __fdim, fdiml, GLIBC_2_1); -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/s_fdim.c b/sysdeps/powerpc/powerpc64/fpu/s_fdim.c deleted file mode 100644 index e34b51ee54..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_fdim.c +++ /dev/null @@ -1,5 +0,0 @@ -#include <math_ldbl_opt.h> -#include <sysdeps/powerpc/fpu/s_fdim.c> -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __fdim, fdiml, GLIBC_2_1); -#endif diff --git a/sysdeps/x86_64/fpu/s_fdiml.S b/sysdeps/x86_64/fpu/s_fdiml.S deleted file mode 100644 index f9f1e20259..0000000000 --- a/sysdeps/x86_64/fpu/s_fdiml.S +++ /dev/null @@ -1,43 +0,0 @@ -/* Compute positive difference. - Copyright (C) 1997-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. - - 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/>. */ - -#include <sysdep.h> - - .text -ENTRY(__fdiml) - fldt 8(%rsp) // x - fldt 24(%rsp) // x : y - - fucomi %st(1), %st - jp 1f - - jc 3f - fstp %st(1) - fldz - jmp 2f - -3: fsubrp %st, %st(1) - ret - -1: fucomi %st(0), %st - fcmovnu %st(1), %st -2: fstp %st(1) - ret -END(__fdiml) -weak_alias (__fdiml, fdiml) |