diff options
author | Jakub Jelinek <jakub@redhat.com> | 2005-07-28 16:38:13 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2005-07-28 16:38:13 +0200 |
commit | 9603f2d849b267a4414546c8732f9d023f3849ee (patch) | |
tree | 833315b998733752989fcd83cff0c747cb858a91 | |
parent | dc5fef6a477c6f22c4cc4d58dc0b186ff302735c (diff) | |
download | gcc-9603f2d849b267a4414546c8732f9d023f3849ee.zip gcc-9603f2d849b267a4414546c8732f9d023f3849ee.tar.gz gcc-9603f2d849b267a4414546c8732f9d023f3849ee.tar.bz2 |
re PR target/21149 (invalid code generation for _mm_movehl_ps SSE intrisinc)
PR target/21149
* gcc.target/i386/sse-3.c: New test.
From-SVN: r102482
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/sse-3.c | 53 |
2 files changed, 58 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 46434bf..89f6ea2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-07-28 Jakub Jelinek <jakub@redhat.com> + + PR target/21149 + * gcc.target/i386/sse-3.c: New test. + 2005-07-28 Richard Sandiford <richard@codesourcery.com> * gcc.target/mips/mips32-dsp.c: Use -march=mips32 instead of -mips32. diff --git a/gcc/testsuite/gcc.target/i386/sse-3.c b/gcc/testsuite/gcc.target/i386/sse-3.c new file mode 100644 index 0000000..b09adda --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse-3.c @@ -0,0 +1,53 @@ +/* PR target/21149 */ +/* { dg-do run } */ +/* { dg-options "-O2 -msse" } */ +#include <xmmintrin.h> +#include "../../gcc.dg/i386-cpuid.h" + +extern void abort (void); + +void +__attribute__((noinline)) +check (__m128 x, float a, float b, float c, float d) +{ + union { __m128 m; float f[4]; } u; + u.m = x; + if (u.f[0] != a || u.f[1] != b || u.f[2] != c || u.f[3] != d) + abort (); +} + +static inline +void +foo (__m128 *x) +{ + __m128 y = _mm_setzero_ps (); + __m128 v = _mm_movehl_ps (y, *x); + __m128 w = _mm_movehl_ps (*x, y); + check (*x, 9, 1, 2, -3); + check (v, 2, -3, 0, 0); + check (w, 0, 0, 2, -3); +} + +void +__attribute__((noinline)) +run_tests (void) +{ + __m128 y = _mm_set_ps (-3, 2, 1, 9); + foo (&y); +} + +int +main () +{ + unsigned long cpu_facilities; + + cpu_facilities = i386_cpuid (); + + if ((cpu_facilities & (bit_MMX | bit_SSE | bit_CMOV)) + != (bit_MMX | bit_SSE | bit_CMOV)) + /* If host has no vector support, pass. */ + return 0; + + run_tests (); + return 0; +} |