diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 56d039706a3..331e61cd6a9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-11-13 Tejas Belagod + + * config/aarch64/aarch64-simd.md (vec_set): Add w -> w option to + the constraint. + 2013-11-13 Eric Botcazou * cfgexpand.c (expand_used_vars): Allocate space for partitions based diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index a747ee8d7ba..df4ef9592dc 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -695,16 +695,18 @@ ) (define_insn "aarch64_simd_vec_set" - [(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: 1 "register_operand" "r")) - (match_operand:VQ_S 3 "register_operand" "0") - (match_operand:SI 2 "immediate_operand" "i")))] + (match_operand: 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.[%p2], %w1"; - [(set_attr "simd_type" "simd_insgp") - (set_attr "type" "neon_from_gp") + "@ + ins\t%0.[%p2], %w1 + ins\\t%0.[%p2], %1.[0]" + [(set_attr "simd_type" "simd_insgp, simd_ins") + (set_attr "type" "neon_from_gp, neon_ins") (set_attr "simd_mode" "")] ) @@ -958,9 +960,9 @@ }) (define_expand "vec_set" - [(match_operand:VQ_S 0 "register_operand" "+w") - (match_operand: 1 "register_operand" "r") - (match_operand:SI 2 "immediate_operand" "")] + [(match_operand:VQ_S 0 "register_operand") + (match_operand: 1 "register_operand") + (match_operand:SI 2 "immediate_operand")] "TARGET_SIMD" { HOST_WIDE_INT elem = (HOST_WIDE_INT) 1 << INTVAL (operands[2]); @@ -971,23 +973,25 @@ ) (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]);