]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Disable x87 inline functions for x86_64 and SSE [BZ #17262]
authorSiddhesh Poyarekar <siddhesh@redhat.com>
Wed, 13 Aug 2014 08:35:15 +0000 (14:05 +0530)
committerSiddhesh Poyarekar <siddhesh@redhat.com>
Wed, 13 Aug 2014 08:35:16 +0000 (14:05 +0530)
Since:

commit 409e00bd69b8d8dd74d7327085351d26769ea6fc
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Wed Jan 29 07:51:41 2014 -0800

    Disable x87 inline functions for SSE2 math

    When i386 and x86-64 mathinline.h was merged into a single mathinline.h,
    "gcc -m32" enables x87 inline functions on x86-64 even when -mfpmath=sse
    and SSE2 is enabled.  It is a regression on x86-64.  We should check
    __SSE2_MATH__ instead of __x86_64__ when disabling x87 inline functions.

gcc-3.2 is unable to correctly compile x86_64 routines for llrint
since it gets redefined.  This is because gcc 3.2 does not set
__SSE2_MATH__ for x86_64, thus exposing the duplicate definition.

The correct fix ought to be to check for both __SSE2_MATH__ and
__x86_64__ and enable those bits only when neither are defined.

Tested fix with the reproducer for
409e00bd69b8d8dd74d7327085351d26769ea6fc as well as with gcc-3.2.

ChangeLog
NEWS
sysdeps/x86/fpu/bits/mathinline.h

index e3a1f0a974ddb1f07fe236c57211835c55ca1a58..4508b54e824be46a442655fdb0e2f5e2086f96f4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-08-13  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+       [BZ #17262]
+       * sysdeps/x86/fpu/bits/mathinline.h: Check both __SSE2_MATH__
+       and __x86_64__ when disabling x87 inline functions.
+
 2014-08-12  H.J. Lu  <hongjiu.lu@intel.com>
 
        [BZ #17259]
diff --git a/NEWS b/NEWS
index 03132e2896aa20b764851606b27090bdd2e96968..ca01275aff552a9de4e8db1c0edd39cb474fb13f 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -23,7 +23,7 @@ Version 2.20
   16977, 16978, 16984, 16990, 16996, 17009, 17022, 17031, 17042, 17048,
   17050, 17058, 17061, 17062, 17069, 17075, 17078, 17079, 17084, 17086,
   17088, 17092, 17097, 17125, 17135, 17137, 17150, 17153, 17213, 17259,
-  17261.
+  17261, 17262.
 
 * Reverted change of ABI data structures for s390 and s390x:
   On s390 and s390x the size of struct ucontext and jmp_buf was increased in
index 9c32e9503b81bc409db40b2dcc1161f2f31c3284..ee88b66050ab2c212bf61a42bbb7001b63328dd4 100644 (file)
@@ -384,7 +384,10 @@ __END_NAMESPACE_C99
 # endif
 #endif
 
-#ifndef __SSE2_MATH__
+/* Disable x87 inlines when -fpmath=sse is passed and also when we're building
+   on x86_64.  Older gcc (gcc-3.2 for example) does not set __SSE2_MATH__
+   for x86_64.  */
+#if !defined __SSE2_MATH__ && !defined __x86_64__
 # if ((!defined __NO_MATH_INLINES || defined __LIBC_INTERNAL_MATH_INLINES) \
      && defined __OPTIMIZE__)
 
@@ -970,4 +973,4 @@ __inline_mathcode2 (__ieee754_atan2, __y, __x,
                    return __value;)
 # endif
 
-#endif /* !__SSE2_MATH__ */
+#endif /* !__SSE2_MATH__ && !__x86_64__ */