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
This commit is contained in:
parent
c06d25bb33
commit
2c73b7640d
4 changed files with 34 additions and 1 deletions
|
@ -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.
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
20
gcc/testsuite/gcc.target/i386/pr70049.c
Normal file
20
gcc/testsuite/gcc.target/i386/pr70049.c
Normal file
|
@ -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];
|
||||
}
|
Loading…
Add table
Reference in a new issue