Commit ecaf6f07 by Richard Earnshaw Committed by Richard Earnshaw

arm.md (abssi2): Allow Thumb as well.

	* arm.md (abssi2): Allow Thumb as well.	 Use an SImode scratch for
	Thumb.
	(arm_neg_abssi2): Renamed from neg_abssi2.
	(thumb_abssi2, thumb_neg_abssi2): New patterns with splitters.

From-SVN: r118884
parent 56829cae
2006-11-16 Richard Earnshaw <rearnsha@arm.com>
* arm.md (abssi2): Allow Thumb as well. Use an SImode scratch for
Thumb.
(arm_neg_abssi2): Renamed from neg_abssi2.
(thumb_abssi2, thumb_neg_abssi2): New patterns with splitters.
2006-11-16 Uros Bizjak <ubizjak@gmail.com> 2006-11-16 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.c (ix86_function_sseregparm): Fix comment: * config/i386/i386.c (ix86_function_sseregparm): Fix comment:
......
...@@ -3066,9 +3066,14 @@ ...@@ -3066,9 +3066,14 @@
[(parallel [(parallel
[(set (match_operand:SI 0 "s_register_operand" "") [(set (match_operand:SI 0 "s_register_operand" "")
(abs:SI (match_operand:SI 1 "s_register_operand" ""))) (abs:SI (match_operand:SI 1 "s_register_operand" "")))
(clobber (reg:CC CC_REGNUM))])] (clobber (match_dup 2))])]
"TARGET_ARM" "TARGET_EITHER"
"") "
if (TARGET_THUMB)
operands[2] = gen_rtx_SCRATCH (SImode);
else
operands[2] = gen_rtx_REG (CCmode, CC_REGNUM);
")
(define_insn "*arm_abssi2" (define_insn "*arm_abssi2"
[(set (match_operand:SI 0 "s_register_operand" "=r,&r") [(set (match_operand:SI 0 "s_register_operand" "=r,&r")
...@@ -3084,7 +3089,21 @@ ...@@ -3084,7 +3089,21 @@
(set_attr "length" "8")] (set_attr "length" "8")]
) )
(define_insn "*neg_abssi2" (define_insn_and_split "*thumb_abssi2"
[(set (match_operand:SI 0 "s_register_operand" "=l")
(abs:SI (match_operand:SI 1 "s_register_operand" "l")))
(clobber (match_scratch:SI 2 "=&l"))]
"TARGET_THUMB"
"#"
"TARGET_THUMB && reload_completed"
[(set (match_dup 2) (ashiftrt:SI (match_dup 1) (const_int 31)))
(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 2)))
(set (match_dup 0) (xor:SI (match_dup 0) (match_dup 2)))]
""
[(set_attr "length" "6")]
)
(define_insn "*arm_neg_abssi2"
[(set (match_operand:SI 0 "s_register_operand" "=r,&r") [(set (match_operand:SI 0 "s_register_operand" "=r,&r")
(neg:SI (abs:SI (match_operand:SI 1 "s_register_operand" "0,r")))) (neg:SI (abs:SI (match_operand:SI 1 "s_register_operand" "0,r"))))
(clobber (reg:CC CC_REGNUM))] (clobber (reg:CC CC_REGNUM))]
...@@ -3098,6 +3117,20 @@ ...@@ -3098,6 +3117,20 @@
(set_attr "length" "8")] (set_attr "length" "8")]
) )
(define_insn_and_split "*thumb_neg_abssi2"
[(set (match_operand:SI 0 "s_register_operand" "=l")
(neg:SI (abs:SI (match_operand:SI 1 "s_register_operand" "l"))))
(clobber (match_scratch:SI 2 "=&l"))]
"TARGET_THUMB"
"#"
"TARGET_THUMB && reload_completed"
[(set (match_dup 2) (ashiftrt:SI (match_dup 1) (const_int 31)))
(set (match_dup 0) (minus:SI (match_dup 2) (match_dup 1)))
(set (match_dup 0) (xor:SI (match_dup 0) (match_dup 2)))]
""
[(set_attr "length" "6")]
)
(define_expand "abssf2" (define_expand "abssf2"
[(set (match_operand:SF 0 "s_register_operand" "") [(set (match_operand:SF 0 "s_register_operand" "")
(abs:SF (match_operand:SF 1 "s_register_operand" "")))] (abs:SF (match_operand:SF 1 "s_register_operand" "")))]
......
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