This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.24-399-g56ede9e
- From: jsm28 at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 23 Nov 2016 17:56:53 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.24-399-g56ede9e
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 56ede9ed59684a5802cc88733055453901f1c2f0 (commit)
from c650aa612ff622d843c6b6e5eeb183aae1a17eaa (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 -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=56ede9ed59684a5802cc88733055453901f1c2f0
commit 56ede9ed59684a5802cc88733055453901f1c2f0
Author: Joseph Myers <joseph@codesourcery.com>
Date: Wed Nov 23 17:56:31 2016 +0000
Fix x86_64 -mfpmath=387 float_t, double_t (bug 20787).
Bug 20787 reports that, while float_t and double_t for 32-bit x86
properly respect -mfpmath=sse, for x86_64 they fail to reflect
-mfpmath=387, which is valid if unusual and results in FLT_EVAL_METHOD
being 2. This patch fixes the definitions to respect
__FLT_EVAL_METHOD__ in that case, arranging for the test that the
types correspond with FLT_EVAL_METHOD to be run with both -mfpmath=387
and -mfpmath=sse.
Note: this patch will also have the effect of making float_t and
double_t be long double for x86_64 with -mfpmath=sse+387, when
FLT_EVAL_METHOD is -1. It seems reasonable for x86_64 to be
consistent with 32-bit x86 in this case (and that definition is
conservatively safe, in that it makes the types correspond to the
widest evaluation format that might be used).
Tested for x86-64 and x86.
[BZ #20787]
* sysdeps/x86/bits/mathdef.h (float_t): Do not define to float if
[__x86_64__] when __FLT_EVAL_METHOD__ is nonzero.
(double_t): Do not define to double if [__x86_64__] when
__FLT_EVAL_METHOD__ is nonzero.
* sysdeps/x86/fpu/test-flt-eval-method-387.c: New file.
* sysdeps/x86/fpu/test-flt-eval-method-sse.c: Likewise.
* sysdeps/x86/fpu/Makefile [$(subdir) = math] (tests): Add
test-flt-eval-method-387 and test-flt-eval-method-sse.
[$(subdir) = math] (CFLAGS-test-flt-eval-method-387.c): New
variable.
[$(subdir) = math] (CFLAGS-test-flt-eval-method-sse.c): Likewise.
diff --git a/ChangeLog b/ChangeLog
index 8dbd854..963bf2a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2016-11-23 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #20787]
+ * sysdeps/x86/bits/mathdef.h (float_t): Do not define to float if
+ [__x86_64__] when __FLT_EVAL_METHOD__ is nonzero.
+ (double_t): Do not define to double if [__x86_64__] when
+ __FLT_EVAL_METHOD__ is nonzero.
+ * sysdeps/x86/fpu/test-flt-eval-method-387.c: New file.
+ * sysdeps/x86/fpu/test-flt-eval-method-sse.c: Likewise.
+ * sysdeps/x86/fpu/Makefile [$(subdir) = math] (tests): Add
+ test-flt-eval-method-387 and test-flt-eval-method-sse.
+ [$(subdir) = math] (CFLAGS-test-flt-eval-method-387.c): New
+ variable.
+ [$(subdir) = math] (CFLAGS-test-flt-eval-method-sse.c): Likewise.
+
2016-11-23 Chris Metcalf <cmetcalf@mellanox.com>
* scripts/build-many-glibcs.py (Context.add_all_configs): Revert
diff --git a/sysdeps/x86/bits/mathdef.h b/sysdeps/x86/bits/mathdef.h
index e61c28a..9423a7f 100644
--- a/sysdeps/x86/bits/mathdef.h
+++ b/sysdeps/x86/bits/mathdef.h
@@ -22,7 +22,8 @@
#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
# define _MATH_H_MATHDEF 1
-# if defined __x86_64__ || (defined __FLT_EVAL_METHOD__ && __FLT_EVAL_METHOD__ == 0)
+# if ((defined __x86_64__ && !defined __FLT_EVAL_METHOD__) \
+ || (defined __FLT_EVAL_METHOD__ && __FLT_EVAL_METHOD__ == 0))
/* The x86-64 architecture computes values with the precission of the
used type. Similarly for -m32 -mfpmath=sse. */
typedef float float_t; /* `float' expressions are evaluated as `float'. */
diff --git a/sysdeps/x86/fpu/Makefile b/sysdeps/x86/fpu/Makefile
index b561995..a8047a4 100644
--- a/sysdeps/x86/fpu/Makefile
+++ b/sysdeps/x86/fpu/Makefile
@@ -1,7 +1,11 @@
ifeq ($(subdir),math)
libm-support += powl_helper
-tests += test-fenv-sse test-fenv-clear-sse test-fenv-x87 test-fenv-sse-2
+tests += test-fenv-sse test-fenv-clear-sse test-fenv-x87 test-fenv-sse-2 \
+ test-flt-eval-method-387 test-flt-eval-method-sse
CFLAGS-test-fenv-sse.c += -msse2 -mfpmath=sse
CFLAGS-test-fenv-clear-sse.c += -msse2 -mfpmath=sse
CFLAGS-test-fenv-sse-2.c += -msse2 -mfpmath=sse
+CFLAGS-test-flt-eval-method-387.c += -fexcess-precision=standard -mfpmath=387
+CFLAGS-test-flt-eval-method-sse.c += -fexcess-precision=standard -msse2 \
+ -mfpmath=sse
endif
diff --git a/sysdeps/x86/fpu/test-flt-eval-method-387.c b/sysdeps/x86/fpu/test-flt-eval-method-387.c
new file mode 100644
index 0000000..2fb7acf
--- /dev/null
+++ b/sysdeps/x86/fpu/test-flt-eval-method-387.c
@@ -0,0 +1 @@
+#include <test-flt-eval-method.c>
diff --git a/sysdeps/x86/fpu/test-flt-eval-method-sse.c b/sysdeps/x86/fpu/test-flt-eval-method-sse.c
new file mode 100644
index 0000000..2fb7acf
--- /dev/null
+++ b/sysdeps/x86/fpu/test-flt-eval-method-sse.c
@@ -0,0 +1 @@
+#include <test-flt-eval-method.c>
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 15 +++++++++++++++
sysdeps/x86/bits/mathdef.h | 3 ++-
sysdeps/x86/fpu/Makefile | 6 +++++-
sysdeps/x86/fpu/test-flt-eval-method-387.c | 1 +
sysdeps/x86/fpu/test-flt-eval-method-sse.c | 1 +
5 files changed, 24 insertions(+), 2 deletions(-)
create mode 100644 sysdeps/x86/fpu/test-flt-eval-method-387.c
create mode 100644 sysdeps/x86/fpu/test-flt-eval-method-sse.c
hooks/post-receive
--
GNU C Library master sources