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.
(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")
--- /dev/null
+/* 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;
+}