re PR target/80298 (<x86intrin.h> incompatible with -mno-sse)
authorUros Bizjak <ubizjak@gmail.com>
Wed, 5 Apr 2017 15:33:49 +0000 (17:33 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Wed, 5 Apr 2017 15:33:49 +0000 (17:33 +0200)
PR target/80298
* config/i386/mmintrin.h: Add -msse target option when __SSE__ is
not defined for x86_64 target.  Add -mmmx target option when __SSE2__
is not defined.
* config/i386/mm3dnow.h: Add -msse target when __SSE__ is not defined
for x86_64 target.  Handle -m3dnowa option.

From-SVN: r246708

gcc/ChangeLog
gcc/config/i386/mm3dnow.h
gcc/config/i386/mmintrin.h

index 951e0401ed1e9ff054b97497227f950c4decb8b9..0596b6d605386981e5057f5eb44c94f12ec30c26 100644 (file)
@@ -1,3 +1,12 @@
+2017-04-05  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/80298
+       * config/i386/mmintrin.h: Add -msse target option when __SSE__ is
+       not defined for x86_64 target.  Add -mmmx target option when __SSE2__
+       is not defined.
+       * config/i386/mm3dnow.h: Add -msse target when __SSE__ is not defined
+       for x86_64 target.  Handle -m3dnowa option.
+
 2017-04-05  Vladimir Makarov  <vmakarov@redhat.com>
 
        PR rtl-optimization/70703
index c8a91a160730ddc4d19b042b99d8d3a6ac85b43f..2d5c538493c227ffe009f1f64ef40d32b87586bc 100644 (file)
 #include <mmintrin.h>
 #include <prfchwintrin.h>
 
-#ifndef __3dNOW__
+#if defined __x86_64__ && !defined __SSE__ || !defined __3dNOW__
 #pragma GCC push_options
+#ifdef __x86_64__
+#pragma GCC target("sse,3dnow")
+#else
 #pragma GCC target("3dnow")
+#endif
 #define __DISABLE_3dNOW__
 #endif /* __3dNOW__ */
 
@@ -176,7 +180,20 @@ _m_to_float (__m64 __A)
   return __tmp.a[0];
 }
 
-#ifdef __3dNOW_A__
+#ifdef __DISABLE_3dNOW__
+#undef __DISABLE_3dNOW__
+#pragma GCC pop_options
+#endif /* __DISABLE_3dNOW__ */
+
+#if defined __x86_64__ && !defined __SSE__ || !defined __3dNOW_A__
+#pragma GCC push_options
+#ifdef __x86_64__
+#pragma GCC target("sse,3dnowa")
+#else
+#pragma GCC target("3dnowa")
+#endif
+#define __DISABLE_3dNOW_A__
+#endif /* __3dNOW_A__ */
 
 extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 _m_pf2iw (__m64 __A)
@@ -208,11 +225,9 @@ _m_pswapd (__m64 __A)
   return (__m64)__builtin_ia32_pswapdsf ((__v2sf)__A);
 }
 
-#endif /* __3dNOW_A__ */
-
-#ifdef __DISABLE_3dNOW__
-#undef __DISABLE_3dNOW__
+#ifdef __DISABLE_3dNOW_A__
+#undef __DISABLE_3dNOW_A__
 #pragma GCC pop_options
-#endif /* __DISABLE_3dNOW__ */
+#endif /* __DISABLE_3dNOW_A__ */
 
 #endif /* _MM3DNOW_H_INCLUDED */
index 957d766e95cf6176a94bae73f27c1946a15f72dd..2cb73e34e9153fe69976a41e43a05a5c447d6563 100644 (file)
 #ifndef _MMINTRIN_H_INCLUDED
 #define _MMINTRIN_H_INCLUDED
 
-#ifndef __MMX__
+#if defined __x86_64__ && !defined __SSE__ || !defined __MMX__
 #pragma GCC push_options
+#ifdef __x86_64__
+#pragma GCC target("sse,mmx")
+#else
 #pragma GCC target("mmx")
+#endif
 #define __DISABLE_MMX__
 #endif /* __MMX__ */
 
@@ -311,7 +315,7 @@ _m_paddd (__m64 __m1, __m64 __m2)
 /* Add the 64-bit values in M1 to the 64-bit values in M2.  */
 #ifndef __SSE2__
 #pragma GCC push_options
-#pragma GCC target("sse2")
+#pragma GCC target("sse2,mmx")
 #define __DISABLE_SSE2__
 #endif /* __SSE2__ */
 
@@ -423,7 +427,7 @@ _m_psubd (__m64 __m1, __m64 __m2)
 /* Add the 64-bit values in M1 to the 64-bit values in M2.  */
 #ifndef __SSE2__
 #pragma GCC push_options
-#pragma GCC target("sse2")
+#pragma GCC target("sse2,mmx")
 #define __DISABLE_SSE2__
 #endif /* __SSE2__ */