diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/i386/xmmintrin.h | 20 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pause-2.c | 12 |
4 files changed, 32 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c7b2af3..4eb4364 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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): diff --git a/gcc/config/i386/xmmintrin.h b/gcc/config/i386/xmmintrin.h index a3824e7..ec57234 100644 --- a/gcc/config/i386/xmmintrin.h +++ b/gcc/config/i386/xmmintrin.h @@ -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 */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1d846dc..7990eb4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..d8b2519 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pause-2.c @@ -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 (); +} |