i386: Fix the order of operands in andn<MMXMODEI:mode>3 [PR117192]
Fix the order of operands in andn<MMXMODEI:mode>3 expander to comply with the specification, where bitwise-complement applies to operand 2. PR target/117192 gcc/ChangeLog: * config/i386/mmx.md (andn<MMXMODEI:mode>3): Swap operand indexes 1 and 2 to comply with andn specification. gcc/testsuite/ChangeLog: * gcc.target/i386/pr117192.c: New test.
This commit is contained in:
parent
d0a9ae1321
commit
3a12ac4032
2 changed files with 19 additions and 3 deletions
|
@ -4470,9 +4470,9 @@
|
|||
(define_expand "andn<mode>3"
|
||||
[(set (match_operand:MMXMODEI 0 "register_operand")
|
||||
(and:MMXMODEI
|
||||
(not:MMXMODEI (match_operand:MMXMODEI 1 "register_operand"))
|
||||
(match_operand:MMXMODEI 2 "register_operand")))]
|
||||
"TARGET_SSE2")
|
||||
(not:MMXMODEI (match_operand:MMXMODEI 2 "register_operand"))
|
||||
(match_operand:MMXMODEI 1 "register_operand")))]
|
||||
"TARGET_MMX_WITH_SSE")
|
||||
|
||||
(define_insn "mmx_andnot<mode>3"
|
||||
[(set (match_operand:MMXMODEI 0 "register_operand" "=y,x,x,v")
|
||||
|
|
16
gcc/testsuite/gcc.target/i386/pr117192.c
Normal file
16
gcc/testsuite/gcc.target/i386/pr117192.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* PR target/117192 */
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-O3 -fno-unswitch-loops" } */
|
||||
|
||||
int a, b, c, d;
|
||||
int main() {
|
||||
int e[6];
|
||||
for (d = 0; d < 6; d++)
|
||||
if (!c)
|
||||
e[d] = 0;
|
||||
for (; b < 6; b++)
|
||||
a = e[b];
|
||||
if (a != 0)
|
||||
__builtin_abort();
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue