OSDN Git Service

arm: Implement vec_perm and vec_perm_const for NEON.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 10 Jan 2012 04:47:26 +0000 (04:47 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 10 Jan 2012 04:47:26 +0000 (04:47 +0000)
commit47ddcd6beb05e048889c255d795abcbf4bce3b45
treee4a083eb7000163130dae87944b7a0474f29a141
parente1b93706d7bfb87bb5cf39a422aa94c0322d0740
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183051 138bc75d-0d04-0410-961f-82ee72b054a4
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