(subsi3+1): Handle case where first operand is constant

but second operand is not.

From-SVN: r12589
This commit is contained in:
Jim Wilson 1996-08-03 18:20:26 -07:00
parent cd25d00b25
commit 292099cc67

View File

@ -1509,6 +1509,9 @@
;; add instruction.
;; Some assemblers apparently won't accept two addresses added together.
;; ??? The condition should be improved to reject the case of two
;; symbolic constants.
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=d,d,d")
(plus:SI (match_operand:SI 1 "arith32_operand" "%dn,i,dn")
@ -1531,8 +1534,16 @@
else if (INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) < 32)
return \"addo %1,%2,%0\";
}
/* Non-canonical results (op1 == const, op2 != const) have been seen
in reload output when both operands were symbols before reload, so
we deal with it here. This may be a fault of the constraints above. */
if (CONSTANT_P (operands[1]))
return \"lda %1+%2,%0\";
{
if (CONSTANT_P (operands[2]))
return \"lda %1+%2,%0\";
else
return \"lda %1(%2),%0\";
}
return \"lda %2(%1),%0\";
}")