aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-03-09 15:10:58 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2016-03-09 15:10:58 +0100
commit2c73b7640dba91c6041404ab3e3b4f629ad73ad1 (patch)
treeaf1ff9844b5e0db2c7d1aee3c639b2dc9d09787b
parentc06d25bb3377e99191c0517b86ba210673bc9cf1 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/i386/sse.md4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70049.c20
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];
+}