arm.md (arm_andsi3_insn): Add alternatives for 16-bit encoding.
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Tue, 2 Jul 2013 10:21:36 +0000 (10:21 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Tue, 2 Jul 2013 10:21:36 +0000 (10:21 +0000)
2013-07-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

* config/arm/arm.md (arm_andsi3_insn): Add alternatives for 16-bit
encoding.
(iorsi3_insn): Likewise.
(arm_xorsi3): Likewise.

From-SVN: r200593

gcc/ChangeLog
gcc/config/arm/arm.md

index a29ab3095c64b3f16cf8505f780cf898634e8fed..727b579e9240ed5439fa1cf9de7fa2793769435b 100644 (file)
@@ -1,3 +1,10 @@
+2013-07-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * config/arm/arm.md (arm_andsi3_insn): Add alternatives for 16-bit
+       encoding.
+       (iorsi3_insn): Likewise.
+       (arm_xorsi3): Likewise.
+
 2013-07-01  Sofiane Naci  <sofiane.naci@arm.com>
 
        * arm.md (attribute "wtype"): Delete.  Move attribute values from here
index 89e7b54e34f0fd82cc22547685f70cd9bc61a01d..0fcdeea609c674c3bb5b285e420d0a41a603eb0f 100644 (file)
 
 ; ??? Check split length for Thumb-2
 (define_insn_and_split "*arm_andsi3_insn"
-  [(set (match_operand:SI         0 "s_register_operand" "=r,r,r,r")
-       (and:SI (match_operand:SI 1 "s_register_operand" "r,r,r,r")
-               (match_operand:SI 2 "reg_or_int_operand" "I,K,r,?n")))]
+  [(set (match_operand:SI         0 "s_register_operand" "=r,l,r,r,r")
+       (and:SI (match_operand:SI 1 "s_register_operand" "%r,0,r,r,r")
+               (match_operand:SI 2 "reg_or_int_operand" "I,l,K,r,?n")))]
   "TARGET_32BIT"
   "@
+   and%?\\t%0, %1, %2
    and%?\\t%0, %1, %2
    bic%?\\t%0, %1, #%B2
    and%?\\t%0, %1, %2
                       INTVAL (operands[2]), operands[0], operands[1], 0);
   DONE;
   "
-  [(set_attr "length" "4,4,4,16")
+  [(set_attr "length" "4,4,4,4,16")
    (set_attr "predicable" "yes")
-   (set_attr "type"    "simple_alu_imm,simple_alu_imm,*,simple_alu_imm")]
+   (set_attr "predicable_short_it" "no,yes,no,no,no")
+   (set_attr "type"
+     "simple_alu_imm,simple_alu_imm,*,*,simple_alu_imm")]
 )
 
 (define_insn "*thumb1_andsi3_insn"
 )
 
 (define_insn_and_split "*iorsi3_insn"
-  [(set (match_operand:SI 0 "s_register_operand" "=r,r,r,r")
-       (ior:SI (match_operand:SI 1 "s_register_operand" "%r,r,r,r")
-               (match_operand:SI 2 "reg_or_int_operand" "I,K,r,?n")))]
+  [(set (match_operand:SI 0 "s_register_operand" "=r,l,r,r,r")
+       (ior:SI (match_operand:SI 1 "s_register_operand" "%r,0,r,r,r")
+               (match_operand:SI 2 "reg_or_int_operand" "I,l,K,r,?n")))]
   "TARGET_32BIT"
   "@
+   orr%?\\t%0, %1, %2
    orr%?\\t%0, %1, %2
    orn%?\\t%0, %1, #%B2
    orr%?\\t%0, %1, %2
         || (TARGET_THUMB2 && const_ok_for_arm (~INTVAL (operands[2]))))"
   [(clobber (const_int 0))]
 {
-  arm_split_constant (IOR, SImode, curr_insn, 
+  arm_split_constant (IOR, SImode, curr_insn,
                       INTVAL (operands[2]), operands[0], operands[1], 0);
   DONE;
 }
-  [(set_attr "length" "4,4,4,16")
-   (set_attr "arch" "32,t2,32,32")
+  [(set_attr "length" "4,4,4,4,16")
+   (set_attr "arch" "32,t2,t2,32,32")
    (set_attr "predicable" "yes")
-   (set_attr "type" "simple_alu_imm,simple_alu_imm,*,*")]
+   (set_attr "predicable_short_it" "no,yes,no,no,no")
+   (set_attr "type" "simple_alu_imm,*,simple_alu_imm,*,*")]
 )
 
 (define_insn "*thumb1_iorsi3_insn"
 )
 
 (define_insn_and_split "*arm_xorsi3"
-  [(set (match_operand:SI         0 "s_register_operand" "=r,r,r")
-       (xor:SI (match_operand:SI 1 "s_register_operand" "%r,r,r")
-               (match_operand:SI 2 "reg_or_int_operand" "I,r,?n")))]
+  [(set (match_operand:SI         0 "s_register_operand" "=r,l,r,r")
+       (xor:SI (match_operand:SI 1 "s_register_operand" "%r,0,r,r")
+               (match_operand:SI 2 "reg_or_int_operand" "I,l,r,?n")))]
   "TARGET_32BIT"
   "@
+   eor%?\\t%0, %1, %2
    eor%?\\t%0, %1, %2
    eor%?\\t%0, %1, %2
    #"
                       INTVAL (operands[2]), operands[0], operands[1], 0);
   DONE;
 }
-  [(set_attr "length" "4,4,16")
+  [(set_attr "length" "4,4,4,16")
    (set_attr "predicable" "yes")
-   (set_attr "type"  "simple_alu_imm,*,*")]
+   (set_attr "predicable_short_it" "no,yes,no,no")
+   (set_attr "type"  "simple_alu_imm,*,*,*")]
 )
 
 (define_insn "*thumb1_xorsi3_insn"