Commit b915718f by Richard Earnshaw Committed by Richard Earnshaw

arm.md (arm_addsi3): New variant for Thumb2 16-bit ADD instruction.

	* arm.md (arm_addsi3): New variant for Thumb2 16-bit ADD instruction.
	* arm.c (thumb2_reorg): Don't convert an ADD instruction that's
	already 16 bits.

From-SVN: r190472
parent 5deac340
2012-08-17 Richard Earnshaw <rearnsha@arm.com>
* arm.md (arm_addsi3): New variant for Thumb2 16-bit ADD instruction.
* arm.c (thumb2_reorg): Don't convert an ADD instruction that's
already 16 bits.
2012-08-17 Richard Guenther <rguenther@suse.de> 2012-08-17 Richard Guenther <rguenther@suse.de>
* hash-table.h (class hash_table): Use a descriptor template * hash-table.h (class hash_table): Use a descriptor template
......
...@@ -13309,6 +13309,13 @@ thumb2_reorg (void) ...@@ -13309,6 +13309,13 @@ thumb2_reorg (void)
switch (GET_CODE (src)) switch (GET_CODE (src))
{ {
case PLUS: case PLUS:
/* Adding two registers and storing the result
in the first source is already a 16-bit
operation. */
if (rtx_equal_p (dst, op0)
&& register_operand (op1, SImode))
break;
if (low_register_operand (op0, SImode)) if (low_register_operand (op0, SImode))
{ {
/* ADDS <Rd>,<Rn>,<Rm> */ /* ADDS <Rd>,<Rn>,<Rm> */
......
...@@ -746,11 +746,12 @@ ...@@ -746,11 +746,12 @@
;; (plus (reg rN) (reg sp)) into (reg rN). In this case reload will ;; (plus (reg rN) (reg sp)) into (reg rN). In this case reload will
;; put the duplicated register first, and not try the commutative version. ;; put the duplicated register first, and not try the commutative version.
(define_insn_and_split "*arm_addsi3" (define_insn_and_split "*arm_addsi3"
[(set (match_operand:SI 0 "s_register_operand" "=r, k,r,r, k, r, k,k,r, k, r") [(set (match_operand:SI 0 "s_register_operand" "=rk, r,k, r,r, k, r, k,k,r, k, r")
(plus:SI (match_operand:SI 1 "s_register_operand" "%rk,k,r,rk,k, rk,k,r,rk,k, rk") (plus:SI (match_operand:SI 1 "s_register_operand" "%0, rk,k, r,rk,k, rk,k,r,rk,k, rk")
(match_operand:SI 2 "reg_or_int_operand" "rI,rI,k,Pj,Pj,L, L,L,PJ,PJ,?n")))] (match_operand:SI 2 "reg_or_int_operand" "rk, rI,rI,k,Pj,Pj,L, L,L,PJ,PJ,?n")))]
"TARGET_32BIT" "TARGET_32BIT"
"@ "@
add%?\\t%0, %0, %2
add%?\\t%0, %1, %2 add%?\\t%0, %1, %2
add%?\\t%0, %1, %2 add%?\\t%0, %1, %2
add%?\\t%0, %2, %1 add%?\\t%0, %2, %1
...@@ -773,9 +774,9 @@ ...@@ -773,9 +774,9 @@
operands[1], 0); operands[1], 0);
DONE; DONE;
" "
[(set_attr "length" "4,4,4,4,4,4,4,4,4,4,16") [(set_attr "length" "2,4,4,4,4,4,4,4,4,4,4,16")
(set_attr "predicable" "yes") (set_attr "predicable" "yes")
(set_attr "arch" "*,*,*,t2,t2,*,*,a,t2,t2,*")] (set_attr "arch" "t2,*,*,*,t2,t2,*,*,a,t2,t2,*")]
) )
(define_insn_and_split "*thumb1_addsi3" (define_insn_and_split "*thumb1_addsi3"
......
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