Commit 292099cc by Jim Wilson

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

but second operand is not.

From-SVN: r12589
parent cd25d00b
......@@ -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]))
{
if (CONSTANT_P (operands[2]))
return \"lda %1+%2,%0\";
else
return \"lda %1(%2),%0\";
}
return \"lda %2(%1),%0\";
}")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment