about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog15
-rw-r--r--sysdeps/x86/bits/mathdef.h3
-rw-r--r--sysdeps/x86/fpu/Makefile6
-rw-r--r--sysdeps/x86/fpu/test-flt-eval-method-387.c1
-rw-r--r--sysdeps/x86/fpu/test-flt-eval-method-sse.c1
5 files changed, 24 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 8dbd8546b6..963bf2af63 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 e61c28aea3..9423a7f558 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 b561995658..a8047a4504 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 0000000000..2fb7acfb76
--- /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 0000000000..2fb7acfb76
--- /dev/null
+++ b/sysdeps/x86/fpu/test-flt-eval-method-sse.c
@@ -0,0 +1 @@
+#include <test-flt-eval-method.c>