aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIra Rosen <irar@il.ibm.com>2010-09-19 11:19:54 +0000
committerIra Rosen <irar@il.ibm.com>2010-09-19 11:19:54 +0000
commite33239376f661356d9da9e57bc82e08f2fae035c (patch)
tree573dcb11844208d81d7a5a2b934459a3091df71b
parent03db09f2e648a7ef48708139bb689e1979e08ed5 (diff)
Make get_vec builtin depend on the vectype.st/cli-be-vect
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/st/cli-be-vect@164412 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/config/cil32/cil-builtins.def28
-rw-r--r--gcc/config/cil32/cil32.c37
2 files changed, 63 insertions, 2 deletions
diff --git a/gcc/config/cil32/cil-builtins.def b/gcc/config/cil32/cil-builtins.def
index 61f107c82f6..0f5b5315948 100644
--- a/gcc/config/cil32/cil-builtins.def
+++ b/gcc/config/cil32/cil-builtins.def
@@ -1099,11 +1099,37 @@ DEF_CILBUILTIN(GCC_BUILD_AFFINE_VEC_VQI, "[genvec_support]genvec_support.VQI::VQ
/* vec_size */
-DEF_CILBUILTIN(GCC_GET_STEP, "[genvec_support]genvec_support.VQI::get_vec_size", \
+DEF_CILBUILTIN(GCC_GET_STEP_VDF, "[genvec_support]genvec_support.VDF::get_vec_size_vdf", \
ATTR_CONST_NOTHROW_LIST, \
unsigned_type_node, \
0)
+DEF_CILBUILTIN(GCC_GET_STEP_VSF, "[genvec_support]genvec_support.VSF::get_vec_size_vsf", \
+ ATTR_CONST_NOTHROW_LIST, \
+ unsigned_type_node, \
+ 0)
+
+DEF_CILBUILTIN(GCC_GET_STEP_VDI, "[genvec_support]genvec_support.VDI::get_vec_size_vdi", \
+ ATTR_CONST_NOTHROW_LIST, \
+ unsigned_type_node, \
+ 0)
+
+DEF_CILBUILTIN(GCC_GET_STEP_VSI, "[genvec_support]genvec_support.VSI::get_vec_size_vsi", \
+ ATTR_CONST_NOTHROW_LIST, \
+ unsigned_type_node, \
+ 0)
+
+DEF_CILBUILTIN(GCC_GET_STEP_VHI, "[genvec_support]genvec_support.VHI::get_vec_size_vhi", \
+ ATTR_CONST_NOTHROW_LIST, \
+ unsigned_type_node, \
+ 0)
+
+DEF_CILBUILTIN(GCC_GET_STEP_VQI, "[genvec_support]genvec_support.VQI::get_vec_size_vqi", \
+ ATTR_CONST_NOTHROW_LIST, \
+ unsigned_type_node, \
+ 0)
+
+
/* align */
DEF_CILBUILTIN(GCC_GET_ALIGN_VDF, "[genvec_support]genvec_support.VDF::VDF_align", \
ATTR_CONST_NOTHROW_LIST, \
diff --git a/gcc/config/cil32/cil32.c b/gcc/config/cil32/cil32.c
index 9613b125879..8115ac75f50 100644
--- a/gcc/config/cil32/cil32.c
+++ b/gcc/config/cil32/cil32.c
@@ -417,7 +417,42 @@ cil32_vector_mode_supported_p (enum machine_mode mode ATTRIBUTE_UNUSED)
static tree
cil32_builtin_get_vec_size (tree type ATTRIBUTE_UNUSED)
{
- return cil32_builtins[CIL32_GCC_GET_STEP];
+ tree elem_type = TREE_TYPE (type);
+ unsigned element_size = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (elem_type));
+
+ if (TREE_CODE (elem_type) == INTEGER_TYPE)
+ {
+ switch (element_size)
+ {
+ case 8:
+ return cil32_builtins[CIL32_GCC_GET_STEP_VDI];
+
+ case 4:
+ return cil32_builtins[CIL32_GCC_GET_STEP_VSI];
+
+ case 2:
+ return cil32_builtins[CIL32_GCC_GET_STEP_VHI];
+
+ case 1:
+ return cil32_builtins[CIL32_GCC_GET_STEP_VQI];
+
+ default:
+ return NULL_TREE;
+ }
+ }
+ else
+ {
+ switch (element_size)
+ {
+ case 8:
+ return cil32_builtins[CIL32_GCC_GET_STEP_VDF];
+ case 4:
+ return cil32_builtins[CIL32_GCC_GET_STEP_VSF];
+
+ default:
+ return NULL_TREE;
+ }
+ }
}
static tree