diff options
author | Ira Rosen <irar@il.ibm.com> | 2010-09-19 11:19:54 +0000 |
---|---|---|
committer | Ira Rosen <irar@il.ibm.com> | 2010-09-19 11:19:54 +0000 |
commit | e33239376f661356d9da9e57bc82e08f2fae035c (patch) | |
tree | 573dcb11844208d81d7a5a2b934459a3091df71b | |
parent | 03db09f2e648a7ef48708139bb689e1979e08ed5 (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.def | 28 | ||||
-rw-r--r-- | gcc/config/cil32/cil32.c | 37 |
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 |