aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2017-04-05 17:33:49 +0200
committerUros Bizjak <uros@gcc.gnu.org>2017-04-05 17:33:49 +0200
commit891b30ac8d1ab36c3a756fc885d22d40f080f386 (patch)
treedc922c83ab1e086f67eae908c2175a5ad3882c57 /gcc
parente2323a2b77c91d1ba8194b01e6deaa2e00f15990 (diff)
downloadgcc-891b30ac8d1ab36c3a756fc885d22d40f080f386.zip
gcc-891b30ac8d1ab36c3a756fc885d22d40f080f386.tar.gz
gcc-891b30ac8d1ab36c3a756fc885d22d40f080f386.tar.bz2
re PR target/80298 (<x86intrin.h> incompatible with -mno-sse)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/i386/mm3dnow.h29
-rw-r--r--gcc/config/i386/mmintrin.h10
3 files changed, 38 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 951e040..0596b6d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/i386/mm3dnow.h b/gcc/config/i386/mm3dnow.h
index c8a91a1..2d5c538 100644
--- a/gcc/config/i386/mm3dnow.h
+++ b/gcc/config/i386/mm3dnow.h
@@ -30,9 +30,13 @@
#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 */
diff --git a/gcc/config/i386/mmintrin.h b/gcc/config/i386/mmintrin.h
index 957d766..2cb73e3 100644
--- a/gcc/config/i386/mmintrin.h
+++ b/gcc/config/i386/mmintrin.h
@@ -27,9 +27,13 @@
#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__ */