From: Stefan Schulze Frielinghaus <[email protected]>
Bump __VEC__ version to 10305 and add 128-bit integer vector types like
`vector __int128` et al. to the zvector extension.
gcc/ChangeLog:
* config/s390/s390-c.cc (rid_int128): New helper function.
(s390_macro_to_expand): Deal with `vector __int128`.
(s390_cpu_cpp_builtins_internal): Bump __VEC__.
* config/s390/s390.cc (s390_handle_vectorbool_attribute): Add
128-bit bool zvector.
---
gcc/config/s390/s390-c.cc | 21 +++++++++++++++++++--
gcc/config/s390/s390.cc | 3 +++
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/gcc/config/s390/s390-c.cc b/gcc/config/s390/s390-c.cc
index bcb55d43861..27e18f0b475 100644
--- a/gcc/config/s390/s390-c.cc
+++ b/gcc/config/s390/s390-c.cc
@@ -174,6 +174,22 @@ s390_categorize_keyword (const cpp_token *tok)
}
+/* Helper function to find out which RID_INT_N_* code is the one for
+ __int128, if any. Returns RID_MAX+1 if none apply, which is safe
+ (for our purposes, since we always expect to have __int128) to
+ compare against. */
+static inline int
+rid_int128 (void)
+{
+ for (int i = 0; i < NUM_INT_N_ENTS; ++i)
+ if (int_n_enabled_p[i]
+ && int_n_data[i].bitsize == 128)
+ return RID_INT_N_0 + i;
+
+ return RID_MAX + 1;
+}
+
+
/* Called to decide whether a conditional macro should be expanded.
Since we have exactly one such macro (i.e, 'vector'), we do not
need to examine the 'tok' parameter. */
@@ -262,7 +278,8 @@ s390_macro_to_expand (cpp_reader *pfile, const cpp_token
*tok)
|| rid_code == RID_SHORT || rid_code == RID_SIGNED
|| rid_code == RID_INT || rid_code == RID_CHAR
|| (rid_code == RID_FLOAT && TARGET_VXE)
- || rid_code == RID_DOUBLE)
+ || rid_code == RID_DOUBLE
+ || rid_code == rid_int128 ())
{
expand_this = C_CPP_HASHNODE (__vector_keyword);
/* If the next keyword is bool, it will need to be expanded as
@@ -341,7 +358,7 @@ s390_cpu_cpp_builtins_internal (cpp_reader *pfile,
s390_def_or_undef_macro (pfile, target_flag_set_p (MASK_OPT_VX), old_opts,
opts, "__VX__", "__VX__");
s390_def_or_undef_macro (pfile, target_flag_set_p (MASK_ZVECTOR), old_opts,
- opts, "__VEC__=10304", "__VEC__");
+ opts, "__VEC__=10305", "__VEC__");
s390_def_or_undef_macro (pfile, target_flag_set_p (MASK_ZVECTOR), old_opts,
opts, "__vector=__attribute__((vector_size(16)))",
"__vector__");
diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc
index 327e44c8078..f5053781ffd 100644
--- a/gcc/config/s390/s390.cc
+++ b/gcc/config/s390/s390.cc
@@ -1199,6 +1199,9 @@ s390_handle_vectorbool_attribute (tree *node, tree name
ATTRIBUTE_UNUSED,
mode = TYPE_MODE (type);
switch (mode)
{
+ case E_TImode: case E_V1TImode:
+ result = s390_builtin_types[BT_BV1TI];
+ break;
case E_DImode: case E_V2DImode:
result = s390_builtin_types[BT_BV2DI];
break;
--
2.47.0