augustss@cs.chalmers.se (Lennart Augustsson) (11/27/88)
The following is a context diff for i386.md and it will give sligthly better code than the original md file. I have used it with gcc 1.31 and successfully bootstrapped the compiler. -- Lennart Augustsson *** i386.md.old Thu Nov 24 17:54:52 1988 --- i386.md Thu Oct 27 00:53:29 1988 *************** *** 66,71 "" "* { operands[1] = const0_rtx; return AS2 (cmp%L,%1,%0); }") --- 66,73 ----- "" "* { + if (REG_P(operands[0])) + return AS2 (test%L,%0,%0); operands[1] = const0_rtx; return AS2 (cmp%L,%1,%0); }") *************** *** 76,81 "" "* { operands[1] = const0_rtx; return AS2 (cmp%W,%1,%0); }") --- 78,85 ----- "" "* { + if (REG_P(operands[0])) + return AS2 (test%W,%0,%0); operands[1] = const0_rtx; return AS2 (cmp%W,%1,%0); }") *************** *** 86,91 "" "* { operands[1] = const0_rtx; return AS2 (cmp%B,%1,%0); }") --- 90,97 ----- "" "* { + if (REG_P(operands[0])) + return AS2 (test%B,%0,%0); operands[1] = const0_rtx; return AS2 (cmp%B,%1,%0); }") *************** *** 441,462 ;; because it is often shorter to use these when both apply. ; ??? Why is this pattern desirable? ! (define_insn "" ! [(set (match_operand:SI 0 "push_operand" "=<") ! (plus:SI (match_operand:SI 1 "general_operand" "%r") ! (match_operand:SI 2 "general_operand" "ri")))] ! "" ! "* ! { ! rtx xops[4]; ! xops[0] = operands[0]; ! xops[1] = operands[1]; ! xops[2] = operands[2]; ! xops[3] = gen_rtx (MEM, SImode, stack_pointer_rtx); ! output_asm_insn (\"push%z1 %1\", xops); ! output_asm_insn (AS2 (add%z3,%2,%3), xops); ! RET; ! }") (define_insn "" [(set (match_operand:SI 0 "general_operand" "=g") --- 447,469 ----- ;; because it is often shorter to use these when both apply. ; ??? Why is this pattern desirable? ! ; This pattern only slows things down! ! ;(define_insn "" ! ; [(set (match_operand:SI 0 "push_operand" "=<") ! ; (plus:SI (match_operand:SI 1 "general_operand" "%r") ! ; (match_operand:SI 2 "general_operand" "ri")))] ! ; "" ! ; "* ! ;{ ! ; rtx xops[4]; ! ; xops[0] = operands[0]; ! ; xops[1] = operands[1]; ! ; xops[2] = operands[2]; ! ; xops[3] = gen_rtx (MEM, SImode, stack_pointer_rtx); ! ; output_asm_insn (\"push%z1 %1\", xops); ! ; output_asm_insn (AS2 (add%z3,%2,%3), xops); ! ; RET; ! ;}") (define_insn "" [(set (match_operand:SI 0 "general_operand" "=g")