summaryrefslogtreecommitdiff
path: root/gcc/config/i386/i386-modes.def
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2009-11-26 02:39:42 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2009-11-26 02:39:42 +0000
commite2b814033a963d7d9ca00933279cd15839b473b9 (patch)
tree18af8f6ccd41df4d0b36a54e7ef14f7def7b2c94 /gcc/config/i386/i386-modes.def
parent7e911808fabbf99d37336440470c43a13ac03496 (diff)
downloadgcc-e2b814033a963d7d9ca00933279cd15839b473b9.tar.gz
* config/i386/i386-builtin-types.awk (DEF_VECTOR_TYPE): Allow an
optional 3rd argument to define the mode. * config/i386/i386-builtin-types.def (UQI, UHI, USI, UDI): New. (V2UDI, V4USI, V8UHI, V16UQI): New. (V4SF_FTYPE_V4SF_V4SF_V4SI, V2UDI_FTYPE_V2UDI_V2UDI_V2UDI, V4USI_FTYPE_V4USI_V4USI_V4USI, V8UHI_FTYPE_V8UHI_V8UHI_V8UHI, V16UQI_FTYPE_V16UQI_V16UQI_V16UQI): New. * config/i386/i386-modes.def: Rearrange for double-wide AVX. * config/i386/i386-protos.h (ix86_expand_vec_extract_even_odd): New. * config/i386/i386.c (IX86_BUILTIN_VEC_PERM_*): New. (bdesc_args): Add the builtin definitions to match. (ix86_expand_builtin): Expand them. (ix86_builtin_vectorization_cost): Rename from x86_builtin_vectorization_cost. (ix86_vectorize_builtin_vec_perm, struct expand_vec_perm_d, doublesize_vector_mode, expand_vselect, expand_vselect_vconcat, expand_vec_perm_blend, expand_vec_perm_vpermil, expand_vec_perm_pshufb, expand_vec_perm_1, expand_vec_perm_pshuflw_pshufhw, expand_vec_perm_palignr, expand_vec_perm_interleave2, expand_vec_perm_pshufb2, expand_vec_perm_even_odd_1, expand_vec_perm_even_odd, ix86_expand_vec_perm_builtin_1, extract_vec_perm_cst, ix86_expand_vec_perm_builtin, ix86_vectorize_builtin_vec_perm_ok, ix86_expand_vec_extract_even_odd, TARGET_VECTORIZE_BUILTIN_VEC_PERM, TARGET_VECTORIZE_BUILTIN_VEC_PERM_OK): New. * sse.md (SSEMODE_EO): New. (vec_extract_even<mode>): Use SSEMODE_EO and ix86_expand_vec_extract_even_odd. (vec_extract_odd<mode>): Likewise. (mulv16qi3, vec_pack_trunc_v8hi, vec_pack_trunc_v4si, vec_pack_trunc_v2di): Use ix86_expand_vec_extract_even_odd. testsuite/ * gcc.dg/vect/slp-21.c: Succeed with vect_extract_even_odd too. * lib/target-supports.exp (check_effective_target_vect_extract_even_odd): Add x86. * gcc.target/i386/isa-check.h: New. * gcc.target/i386/vperm-2-2.inc, gcc.target/i386/vperm-4-1.inc, gcc.target/i386/vperm-4-2.inc, gcc.target/i386/vperm-v2df.c, gcc.target/i386/vperm-v2di.c, gcc.target/i386/vperm-v4sf-1.c, gcc.target/i386/vperm-v4sf-2.c, gcc.target/i386/vperm-v4si-1.c, gcc.target/i386/vperm-v4si-2.c, gcc.target/i386/vperm-v4si-2x.c, gcc.target/i386/vperm.pl: New files. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154667 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/i386/i386-modes.def')
-rw-r--r--gcc/config/i386/i386-modes.def30
1 files changed, 14 insertions, 16 deletions
diff --git a/gcc/config/i386/i386-modes.def b/gcc/config/i386/i386-modes.def
index 9c948026f75..f2e06ee248f 100644
--- a/gcc/config/i386/i386-modes.def
+++ b/gcc/config/i386/i386-modes.def
@@ -69,22 +69,20 @@ CC_MODE (CCZ);
CC_MODE (CCFP);
CC_MODE (CCFPU);
-/* Vector modes. */
-VECTOR_MODES (INT, 4); /* V4QI V2HI */
-VECTOR_MODES (INT, 8); /* V8QI V4HI V2SI */
-VECTOR_MODES (INT, 16); /* V16QI V8HI V4SI V2DI */
-VECTOR_MODES (INT, 32); /* V32QI V16HI V8SI V4DI */
-VECTOR_MODES (FLOAT, 8); /* V4HF V2SF */
-VECTOR_MODES (FLOAT, 16); /* V8HF V4SF V2DF */
-VECTOR_MODES (FLOAT, 32); /* V16HF V8SF V4DF */
-VECTOR_MODE (INT, DI, 1); /* V1DI */
-VECTOR_MODE (INT, SI, 1); /* V1SI */
-VECTOR_MODE (INT, QI, 2); /* V2QI */
-VECTOR_MODE (INT, DI, 8); /* V8DI */
-VECTOR_MODE (INT, HI, 32); /* V32HI */
-VECTOR_MODE (INT, QI, 64); /* V64QI */
-VECTOR_MODE (FLOAT, DF, 8); /* V8DF */
-VECTOR_MODE (FLOAT, SF, 16); /* V16SF */
+/* Vector modes. Note that VEC_CONCAT patterns require vector
+ sizes twice as big as implemented in hardware. */
+VECTOR_MODES (INT, 4); /* V4QI V2HI */
+VECTOR_MODES (INT, 8); /* V8QI V4HI V2SI */
+VECTOR_MODES (INT, 16); /* V16QI V8HI V4SI V2DI */
+VECTOR_MODES (INT, 32); /* V32QI V16HI V8SI V4DI */
+VECTOR_MODES (INT, 64); /* V64QI V32HI V16SI V8DI */
+VECTOR_MODES (FLOAT, 8); /* V4HF V2SF */
+VECTOR_MODES (FLOAT, 16); /* V8HF V4SF V2DF */
+VECTOR_MODES (FLOAT, 32); /* V16HF V8SF V4DF */
+VECTOR_MODES (FLOAT, 64); /* V32HF V16SF V8DF */
+VECTOR_MODE (INT, DI, 1); /* V1DI */
+VECTOR_MODE (INT, SI, 1); /* V1SI */
+VECTOR_MODE (INT, QI, 2); /* V2QI */
INT_MODE (OI, 32);