[(set_attr "type" "neon_permute<q>")]
)
-(define_insn "*aarch64_topbits_shuffle<mode>_le"
- [(set (match_operand:<VNARROWQ2> 0 "register_operand" "=w")
- (vec_concat:<VNARROWQ2>
- (unspec:<VNARROWQ> [
- (match_operand:VQN 1 "register_operand" "w")
- (match_operand:VQN 2 "aarch64_simd_shift_imm_vec_exact_top")
- ] UNSPEC_RSHRN)
- (unspec:<VNARROWQ> [
- (match_operand:VQN 3 "register_operand" "w")
- (match_dup 2)
- ] UNSPEC_RSHRN)))]
- "TARGET_SIMD && !BYTES_BIG_ENDIAN"
- "uzp2\\t%0.<V2ntype>, %1.<V2ntype>, %3.<V2ntype>"
- [(set_attr "type" "neon_permute<q>")]
-)
-
(define_insn "*aarch64_<srn_op>topbits_shuffle<mode>_be"
[(set (match_operand:<VNARROWQ2> 0 "register_operand" "=w")
(vec_concat:<VNARROWQ2>
[(set_attr "type" "neon_permute<q>")]
)
-(define_insn "*aarch64_topbits_shuffle<mode>_be"
- [(set (match_operand:<VNARROWQ2> 0 "register_operand" "=w")
- (vec_concat:<VNARROWQ2>
- (unspec:<VNARROWQ> [
- (match_operand:VQN 3 "register_operand" "w")
- (match_operand:VQN 2 "aarch64_simd_shift_imm_vec_exact_top")
- ] UNSPEC_RSHRN)
- (unspec:<VNARROWQ> [
- (match_operand:VQN 1 "register_operand" "w")
- (match_dup 2)
- ] UNSPEC_RSHRN)))]
- "TARGET_SIMD && BYTES_BIG_ENDIAN"
- "uzp2\\t%0.<V2ntype>, %1.<V2ntype>, %3.<V2ntype>"
- [(set_attr "type" "neon_permute<q>")]
-)
-
(define_expand "aarch64_shrn<mode>"
[(set (match_operand:<VNARROWQ> 0 "register_operand")
(truncate:<VNARROWQ>
uint8x16_t foo (uint16x8_t a, uint16x8_t b)
{
- return vrshrn_high_n_u16 (vrshrn_n_u16 (a, 8), b, 8);
+ return vshrn_high_n_u16 (vshrn_n_u16 (a, 8), b, 8);
}
/* { dg-final { scan-assembler-times {\tuzp2\t} 1 } } */
uint16x8_t foo (uint32x4_t a, uint32x4_t b)
{
- return vrshrn_high_n_u32 (vrshrn_n_u32 (a, 16), b, 16);
+ return vshrn_high_n_u32 (vshrn_n_u32 (a, 16), b, 16);
}
/* { dg-final { scan-assembler-times {\tuzp2\t} 1 } } */