xmmintrin.h (_mm_pause): Move out of scope of pragma target("sse").
authorIan Lance Taylor <iant@google.com>
Fri, 30 May 2014 13:11:05 +0000 (13:11 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Fri, 30 May 2014 13:11:05 +0000 (13:11 +0000)
gcc/:
* config/i386/xmmintrin.h (_mm_pause): Move out of scope of pragma
target("sse").
testsuite/:
* gcc.target/i386/pause-2.c: New test.

From-SVN: r211079

gcc/ChangeLog
gcc/config/i386/xmmintrin.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pause-2.c [new file with mode: 0644]

index c7b2af3afc76e3a19e196754a6f8ac4423efce12..4eb43645229eec4951a5a14d6094ad1c4079a03b 100644 (file)
@@ -1,3 +1,8 @@
+2014-05-30  Ian Lance Taylor  <iant@google.com>
+
+       * config/i386/xmmintrin.h (_mm_pause): Move out of scope of pragma
+       target("sse").
+
 2014-05-30  Tom de Vries  <tom@codesourcery.com>
 
        * config/i386/i386.c (TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS):
index a3824e73fc22c9337f24aa675ee577505d384ac7..ec572348c384be59d74ea05eae3ec8d2c8624abf 100644 (file)
@@ -1231,15 +1231,6 @@ _mm_sfence (void)
   __builtin_ia32_sfence ();
 }
 
-/* The execution of the next instruction is delayed by an implementation
-   specific amount of time.  The instruction does not modify the
-   architectural state.  */
-extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm_pause (void)
-{
-  __builtin_ia32_pause ();
-}
-
 /* Transpose the 4x4 matrix composed of row[0-3].  */
 #define _MM_TRANSPOSE4_PS(row0, row1, row2, row3)                      \
 do {                                                                   \
@@ -1262,4 +1253,15 @@ do {                                                                     \
 #pragma GCC pop_options
 #endif /* __DISABLE_SSE__ */
 
+/* The execution of the next instruction is delayed by an implementation
+   specific amount of time.  The instruction does not modify the
+   architectural state.  This is after the pop_options pragma because
+   it does not require SSE support in the processor--the encoding is a
+   nop on processors that do not support it.  */
+extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm_pause (void)
+{
+  __builtin_ia32_pause ();
+}
+
 #endif /* _XMMINTRIN_H_INCLUDED */
index 1d846dca8e942cd63ca5e5e98160d1152217c802..7990eb4a1ea83913d5cb8cb97c04bb84d39b7341 100644 (file)
@@ -1,3 +1,7 @@
+2014-05-30  Ian Lance Taylor  <iant@google.com>
+
+       * gcc.target/i386/pause-2.c: New test.
+
 2014-05-30  Tom de Vries  <tom@codesourcery.com>
 
        * gcc.target/i386/fuse-caller-save.c: New test.
diff --git a/gcc/testsuite/gcc.target/i386/pause-2.c b/gcc/testsuite/gcc.target/i386/pause-2.c
new file mode 100644 (file)
index 0000000..d8b2519
--- /dev/null
@@ -0,0 +1,12 @@
+/* Test that pause instruction works even when SSE is not enabled.  */
+/* { dg-do compile } */
+/* { dg-options "-O2 -dp" } */
+/* { dg-final { scan-assembler-times "\\*pause" 1 } } */
+
+#include <xmmintrin.h>
+
+void
+foo (void)
+{
+  _mm_pause ();
+}