(subsi3+1): Handle case where first operand is constant
but second operand is not. From-SVN: r12589
This commit is contained in:
parent
cd25d00b25
commit
292099cc67
@ -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\";
|
||||
}")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user