(subsi3): Rename to subsi3_internal.
(subsi3): Rename to subsi3_internal. Add new define_expand to handle subtracting a register from a constant. From-SVN: r10693
This commit is contained in:
parent
06ada9d1c1
commit
caca3c8a03
|
@ -321,13 +321,33 @@
|
||||||
"clrt\;subc %R2,%R0\;subc %S2,%S0"
|
"clrt\;subc %R2,%R0\;subc %S2,%S0"
|
||||||
[(set_attr "length" "6")])
|
[(set_attr "length" "6")])
|
||||||
|
|
||||||
(define_insn "subsi3"
|
(define_insn "*subsi3_internal"
|
||||||
[(set (match_operand:SI 0 "arith_reg_operand" "=r")
|
[(set (match_operand:SI 0 "arith_reg_operand" "=r")
|
||||||
(minus:SI (match_operand:SI 1 "arith_reg_operand" "0")
|
(minus:SI (match_operand:SI 1 "arith_reg_operand" "0")
|
||||||
(match_operand:SI 2 "arith_reg_operand" "r")))]
|
(match_operand:SI 2 "arith_reg_operand" "r")))]
|
||||||
""
|
""
|
||||||
"sub %2,%0"
|
"sub %2,%0"
|
||||||
[(set_attr "type" "arith")])
|
[(set_attr "type" "arith")])
|
||||||
|
|
||||||
|
;; Convert `constant - reg' to `neg rX; add rX, #const' since this
|
||||||
|
;; will sometimes save one instruction. Otherwise we might get
|
||||||
|
;; `mov #const, rY; sub rY,rX; mov rX, rY' if the source and dest regs
|
||||||
|
;; are the same.
|
||||||
|
|
||||||
|
(define_expand "subsi3"
|
||||||
|
[(set (match_operand:SI 0 "arith_reg_operand" "")
|
||||||
|
(minus:SI (match_operand:SI 1 "arith_operand" "")
|
||||||
|
(match_operand:SI 2 "arith_reg_operand" "")))]
|
||||||
|
""
|
||||||
|
"
|
||||||
|
{
|
||||||
|
if (GET_CODE (operands[1]) == CONST_INT)
|
||||||
|
{
|
||||||
|
emit_insn (gen_negsi2 (operands[0], operands[2]));
|
||||||
|
emit_insn (gen_addsi3 (operands[0], operands[0], operands[1]));
|
||||||
|
DONE;
|
||||||
|
}
|
||||||
|
}")
|
||||||
|
|
||||||
;; -------------------------------------------------------------------------
|
;; -------------------------------------------------------------------------
|
||||||
;; Division instructions
|
;; Division instructions
|
||||||
|
|
Loading…
Reference in New Issue