This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug math/20255] [i386] fdim, fdimf return with excess range and precision / double rounding
- From: "cvs-commit at gcc dot gnu.org" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sourceware dot org
- Date: Tue, 14 Jun 2016 16:05:27 +0000
- Subject: [Bug math/20255] [i386] fdim, fdimf return with excess range and precision / double rounding
- Auto-submitted: auto-generated
- References: <bug-20255-131 at http dot sourceware dot org/bugzilla/>
https://sourceware.org/bugzilla/show_bug.cgi?id=20255
--- Comment #1 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via f4015c8a861803c128112ca41fc62817398bd1c0 (commit)
from 4fea2cda618de1c74959aaec79c020993c34c552 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=f4015c8a861803c128112ca41fc62817398bd1c0
commit f4015c8a861803c128112ca41fc62817398bd1c0
Author: Joseph Myers <joseph@codesourcery.com>
Date: Tue Jun 14 16:04:19 2016 +0000
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.
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 21 +++++++++++++
math/libm-test.inc | 35 ++++++++++++++++++++-
math/s_fdim.c | 3 +-
math/s_fdimf.c | 3 +-
sysdeps/i386/fpu/s_fdim.S | 51 --------------------------------
sysdeps/i386/fpu/s_fdimf.S | 51 --------------------------------
sysdeps/i386/fpu/s_fdiml.S | 51 --------------------------------
sysdeps/i386/i686/fpu/s_fdim.S | 43 ---------------------------
sysdeps/i386/i686/fpu/s_fdimf.S | 43 ---------------------------
sysdeps/i386/i686/fpu/s_fdiml.S | 43 ---------------------------
sysdeps/powerpc/fpu/s_fdim.c | 30 ------------------
sysdeps/powerpc/fpu/s_fdimf.c | 26 ----------------
sysdeps/powerpc/powerpc32/fpu/s_fdim.c | 5 ---
sysdeps/powerpc/powerpc64/fpu/s_fdim.c | 5 ---
sysdeps/x86_64/fpu/s_fdiml.S | 43 ---------------------------
15 files changed, 58 insertions(+), 395 deletions(-)
delete mode 100644 sysdeps/i386/fpu/s_fdim.S
delete mode 100644 sysdeps/i386/fpu/s_fdimf.S
delete mode 100644 sysdeps/i386/fpu/s_fdiml.S
delete mode 100644 sysdeps/i386/i686/fpu/s_fdim.S
delete mode 100644 sysdeps/i386/i686/fpu/s_fdimf.S
delete mode 100644 sysdeps/i386/i686/fpu/s_fdiml.S
delete mode 100644 sysdeps/powerpc/fpu/s_fdim.c
delete mode 100644 sysdeps/powerpc/fpu/s_fdimf.c
delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_fdim.c
delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_fdim.c
delete mode 100644 sysdeps/x86_64/fpu/s_fdiml.S
--
You are receiving this mail because:
You are on the CC list for the bug.