Commit dcd8b2ee by Julian Brown Committed by Julian Brown

thumb2.md (*thumb2_addsi3_compare0): New.

	gcc/
	* config/arm/thumb2.md (*thumb2_addsi3_compare0): New.
	(*thumb2_addsi3_compare0_scratch): New.
	* config/arm/constraints.md (Pv): New.
	* config/arm/arm.md (*addsi3_compare0): Remove FIXME comment. Use
	for ARM mode only.
	(*addsi3_compare0_scratch): Likewise.

From-SVN: r159983
parent df24c2b8
2010-05-28 Julian Brown <julian@codesourcery.com>
* config/arm/thumb2.md (*thumb2_addsi3_compare0): New.
(*thumb2_addsi3_compare0_scratch): New.
* config/arm/constraints.md (Pv): New.
* config/arm/arm.md (*addsi3_compare0): Remove FIXME comment. Use
for ARM mode only.
(*addsi3_compare0_scratch): Likewise.
2010-05-28 Jan Hubicka <jh@suse.cz> 2010-05-28 Jan Hubicka <jh@suse.cz>
* ipa-reference.c (add_static_var): Remove redundant all_module_statics check. * ipa-reference.c (add_static_var): Remove redundant all_module_statics check.
......
...@@ -693,7 +693,6 @@ ...@@ -693,7 +693,6 @@
"" ""
) )
;; ??? Make Thumb-2 variants which prefer low regs
(define_insn "*addsi3_compare0" (define_insn "*addsi3_compare0"
[(set (reg:CC_NOOV CC_REGNUM) [(set (reg:CC_NOOV CC_REGNUM)
(compare:CC_NOOV (compare:CC_NOOV
...@@ -702,7 +701,7 @@ ...@@ -702,7 +701,7 @@
(const_int 0))) (const_int 0)))
(set (match_operand:SI 0 "s_register_operand" "=r,r") (set (match_operand:SI 0 "s_register_operand" "=r,r")
(plus:SI (match_dup 1) (match_dup 2)))] (plus:SI (match_dup 1) (match_dup 2)))]
"TARGET_32BIT" "TARGET_ARM"
"@ "@
add%.\\t%0, %1, %2 add%.\\t%0, %1, %2
sub%.\\t%0, %1, #%n2" sub%.\\t%0, %1, #%n2"
...@@ -715,7 +714,7 @@ ...@@ -715,7 +714,7 @@
(plus:SI (match_operand:SI 0 "s_register_operand" "r, r") (plus:SI (match_operand:SI 0 "s_register_operand" "r, r")
(match_operand:SI 1 "arm_add_operand" "rI,L")) (match_operand:SI 1 "arm_add_operand" "rI,L"))
(const_int 0)))] (const_int 0)))]
"TARGET_32BIT" "TARGET_ARM"
"@ "@
cmn%?\\t%0, %1 cmn%?\\t%0, %1
cmp%?\\t%0, #%n1" cmp%?\\t%0, #%n1"
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
;; The following multi-letter normal constraints have been used: ;; The following multi-letter normal constraints have been used:
;; in ARM/Thumb-2 state: Da, Db, Dc, Dn, Dl, DL, Dv, Dy ;; in ARM/Thumb-2 state: Da, Db, Dc, Dn, Dl, DL, Dv, Dy
;; in Thumb-1 state: Pa, Pb ;; in Thumb-1 state: Pa, Pb
;; in Thumb-2 state: Ps, Pt, Pu ;; in Thumb-2 state: Ps, Pt, Pu, Pv
;; The following memory constraints have been used: ;; The following memory constraints have been used:
;; in ARM/Thumb-2 state: Q, Ut, Uv, Uy, Un, Um, Us ;; in ARM/Thumb-2 state: Q, Ut, Uv, Uy, Un, Um, Us
...@@ -163,6 +163,11 @@ ...@@ -163,6 +163,11 @@
(and (match_code "const_int") (and (match_code "const_int")
(match_test "TARGET_THUMB2 && ival >= 1 && ival <= 8"))) (match_test "TARGET_THUMB2 && ival >= 1 && ival <= 8")))
(define_constraint "Pv"
"@internal In Thumb-2 state a constant in the range -255 to 0"
(and (match_code "const_int")
(match_test "TARGET_THUMB2 && ival >= -255 && ival <= 0")))
(define_constraint "G" (define_constraint "G"
"In ARM/Thumb-2 state a valid FPA immediate constant." "In ARM/Thumb-2 state a valid FPA immediate constant."
(and (match_code "const_double") (and (match_code "const_double")
......
...@@ -1254,6 +1254,56 @@ ...@@ -1254,6 +1254,56 @@
(set_attr "length" "2")] (set_attr "length" "2")]
) )
(define_insn "*thumb2_addsi3_compare0"
[(set (reg:CC_NOOV CC_REGNUM)
(compare:CC_NOOV
(plus:SI (match_operand:SI 1 "s_register_operand" "l, 0, r")
(match_operand:SI 2 "arm_add_operand" "lPt,Ps,rIL"))
(const_int 0)))
(set (match_operand:SI 0 "s_register_operand" "=l,l,r")
(plus:SI (match_dup 1) (match_dup 2)))]
"TARGET_THUMB2"
"*
HOST_WIDE_INT val;
if (GET_CODE (operands[2]) == CONST_INT)
val = INTVAL (operands[2]);
else
val = 0;
if (val < 0 && const_ok_for_arm (ARM_SIGN_EXTEND (-val)))
return \"subs\\t%0, %1, #%n2\";
else
return \"adds\\t%0, %1, %2\";
"
[(set_attr "conds" "set")
(set_attr "length" "2,2,4")]
)
(define_insn "*thumb2_addsi3_compare0_scratch"
[(set (reg:CC_NOOV CC_REGNUM)
(compare:CC_NOOV
(plus:SI (match_operand:SI 0 "s_register_operand" "l, r")
(match_operand:SI 1 "arm_add_operand" "lPv,rIL"))
(const_int 0)))]
"TARGET_THUMB2"
"*
HOST_WIDE_INT val;
if (GET_CODE (operands[1]) == CONST_INT)
val = INTVAL (operands[1]);
else
val = 0;
if (val < 0 && const_ok_for_arm (ARM_SIGN_EXTEND (-val)))
return \"cmp\\t%0, #%n1\";
else
return \"cmn\\t%0, %1\";
"
[(set_attr "conds" "set")
(set_attr "length" "2,4")]
)
;; 16-bit encodings of "muls" and "mul<c>". We only use these when ;; 16-bit encodings of "muls" and "mul<c>". We only use these when
;; optimizing for size since "muls" is slow on all known ;; optimizing for size since "muls" is slow on all known
;; implementations and since "mul<c>" will be generated by ;; implementations and since "mul<c>" will be generated by
......
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