aarch64-simd.md (vec_set<mode>): Add w -> w option to the constraint.
authorTejas Belagod <tejas.belagod@arm.com>
Wed, 13 Nov 2013 15:04:44 +0000 (15:04 +0000)
committerTejas Belagod <belagod@gcc.gnu.org>
Wed, 13 Nov 2013 15:04:44 +0000 (15:04 +0000)
2013-11-13  Tejas Belagod  <tejas.belagod@arm.com>

gcc/
* config/aarch64/aarch64-simd.md (vec_set<mode>): Add w -> w option to
the constraint.

From-SVN: r204746

gcc/ChangeLog
gcc/config/aarch64/aarch64-simd.md

index 56d039706a3dd63f732ce69db18f78881029652e..331e61cd6a9dd43b5e7af9a4d7f5d246c1e1cd6b 100644 (file)
@@ -1,3 +1,8 @@
+2013-11-13  Tejas Belagod  <tejas.belagod@arm.com>
+
+       * config/aarch64/aarch64-simd.md (vec_set<mode>): Add w -> w option to
+       the constraint.
+
 2013-11-13  Eric Botcazou  <ebotcazou@adacore.com>
 
        * cfgexpand.c (expand_used_vars): Allocate space for partitions based
index a747ee8d7bade8738fabbee071ede5d1898f369e..df4ef9592dc1219d7395c0e77463fb651f094b60 100644 (file)
 )
 
 (define_insn "aarch64_simd_vec_set<mode>"
-  [(set (match_operand:VQ_S 0 "register_operand" "=w")
+  [(set (match_operand:VQ_S 0 "register_operand" "=w,w")
         (vec_merge:VQ_S
            (vec_duplicate:VQ_S
-               (match_operand:<VEL> 1 "register_operand" "r"))
-           (match_operand:VQ_S 3 "register_operand" "0")
-           (match_operand:SI 2 "immediate_operand" "i")))]
+               (match_operand:<VEL> 1 "register_operand" "r,w"))
+           (match_operand:VQ_S 3 "register_operand" "0,0")
+           (match_operand:SI 2 "immediate_operand" "i,i")))]
   "TARGET_SIMD"
-  "ins\t%0.<Vetype>[%p2], %w1";
-  [(set_attr "simd_type" "simd_insgp")
-   (set_attr "type" "neon_from_gp<q>")
+  "@
+   ins\t%0.<Vetype>[%p2], %w1
+   ins\\t%0.<Vetype>[%p2], %1.<Vetype>[0]"
+  [(set_attr "simd_type" "simd_insgp, simd_ins")
+   (set_attr "type" "neon_from_gp<q>, neon_ins<q>")
    (set_attr "simd_mode" "<MODE>")]
 )
 
 })
 
 (define_expand "vec_set<mode>"
-  [(match_operand:VQ_S 0 "register_operand" "+w")
-   (match_operand:<VEL> 1 "register_operand" "r")
-   (match_operand:SI 2 "immediate_operand" "")]
+  [(match_operand:VQ_S 0 "register_operand")
+   (match_operand:<VEL> 1 "register_operand")
+   (match_operand:SI 2 "immediate_operand")]
   "TARGET_SIMD"
   {
     HOST_WIDE_INT elem = (HOST_WIDE_INT) 1 << INTVAL (operands[2]);
 )
 
 (define_insn "aarch64_simd_vec_setv2di"
-  [(set (match_operand:V2DI 0 "register_operand" "=w")
+  [(set (match_operand:V2DI 0 "register_operand" "=w,w")
         (vec_merge:V2DI
            (vec_duplicate:V2DI
-               (match_operand:DI 1 "register_operand" "r"))
-           (match_operand:V2DI 3 "register_operand" "0")
-           (match_operand:SI 2 "immediate_operand" "i")))]
+               (match_operand:DI 1 "register_operand" "r,w"))
+           (match_operand:V2DI 3 "register_operand" "0,0")
+           (match_operand:SI 2 "immediate_operand" "i,i")))]
   "TARGET_SIMD"
-  "ins\t%0.d[%p2], %1";
-  [(set_attr "simd_type" "simd_insgp")
-   (set_attr "type" "neon_from_gp")
+  "@
+   ins\t%0.d[%p2], %1
+   ins\\t%0.d[%p2], %1.d[0]"
+  [(set_attr "simd_type" "simd_insgp, simd_ins")
+   (set_attr "type" "neon_from_gp, neon_ins_q")
    (set_attr "simd_mode" "V2DI")]
 )
 
 (define_expand "vec_setv2di"
-  [(match_operand:V2DI 0 "register_operand" "+w")
-   (match_operand:DI 1 "register_operand" "r")
-   (match_operand:SI 2 "immediate_operand" "")]
+  [(match_operand:V2DI 0 "register_operand")
+   (match_operand:DI 1 "register_operand")
+   (match_operand:SI 2 "immediate_operand")]
   "TARGET_SIMD"
   {
     HOST_WIDE_INT elem = (HOST_WIDE_INT) 1 << INTVAL (operands[2]);