===================================================================
@@ -1165,11 +1165,11 @@
; we're really at the mercy of the register allocator.
(define_insn "neon_move_lo_quad_<mode>"
- [(set (match_operand:ANY128 0 "s_register_operand" "+w")
+ [(set (match_operand:ANY128 0 "s_register_operand" "=w")
(vec_concat:ANY128
(match_operand:<V_HALF> 1 "s_register_operand" "w")
(vec_select:<V_HALF>
- (match_dup 0)
+ (match_operand:ANY128 3 "s_register_operand" "0")
(match_operand:ANY128 2 "vect_par_constant_high" ""))))]
"TARGET_NEON"
{
@@ -1177,7 +1177,7 @@
int src = REGNO (operands[1]);
if (dest != src)
- return "vmov\t%e0, %P1";
+ return "vmov\t%e0, %P1\t@ neon_move_lo_quad";
else
return "";
}
@@ -1185,10 +1185,10 @@
)
(define_insn "neon_move_hi_quad_<mode>"
- [(set (match_operand:ANY128 0 "s_register_operand" "+w")
+ [(set (match_operand:ANY128 0 "s_register_operand" "=w")
(vec_concat:ANY128
(vec_select:<V_HALF>
- (match_dup 0)
+ (match_operand:ANY128 3 "s_register_operand" "0")
(match_operand:ANY128 2 "vect_par_constant_low" ""))
(match_operand:<V_HALF> 1 "s_register_operand" "w")))]
@@ -1197,8 +1197,8 @@
int dest = REGNO (operands[0]);
int src = REGNO (operands[1]);
- if (dest != src)
- return "vmov\t%f0, %P1";
+ if (dest + 2 != src)
+ return "vmov\t%f0, %P1\t@ neon_move_hi_quad";
else
return "";
}
@@ -1218,7 +1218,8 @@
RTVEC_ELT (v, i) = GEN_INT (i);
t1 = gen_rtx_PARALLEL (<MODE>mode, v);
- emit_insn (gen_neon_move_hi_quad_<mode> (operands[0], operands[1], t1));
+ emit_insn (gen_neon_move_hi_quad_<mode> (operands[0], operands[1], t1,
+ operands[0]));
DONE;
})
@@ -1236,7 +1237,8 @@
RTVEC_ELT (v, i) = GEN_INT ((<V_mode_nunits>/2) + i);
t1 = gen_rtx_PARALLEL (<MODE>mode, v);
- emit_insn (gen_neon_move_lo_quad_<mode> (operands[0], operands[1], t1));
+ emit_insn (gen_neon_move_lo_quad_<mode> (operands[0], operands[1], t1,
+ operands[0]));
DONE;
})
@@ -5443,8 +5445,9 @@
(truncate:<V_narrow>
(match_operand:VN 2 "register_operand" "w"))))]
"TARGET_NEON"
- "vmovn.i<V_sz_elem>\t%e0, %q1\n\tvmovn.i<V_sz_elem>\t%f0, %q2"
- [(set_attr "neon_type" "neon_shift_1")]
+ "vmovn.i<V_sz_elem>\t%e0, %q1\;vmovn.i<V_sz_elem>\t%f0, %q2"
+ [(set_attr "neon_type" "neon_shift_1")
+ (set_attr "length" "8")]
)
;; For the non-quad case.