From: Stefan Schulze Frielinghaus <stefa...@linux.ibm.com>

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

Reply via email to