diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-03-09 15:10:58 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-03-09 15:10:58 +0100 |
commit | 2c73b7640dba91c6041404ab3e3b4f629ad73ad1 (patch) | |
tree | af1ff9844b5e0db2c7d1aee3c639b2dc9d09787b | |
parent | c06d25bb3377e99191c0517b86ba210673bc9cf1 (diff) | |
download | gcc-2c73b7640dba91c6041404ab3e3b4f629ad73ad1.zip gcc-2c73b7640dba91c6041404ab3e3b4f629ad73ad1.tar.gz gcc-2c73b7640dba91c6041404ab3e3b4f629ad73ad1.tar.bz2 |
re PR target/70049 (Error: operand size mismatch for `vpextrw' (wrong assembly generated) with -masm=intel)
PR target/70049
* config/i386/sse.md (*vec_extract<mode>): Use %0 instead of %k0
if the operand is "m".
* gcc.target/i386/pr70049.c: New test.
From-SVN: r234085
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/i386/sse.md | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr70049.c | 20 |
4 files changed, 34 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2b0801a..c99bf64 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-03-09 Jakub Jelinek <jakub@redhat.com> + + PR target/70049 + * config/i386/sse.md (*vec_extract<mode>): Use %0 instead of %k0 + if the operand is "m". + 2016-03-09 Nathan Sidwell <nathan@acm.org> * config/nvptx/nvptx.c (nvptx_option_override): Don't kill debug level. diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 3dd787c..00e385a 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -13307,7 +13307,9 @@ (parallel [(match_operand:SI 2 "const_0_to_<ssescalarnummask>_operand")])))] "TARGET_SSE2" - "%vpextr<ssemodesuffix>\t{%2, %1, %k0|%k0, %1, %2}" + "@ + %vpextr<ssemodesuffix>\t{%2, %1, %k0|%k0, %1, %2} + %vpextr<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "*,sse4") (set_attr "type" "sselog1") (set_attr "prefix_data16" "1") diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9ea56a7..131ed75 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-03-09 Jakub Jelinek <jakub@redhat.com> + + PR target/70049 + * gcc.target/i386/pr70049.c: New test. + 2016-03-09 Richard Biener <rguenther@suse.de> PR c/70143 diff --git a/gcc/testsuite/gcc.target/i386/pr70049.c b/gcc/testsuite/gcc.target/i386/pr70049.c new file mode 100644 index 0000000..a659bb3 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr70049.c @@ -0,0 +1,20 @@ +/* PR target/70049 */ +/* { dg-do assemble { target avx } } */ +/* { dg-require-effective-target masm_intel } */ +/* { dg-options "-Og -mavx -masm=intel" } */ + +typedef unsigned short A; +typedef unsigned short B __attribute__ ((vector_size (32))); +typedef unsigned int C; +typedef unsigned int D __attribute__ ((vector_size (32))); +typedef unsigned long long E; +typedef unsigned long long F __attribute__ ((vector_size (32))); + +C +foo(A a, C b, E c, F d, B e, D f, F g) +{ + b <<= 28; + e[1] += b; + d %= (F) { 0, f[4] } | 1; + return a + b + c + d[3] + e[1] + g[3]; +} |