arm: Implement vec_perm and vec_perm_const for NEON.
authorRichard Henderson <rth@redhat.com>
Tue, 10 Jan 2012 04:47:26 +0000 (20:47 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Tue, 10 Jan 2012 04:47:26 +0000 (20:47 -0800)
commitb440f32451e63beab306ec5cffba4c7ca3e85f97
treee4a083eb7000163130dae87944b7a0474f29a141
parent18f0fe6b98ec82da10e3d3c67f802f1cf6c2a77f
arm: Implement vec_perm and vec_perm_const for NEON.

* config/arm/arm.c (arm_vectorize_vec_perm_const_ok,
TARGET_VECTORIZE_VEC_PERM_CONST_OK, neon_split_vcombine, MAX_VECT_LEN,
struct expand_vec_perm_d, arm_expand_vec_perm_1, arm_expand_vec_perm,
arm_evpc_neon_vuzp, arm_evpc_neon_vzip, arm_evpc_neon_vrev,
arm_evpc_neon_vtrn, arm_evpc_neon_vtbl, arm_expand_vec_perm_const_1,
arm_expand_vec_perm_const): New.
* config/arm/arm-protos.h: Update.
* config/arm/neon.md (UNSPEC_VCONCAT): New.
(*neon_vswp<VDQX>): New.
(neon_vcombine<VDX>): Use neon_split_vcombine.
(neon_vtbl1v16qi, neon_vtbl2v16qi, neon_vcombinev16qi): New.
* config/arm/vec-common.md (vec_perm_const<VALL>): New.
(vec_perm<VE>): New.

testsuite/
* lib/target-supports.exp (check_effective_target_vect_perm,
check_effective_target_vect_perm_byte,
check_effective_target_vect_perm_short): Enable for arm neon.

From-SVN: r183051
gcc/ChangeLog
gcc/config/arm/arm-protos.h
gcc/config/arm/arm.c
gcc/config/arm/neon.md
gcc/config/arm/vec-common.md
gcc/testsuite/ChangeLog
gcc/testsuite/lib/target-supports.exp