@@ -1102,7 +1102,26 @@
(set_attr "simd" "*,*,*,yes")]
)
-(define_insn "*add<mode>3_compare0"
+(define_expand "addti3"
+ [(set (match_operand:TI 0 "register_operand" "")
+ (plus:TI (match_operand:TI 1 "register_operand" "")
+ (match_operand:TI 2 "register_operand" "")))]
+ ""
+{
+ rtx low = gen_reg_rtx (DImode);
+ emit_insn (gen_adddi3_compare0 (low, gen_lowpart (DImode, operands[1]),
+ gen_lowpart (DImode, operands[2])));
+
+ rtx high = gen_reg_rtx (DImode);
+ emit_insn (gen_adddi3_carryin (high, gen_highpart (DImode, operands[1]),
+ gen_highpart (DImode, operands[2])));
+
+ emit_move_insn (gen_lowpart (DImode, operands[0]), low);
+ emit_move_insn (gen_highpart (DImode, operands[0]), high);
+ DONE;
+})
+
+(define_insn "add<mode>3_compare0"
[(set (reg:CC_NZ CC_REGNUM)
(compare:CC_NZ
(plus:GPI (match_operand:GPI 1 "register_operand" "%r,r,r")
@@ -1386,7 +1405,7 @@
[(set_attr "type" "alu_ext")]
)
-(define_insn "*add<mode>3_carryin"
+(define_insn "add<mode>3_carryin"
[(set
(match_operand:GPI 0 "register_operand" "=r")
(plus:GPI (geu:GPI (reg:CC CC_REGNUM) (const_int 0))
@@ -1554,8 +1573,26 @@
(set_attr "simd" "*,yes")]
)
+(define_expand "subti3"
+ [(set (match_operand:TI 0 "register_operand" "")
+ (minus:TI (match_operand:TI 1 "register_operand" "")
+ (match_operand:TI 2 "register_operand" "")))]
+ ""
+{
+ rtx low = gen_reg_rtx (DImode);
+ emit_insn (gen_subdi3_compare0 (low, gen_lowpart (DImode, operands[1]),
+ gen_lowpart (DImode, operands[2])));
+
+ rtx high = gen_reg_rtx (DImode);
+ emit_insn (gen_subdi3_carryin (high, gen_highpart (DImode, operands[1]),
+ gen_highpart (DImode, operands[2])));
+
+ emit_move_insn (gen_lowpart (DImode, operands[0]), low);
+ emit_move_insn (gen_highpart (DImode, operands[0]), high);
+ DONE;
+})
-(define_insn "*sub<mode>3_compare0"
+(define_insn "sub<mode>3_compare0"
[(set (reg:CC_NZ CC_REGNUM)
(compare:CC_NZ (minus:GPI (match_operand:GPI 1 "register_operand" "r")
(match_operand:GPI 2 "register_operand" "r"))
@@ -1702,7 +1739,7 @@
[(set_attr "type" "alu_ext")]
)
-(define_insn "*sub<mode>3_carryin"
+(define_insn "sub<mode>3_carryin"
[(set
(match_operand:GPI 0 "register_operand" "=r")
(minus:GPI (minus:GPI