aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorStefan Schulze Frielinghaus <stefansf@gcc.gnu.org>2025-01-20 10:01:10 +0100
committerStefan Schulze Frielinghaus <stefansf@gcc.gnu.org>2025-01-20 10:01:10 +0100
commit2e87d6e44198e2b134555d661366a2f941615511 (patch)
tree14e81652076beffb45d07399f77aa6c3486826b2 /gcc
parentf31ddaaaa2d9e683ddd8534663af092984ddb911 (diff)
downloadgcc-2e87d6e44198e2b134555d661366a2f941615511.zip
gcc-2e87d6e44198e2b134555d661366a2f941615511.tar.gz
gcc-2e87d6e44198e2b134555d661366a2f941615511.tar.bz2
s390: arch15: Vector compare: Add 128-bit integer support
gcc/ChangeLog: * config/s390/s390-builtins.def: Add 128-bit variants. * config/s390/s390-builtin-types.def: Update accordingly. * config/s390/s390.cc (s390_expand_vec_compare_cc): Also consider TI modes for vectors. * config/s390/vector.md: Enable *vec_cmp et al. for VXE3. * config/s390/vx-builtins.md: Ditto.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/s390/s390-builtin-types.def9
-rw-r--r--gcc/config/s390/s390-builtins.def71
-rw-r--r--gcc/config/s390/s390.cc3
-rw-r--r--gcc/config/s390/vector.md20
-rw-r--r--gcc/config/s390/vx-builtins.md100
5 files changed, 143 insertions, 60 deletions
diff --git a/gcc/config/s390/s390-builtin-types.def b/gcc/config/s390/s390-builtin-types.def
index 6f903de..7aeea34 100644
--- a/gcc/config/s390/s390-builtin-types.def
+++ b/gcc/config/s390/s390-builtin-types.def
@@ -202,9 +202,12 @@ DEF_FN_TYPE_1 (BT_FN_VOID_UINT, BT_VOID, BT_UINT)
DEF_FN_TYPE_2 (BT_FN_DBL_V2DF_INT, BT_DBL, BT_V2DF, BT_INT)
DEF_FN_TYPE_2 (BT_FN_FLT_V4SF_INT, BT_FLT, BT_V4SF, BT_INT)
DEF_FN_TYPE_2 (BT_FN_INT128_INT128_INT128, BT_INT128, BT_INT128, BT_INT128)
+DEF_FN_TYPE_2 (BT_FN_INT128_UINT128_UINT128, BT_INT128, BT_UINT128, BT_UINT128)
DEF_FN_TYPE_2 (BT_FN_INT128_V2DI_V2DI, BT_INT128, BT_V2DI, BT_V2DI)
+DEF_FN_TYPE_2 (BT_FN_INT_INT128_INT128, BT_INT, BT_INT128, BT_INT128)
DEF_FN_TYPE_2 (BT_FN_INT_OV4SI_INT, BT_INT, BT_OV4SI, BT_INT)
DEF_FN_TYPE_2 (BT_FN_INT_OV4SI_OV4SI, BT_INT, BT_OV4SI, BT_OV4SI)
+DEF_FN_TYPE_2 (BT_FN_INT_UINT128_UINT128, BT_INT, BT_UINT128, BT_UINT128)
DEF_FN_TYPE_2 (BT_FN_INT_UV16QI_UV16QI, BT_INT, BT_UV16QI, BT_UV16QI)
DEF_FN_TYPE_2 (BT_FN_INT_UV2DI_UV2DI, BT_INT, BT_UV2DI, BT_UV2DI)
DEF_FN_TYPE_2 (BT_FN_INT_UV4SI_UV4SI, BT_INT, BT_UV4SI, BT_UV4SI)
@@ -304,6 +307,8 @@ DEF_FN_TYPE_2 (BT_FN_VOID_V2DF_FLTPTR, BT_VOID, BT_V2DF, BT_FLTPTR)
DEF_FN_TYPE_3 (BT_FN_BV2DI_V2DF_USHORT_INTPTR, BT_BV2DI, BT_V2DF, BT_USHORT, BT_INTPTR)
DEF_FN_TYPE_3 (BT_FN_BV4SI_V4SF_USHORT_INTPTR, BT_BV4SI, BT_V4SF, BT_USHORT, BT_INTPTR)
DEF_FN_TYPE_3 (BT_FN_INT128_INT128_INT128_INT128, BT_INT128, BT_INT128, BT_INT128, BT_INT128)
+DEF_FN_TYPE_3 (BT_FN_INT128_INT128_INT128_INTPTR, BT_INT128, BT_INT128, BT_INT128, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_INT128_UINT128_UINT128_INTPTR, BT_INT128, BT_UINT128, BT_UINT128, BT_INTPTR)
DEF_FN_TYPE_3 (BT_FN_INT128_V2DI_V2DI_INT128, BT_INT128, BT_V2DI, BT_V2DI, BT_INT128)
DEF_FN_TYPE_3 (BT_FN_INT_OV4SI_OV4SI_INTPTR, BT_INT, BT_OV4SI, BT_OV4SI, BT_INTPTR)
DEF_FN_TYPE_3 (BT_FN_OV4SI_INT_OV4SI_INT, BT_OV4SI, BT_INT, BT_OV4SI, BT_INT)
@@ -433,6 +438,8 @@ DEF_OV_TYPE (BT_OV_BV1TI_BV1TI_BV1TI_UV16QI, BT_BV1TI, BT_BV1TI, BT_BV1TI, BT_UV
DEF_OV_TYPE (BT_OV_BV1TI_BV1TI_BV1TI_UV1TI, BT_BV1TI, BT_BV1TI, BT_BV1TI, BT_UV1TI)
DEF_OV_TYPE (BT_OV_BV1TI_BV1TI_BV1TI_V1TI, BT_BV1TI, BT_BV1TI, BT_BV1TI, BT_V1TI)
DEF_OV_TYPE (BT_OV_BV1TI_BV2DI, BT_BV1TI, BT_BV2DI)
+DEF_OV_TYPE (BT_OV_BV1TI_UV1TI_UV1TI, BT_BV1TI, BT_UV1TI, BT_UV1TI)
+DEF_OV_TYPE (BT_OV_BV1TI_V1TI_V1TI, BT_BV1TI, BT_V1TI, BT_V1TI)
DEF_OV_TYPE (BT_OV_BV2DI_BV1TI_BV1TI, BT_BV2DI, BT_BV1TI, BT_BV1TI)
DEF_OV_TYPE (BT_OV_BV2DI_BV2DI, BT_BV2DI, BT_BV2DI)
DEF_OV_TYPE (BT_OV_BV2DI_BV2DI_BV2DI, BT_BV2DI, BT_BV2DI, BT_BV2DI)
@@ -505,6 +512,7 @@ DEF_OV_TYPE (BT_OV_FLT_V4SF_INT, BT_FLT, BT_V4SF, BT_INT)
DEF_OV_TYPE (BT_OV_INT_BV16QI_BV16QI, BT_INT, BT_BV16QI, BT_BV16QI)
DEF_OV_TYPE (BT_OV_INT_BV16QI_UV16QI, BT_INT, BT_BV16QI, BT_UV16QI)
DEF_OV_TYPE (BT_OV_INT_BV16QI_V16QI, BT_INT, BT_BV16QI, BT_V16QI)
+DEF_OV_TYPE (BT_OV_INT_BV1TI_BV1TI, BT_INT, BT_BV1TI, BT_BV1TI)
DEF_OV_TYPE (BT_OV_INT_BV2DI_BV2DI, BT_INT, BT_BV2DI, BT_BV2DI)
DEF_OV_TYPE (BT_OV_INT_BV2DI_UV2DI, BT_INT, BT_BV2DI, BT_UV2DI)
DEF_OV_TYPE (BT_OV_INT_BV2DI_V2DI, BT_INT, BT_BV2DI, BT_V2DI)
@@ -527,6 +535,7 @@ DEF_OV_TYPE (BT_OV_INT_V16QI_BV16QI, BT_INT, BT_V16QI, BT_BV16QI)
DEF_OV_TYPE (BT_OV_INT_V16QI_UV16QI, BT_INT, BT_V16QI, BT_UV16QI)
DEF_OV_TYPE (BT_OV_INT_V16QI_V16QI, BT_INT, BT_V16QI, BT_V16QI)
DEF_OV_TYPE (BT_OV_INT_V1TI_UV1TI, BT_INT, BT_V1TI, BT_UV1TI)
+DEF_OV_TYPE (BT_OV_INT_V1TI_V1TI, BT_INT, BT_V1TI, BT_V1TI)
DEF_OV_TYPE (BT_OV_INT_V2DF_UV2DI, BT_INT, BT_V2DF, BT_UV2DI)
DEF_OV_TYPE (BT_OV_INT_V2DF_V2DF, BT_INT, BT_V2DF, BT_V2DF)
DEF_OV_TYPE (BT_OV_INT_V2DI_BV2DI, BT_INT, BT_V2DI, BT_BV2DI)
diff --git a/gcc/config/s390/s390-builtins.def b/gcc/config/s390/s390-builtins.def
index 8eb07e6..9c33344 100644
--- a/gcc/config/s390/s390-builtins.def
+++ b/gcc/config/s390/s390-builtins.def
@@ -1007,6 +1007,7 @@ B_DEF (s390_vceqbs, vec_cmpeqv16qi_cc, 0,
B_DEF (s390_vceqhs, vec_cmpeqv8hi_cc, 0, B_VX, 0, BT_FN_V8HI_UV8HI_UV8HI_INTPTR)
B_DEF (s390_vceqfs, vec_cmpeqv4si_cc, 0, B_VX, 0, BT_FN_V4SI_UV4SI_UV4SI_INTPTR)
B_DEF (s390_vceqgs, vec_cmpeqv2di_cc, 0, B_VX, 0, BT_FN_V2DI_UV2DI_UV2DI_INTPTR)
+B_DEF (s390_vceqqs, vec_cmpeqti_cc, 0, B_VXE3, 0, BT_FN_INT128_UINT128_UINT128_INTPTR)
B_DEF (s390_vfcesbs, vec_cmpeqv4sf_cc, 0, B_VXE, 0, BT_FN_V4SI_V4SF_V4SF_INTPTR)
B_DEF (s390_vfcedbs, vec_cmpeqv2df_cc, 0, B_VX, 0, BT_FN_V2DI_V2DF_V2DF_INTPTR)
@@ -1018,6 +1019,8 @@ B_DEF (s390_vchfs, vec_cmphv4si_cc, 0,
B_DEF (s390_vchlfs, vec_cmphlv4si_cc, 0, B_VX, 0, BT_FN_V4SI_UV4SI_UV4SI_INTPTR)
B_DEF (s390_vchgs, vec_cmphv2di_cc, 0, B_VX, 0, BT_FN_V2DI_V2DI_V2DI_INTPTR)
B_DEF (s390_vchlgs, vec_cmphlv2di_cc, 0, B_VX, 0, BT_FN_V2DI_UV2DI_UV2DI_INTPTR)
+B_DEF (s390_vchqs, vec_cmphti_cc, 0, B_VXE3, 0, BT_FN_INT128_INT128_INT128_INTPTR)
+B_DEF (s390_vchlqs, vec_cmphlti_cc , 0, B_VXE3, 0, BT_FN_INT128_UINT128_UINT128_INTPTR)
B_DEF (s390_vfchsbs, vec_cmphv4sf_cc, 0, B_VXE, 0, BT_FN_V4SI_V4SF_V4SF_INTPTR)
B_DEF (s390_vfchdbs, vec_cmphv2df_cc, 0, B_VX, 0, BT_FN_V2DI_V2DF_V2DF_INTPTR)
@@ -1028,6 +1031,7 @@ B_DEF (vec_all_eqv16qi, vec_all_eqv16qi, 0,
B_DEF (vec_all_eqv8hi, vec_all_eqv8hi, 0, B_INT | B_VX, 0, BT_FN_INT_UV8HI_UV8HI)
B_DEF (vec_all_eqv4si, vec_all_eqv4si, 0, B_INT | B_VX, 0, BT_FN_INT_UV4SI_UV4SI)
B_DEF (vec_all_eqv2di, vec_all_eqv2di, 0, B_INT | B_VX, 0, BT_FN_INT_UV2DI_UV2DI)
+B_DEF (vec_all_eqti, vec_all_eqti, 0, B_INT | B_VXE3, 0, BT_FN_INT_UINT128_UINT128)
B_DEF (vec_all_eqv4sf, vec_all_eqv4sf, 0, B_INT | B_VXE, 0, BT_FN_INT_V4SF_V4SF)
B_DEF (vec_all_eqv2df, vec_all_eqv2df, 0, B_INT | B_VX, 0, BT_FN_INT_V2DF_V2DF)
@@ -1035,6 +1039,7 @@ B_DEF (vec_all_nev16qi, vec_all_nev16qi, 0,
B_DEF (vec_all_nev8hi, vec_all_nev8hi, 0, B_INT | B_VX, 0, BT_FN_INT_UV8HI_UV8HI)
B_DEF (vec_all_nev4si, vec_all_nev4si, 0, B_INT | B_VX, 0, BT_FN_INT_UV4SI_UV4SI)
B_DEF (vec_all_nev2di, vec_all_nev2di, 0, B_INT | B_VX, 0, BT_FN_INT_UV2DI_UV2DI)
+B_DEF (vec_all_neti, vec_all_neti, 0, B_INT | B_VXE3, 0, BT_FN_INT_UINT128_UINT128)
B_DEF (vec_all_nev4sf, vec_all_nev4sf, 0, B_INT | B_VXE, 0, BT_FN_INT_V4SF_V4SF)
B_DEF (vec_all_nev2df, vec_all_nev2df, 0, B_INT | B_VX, 0, BT_FN_INT_V2DF_V2DF)
@@ -1046,6 +1051,8 @@ B_DEF (vec_all_gev4si, vec_all_gev4si, 0,
B_DEF (vec_all_geuv4si, vec_all_geuv4si, 0, B_INT | B_VX, 0, BT_FN_INT_UV4SI_UV4SI)
B_DEF (vec_all_gev2di, vec_all_gev2di, 0, B_INT | B_VX, 0, BT_FN_INT_V2DI_V2DI)
B_DEF (vec_all_geuv2di, vec_all_geuv2di, 0, B_INT | B_VX, 0, BT_FN_INT_UV2DI_UV2DI)
+B_DEF (vec_all_geti, vec_all_geti, 0, B_INT | B_VXE3, 0, BT_FN_INT_INT128_INT128)
+B_DEF (vec_all_geuti, vec_all_geuti, 0, B_INT | B_VXE3, 0, BT_FN_INT_UINT128_UINT128)
B_DEF (vec_all_gev4sf, vec_all_gev4sf, 0, B_INT | B_VXE, 0, BT_FN_INT_V4SF_V4SF)
B_DEF (vec_all_gev2df, vec_all_gev2df, 0, B_INT | B_VX, 0, BT_FN_INT_V2DF_V2DF)
@@ -1057,6 +1064,8 @@ B_DEF (vec_all_gtv4si, vec_all_gtv4si, 0,
B_DEF (vec_all_gtuv4si, vec_all_gtuv4si, 0, B_INT | B_VX, 0, BT_FN_INT_UV4SI_UV4SI)
B_DEF (vec_all_gtv2di, vec_all_gtv2di, 0, B_INT | B_VX, 0, BT_FN_INT_V2DI_V2DI)
B_DEF (vec_all_gtuv2di, vec_all_gtuv2di, 0, B_INT | B_VX, 0, BT_FN_INT_UV2DI_UV2DI)
+B_DEF (vec_all_gtti, vec_all_gtti, 0, B_INT | B_VXE3, 0, BT_FN_INT_INT128_INT128)
+B_DEF (vec_all_gtuti, vec_all_gtuti, 0, B_INT | B_VXE3, 0, BT_FN_INT_UINT128_UINT128)
B_DEF (vec_all_gtv4sf, vec_all_gtv4sf, 0, B_INT | B_VXE, 0, BT_FN_INT_V4SF_V4SF)
B_DEF (vec_all_gtv2df, vec_all_gtv2df, 0, B_INT | B_VX, 0, BT_FN_INT_V2DF_V2DF)
@@ -1068,6 +1077,8 @@ B_DEF (vec_all_lev4si, vec_all_lev4si, 0,
B_DEF (vec_all_leuv4si, vec_all_leuv4si, 0, B_INT | B_VX, 0, BT_FN_INT_UV4SI_UV4SI)
B_DEF (vec_all_lev2di, vec_all_lev2di, 0, B_INT | B_VX, 0, BT_FN_INT_V2DI_V2DI)
B_DEF (vec_all_leuv2di, vec_all_leuv2di, 0, B_INT | B_VX, 0, BT_FN_INT_UV2DI_UV2DI)
+B_DEF (vec_all_leti, vec_all_leti, 0, B_INT | B_VXE3, 0, BT_FN_INT_INT128_INT128)
+B_DEF (vec_all_leuti, vec_all_leuti, 0, B_INT | B_VXE3, 0, BT_FN_INT_UINT128_UINT128)
B_DEF (vec_all_lev4sf, vec_all_lev4sf, 0, B_INT | B_VXE, 0, BT_FN_INT_V4SF_V4SF)
B_DEF (vec_all_lev2df, vec_all_lev2df, 0, B_INT | B_VX, 0, BT_FN_INT_V2DF_V2DF)
@@ -1079,6 +1090,8 @@ B_DEF (vec_all_ltv4si, vec_all_ltv4si, 0,
B_DEF (vec_all_ltuv4si, vec_all_ltuv4si, 0, B_INT | B_VX, 0, BT_FN_INT_UV4SI_UV4SI)
B_DEF (vec_all_ltv2di, vec_all_ltv2di, 0, B_INT | B_VX, 0, BT_FN_INT_V2DI_V2DI)
B_DEF (vec_all_ltuv2di, vec_all_ltuv2di, 0, B_INT | B_VX, 0, BT_FN_INT_UV2DI_UV2DI)
+B_DEF (vec_all_ltti, vec_all_ltti, 0, B_INT | B_VXE3, 0, BT_FN_INT_INT128_INT128)
+B_DEF (vec_all_ltuti, vec_all_ltuti, 0, B_INT | B_VXE3, 0, BT_FN_INT_UINT128_UINT128)
B_DEF (vec_all_ltv4sf, vec_all_ltv4sf, 0, B_INT | B_VXE, 0, BT_FN_INT_V4SF_V4SF)
B_DEF (vec_all_ltv2df, vec_all_ltv2df, 0, B_INT | B_VX, 0, BT_FN_INT_V2DF_V2DF)
@@ -1111,6 +1124,9 @@ OB_DEF_VAR (s390_vec_all_eq_b64_b, vec_all_eqv2di, B_DEP,
OB_DEF_VAR (s390_vec_all_eq_b64_c, vec_all_eqv2di, B_DEP, 0, BT_OV_INT_BV2DI_UV2DI)
OB_DEF_VAR (s390_vec_all_eq_u64_a, vec_all_eqv2di, 0, 0, BT_OV_INT_UV2DI_UV2DI)
OB_DEF_VAR (s390_vec_all_eq_u64_b, vec_all_eqv2di, B_DEP, 0, BT_OV_INT_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_all_eq_s128, vec_all_eqti, B_VXE3, 0, BT_OV_INT_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_all_eq_b128, vec_all_eqti, B_VXE3, 0, BT_OV_INT_BV1TI_BV1TI)
+OB_DEF_VAR (s390_vec_all_eq_u128, vec_all_eqti, B_VXE3, 0, BT_OV_INT_UV1TI_UV1TI)
OB_DEF_VAR (s390_vec_all_eq_flt, vec_all_eqv4sf, B_VXE, 0, BT_OV_INT_V4SF_V4SF)
OB_DEF_VAR (s390_vec_all_eq_dbl, vec_all_eqv2df, 0, 0, BT_OV_INT_V2DF_V2DF)
@@ -1143,6 +1159,9 @@ OB_DEF_VAR (s390_vec_all_ne_b64_b, vec_all_nev2di, B_DEP,
OB_DEF_VAR (s390_vec_all_ne_b64_c, vec_all_nev2di, B_DEP, 0, BT_OV_INT_BV2DI_UV2DI)
OB_DEF_VAR (s390_vec_all_ne_u64_a, vec_all_nev2di, 0, 0, BT_OV_INT_UV2DI_UV2DI)
OB_DEF_VAR (s390_vec_all_ne_u64_b, vec_all_nev2di, B_DEP, 0, BT_OV_INT_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_all_ne_s128, vec_all_neti, B_VXE3, 0, BT_OV_INT_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_all_ne_b128, vec_all_neti, B_VXE3, 0, BT_OV_INT_BV1TI_BV1TI)
+OB_DEF_VAR (s390_vec_all_ne_u128, vec_all_neti, B_VXE3, 0, BT_OV_INT_UV1TI_UV1TI)
OB_DEF_VAR (s390_vec_all_ne_flt, vec_all_nev4sf, B_VXE, 0, BT_OV_INT_V4SF_V4SF)
OB_DEF_VAR (s390_vec_all_ne_dbl, vec_all_nev2df, 0, 0, BT_OV_INT_V2DF_V2DF)
@@ -1175,6 +1194,8 @@ OB_DEF_VAR (s390_vec_all_ge_b64_b, vec_all_gev2di, B_DEP,
OB_DEF_VAR (s390_vec_all_ge_b64_c, vec_all_geuv2di, B_DEP, 0, BT_OV_INT_BV2DI_UV2DI)
OB_DEF_VAR (s390_vec_all_ge_u64_a, vec_all_geuv2di, 0, 0, BT_OV_INT_UV2DI_UV2DI)
OB_DEF_VAR (s390_vec_all_ge_u64_b, vec_all_geuv2di, B_DEP, 0, BT_OV_INT_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_all_ge_s128, vec_all_geti, B_VXE3, 0, BT_OV_INT_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_all_ge_u128, vec_all_geuti, B_VXE3, 0, BT_OV_INT_UV1TI_UV1TI)
OB_DEF_VAR (s390_vec_all_ge_flt, vec_all_gev4sf, B_VXE, 0, BT_OV_INT_V4SF_V4SF)
OB_DEF_VAR (s390_vec_all_ge_dbl, vec_all_gev2df, 0, 0, BT_OV_INT_V2DF_V2DF)
@@ -1207,6 +1228,8 @@ OB_DEF_VAR (s390_vec_all_gt_b64_b, vec_all_gtv2di, B_DEP,
OB_DEF_VAR (s390_vec_all_gt_b64_c, vec_all_gtuv2di, B_DEP, 0, BT_OV_INT_BV2DI_UV2DI)
OB_DEF_VAR (s390_vec_all_gt_u64_a, vec_all_gtuv2di, 0, 0, BT_OV_INT_UV2DI_UV2DI)
OB_DEF_VAR (s390_vec_all_gt_u64_b, vec_all_gtuv2di, B_DEP, 0, BT_OV_INT_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_all_gt_s128, vec_all_gtti, B_VXE3, 0, BT_OV_INT_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_all_gt_u128, vec_all_gtuti, B_VXE3, 0, BT_OV_INT_UV1TI_UV1TI)
OB_DEF_VAR (s390_vec_all_gt_flt, vec_all_gtv4sf, B_VXE, 0, BT_OV_INT_V4SF_V4SF)
OB_DEF_VAR (s390_vec_all_gt_dbl, vec_all_gtv2df, 0, 0, BT_OV_INT_V2DF_V2DF)
@@ -1239,6 +1262,8 @@ OB_DEF_VAR (s390_vec_all_le_b64_b, vec_all_lev2di, B_DEP,
OB_DEF_VAR (s390_vec_all_le_b64_c, vec_all_leuv2di, B_DEP, 0, BT_OV_INT_BV2DI_UV2DI)
OB_DEF_VAR (s390_vec_all_le_u64_a, vec_all_leuv2di, 0, 0, BT_OV_INT_UV2DI_UV2DI)
OB_DEF_VAR (s390_vec_all_le_u64_b, vec_all_leuv2di, B_DEP, 0, BT_OV_INT_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_all_le_s128, vec_all_leti, B_VXE3, 0, BT_OV_INT_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_all_le_u128, vec_all_leuti, B_VXE3, 0, BT_OV_INT_UV1TI_UV1TI)
OB_DEF_VAR (s390_vec_all_le_flt, vec_all_lev4sf, B_VXE, 0, BT_OV_INT_V4SF_V4SF)
OB_DEF_VAR (s390_vec_all_le_dbl, vec_all_lev2df, 0, 0, BT_OV_INT_V2DF_V2DF)
@@ -1271,6 +1296,8 @@ OB_DEF_VAR (s390_vec_all_lt_b64_b, vec_all_ltv2di, B_DEP,
OB_DEF_VAR (s390_vec_all_lt_b64_c, vec_all_ltuv2di, B_DEP, 0, BT_OV_INT_BV2DI_UV2DI)
OB_DEF_VAR (s390_vec_all_lt_u64_a, vec_all_ltuv2di, 0, 0, BT_OV_INT_UV2DI_UV2DI)
OB_DEF_VAR (s390_vec_all_lt_u64_b, vec_all_ltuv2di, B_DEP, 0, BT_OV_INT_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_all_lt_s128, vec_all_ltti, B_VXE3, 0, BT_OV_INT_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_all_lt_u128, vec_all_ltuti, B_VXE3, 0, BT_OV_INT_UV1TI_UV1TI)
OB_DEF_VAR (s390_vec_all_lt_flt, vec_all_ltv4sf, B_VXE, 0, BT_OV_INT_V4SF_V4SF)
OB_DEF_VAR (s390_vec_all_lt_dbl, vec_all_ltv2df, 0, 0, BT_OV_INT_V2DF_V2DF)
@@ -1278,6 +1305,7 @@ B_DEF (vec_any_eqv16qi, vec_any_eqv16qi, 0,
B_DEF (vec_any_eqv8hi, vec_any_eqv8hi, 0, B_INT | B_VX, 0, BT_FN_INT_UV8HI_UV8HI)
B_DEF (vec_any_eqv4si, vec_any_eqv4si, 0, B_INT | B_VX, 0, BT_FN_INT_UV4SI_UV4SI)
B_DEF (vec_any_eqv2di, vec_any_eqv2di, 0, B_INT | B_VX, 0, BT_FN_INT_UV2DI_UV2DI)
+B_DEF (vec_any_eqti, vec_any_eqti, 0, B_INT | B_VXE3, 0, BT_FN_INT_UINT128_UINT128)
B_DEF (vec_any_eqv4sf, vec_any_eqv4sf, 0, B_INT | B_VXE, 0, BT_FN_INT_V4SF_V4SF)
B_DEF (vec_any_eqv2df, vec_any_eqv2df, 0, B_INT | B_VX, 0, BT_FN_INT_V2DF_V2DF)
@@ -1285,6 +1313,7 @@ B_DEF (vec_any_nev16qi, vec_any_nev16qi, 0,
B_DEF (vec_any_nev8hi, vec_any_nev8hi, 0, B_INT | B_VX, 0, BT_FN_INT_UV8HI_UV8HI)
B_DEF (vec_any_nev4si, vec_any_nev4si, 0, B_INT | B_VX, 0, BT_FN_INT_UV4SI_UV4SI)
B_DEF (vec_any_nev2di, vec_any_nev2di, 0, B_INT | B_VX, 0, BT_FN_INT_UV2DI_UV2DI)
+B_DEF (vec_any_neti, vec_any_neti, 0, B_INT | B_VXE3, 0, BT_FN_INT_UINT128_UINT128)
B_DEF (vec_any_nev4sf, vec_any_nev4sf, 0, B_INT | B_VXE, 0, BT_FN_INT_V4SF_V4SF)
B_DEF (vec_any_nev2df, vec_any_nev2df, 0, B_INT | B_VX, 0, BT_FN_INT_V2DF_V2DF)
@@ -1296,6 +1325,8 @@ B_DEF (vec_any_gev4si, vec_any_gev4si, 0,
B_DEF (vec_any_geuv4si, vec_any_geuv4si, 0, B_INT | B_VX, 0, BT_FN_INT_UV4SI_UV4SI)
B_DEF (vec_any_gev2di, vec_any_gev2di, 0, B_INT | B_VX, 0, BT_FN_INT_V2DI_V2DI)
B_DEF (vec_any_geuv2di, vec_any_geuv2di, 0, B_INT | B_VX, 0, BT_FN_INT_UV2DI_UV2DI)
+B_DEF (vec_any_geti, vec_any_geti, 0, B_INT | B_VXE3, 0, BT_FN_INT_INT128_INT128)
+B_DEF (vec_any_geuti, vec_any_geuti, 0, B_INT | B_VXE3, 0, BT_FN_INT_UINT128_UINT128)
B_DEF (vec_any_gev4sf, vec_any_gev4sf, 0, B_INT | B_VXE, 0, BT_FN_INT_V4SF_V4SF)
B_DEF (vec_any_gev2df, vec_any_gev2df, 0, B_INT | B_VX, 0, BT_FN_INT_V2DF_V2DF)
@@ -1307,6 +1338,8 @@ B_DEF (vec_any_gtv4si, vec_any_gtv4si, 0,
B_DEF (vec_any_gtuv4si, vec_any_gtuv4si, 0, B_INT | B_VX, 0, BT_FN_INT_UV4SI_UV4SI)
B_DEF (vec_any_gtv2di, vec_any_gtv2di, 0, B_INT | B_VX, 0, BT_FN_INT_V2DI_V2DI)
B_DEF (vec_any_gtuv2di, vec_any_gtuv2di, 0, B_INT | B_VX, 0, BT_FN_INT_UV2DI_UV2DI)
+B_DEF (vec_any_gtti, vec_any_gtti, 0, B_INT | B_VXE3, 0, BT_FN_INT_INT128_INT128)
+B_DEF (vec_any_gtuti, vec_any_gtuti, 0, B_INT | B_VXE3, 0, BT_FN_INT_UINT128_UINT128)
B_DEF (vec_any_gtv4sf, vec_any_gtv4sf, 0, B_INT | B_VXE, 0, BT_FN_INT_V4SF_V4SF)
B_DEF (vec_any_gtv2df, vec_any_gtv2df, 0, B_INT | B_VX, 0, BT_FN_INT_V2DF_V2DF)
@@ -1318,6 +1351,8 @@ B_DEF (vec_any_lev4si, vec_any_lev4si, 0,
B_DEF (vec_any_leuv4si, vec_any_leuv4si, 0, B_INT | B_VX, 0, BT_FN_INT_UV4SI_UV4SI)
B_DEF (vec_any_lev2di, vec_any_lev2di, 0, B_INT | B_VX, 0, BT_FN_INT_V2DI_V2DI)
B_DEF (vec_any_leuv2di, vec_any_leuv2di, 0, B_INT | B_VX, 0, BT_FN_INT_UV2DI_UV2DI)
+B_DEF (vec_any_leti, vec_any_leti, 0, B_INT | B_VXE3, 0, BT_FN_INT_INT128_INT128)
+B_DEF (vec_any_leuti, vec_any_leuti, 0, B_INT | B_VXE3, 0, BT_FN_INT_UINT128_UINT128)
B_DEF (vec_any_lev4sf, vec_any_lev4sf, 0, B_INT | B_VXE, 0, BT_FN_INT_V4SF_V4SF)
B_DEF (vec_any_lev2df, vec_any_lev2df, 0, B_INT | B_VX, 0, BT_FN_INT_V2DF_V2DF)
@@ -1329,6 +1364,8 @@ B_DEF (vec_any_ltv4si, vec_any_ltv4si, 0,
B_DEF (vec_any_ltuv4si, vec_any_ltuv4si, 0, B_INT | B_VX, 0, BT_FN_INT_UV4SI_UV4SI)
B_DEF (vec_any_ltv2di, vec_any_ltv2di, 0, B_INT | B_VX, 0, BT_FN_INT_V2DI_V2DI)
B_DEF (vec_any_ltuv2di, vec_any_ltuv2di, 0, B_INT | B_VX, 0, BT_FN_INT_UV2DI_UV2DI)
+B_DEF (vec_any_ltti, vec_any_ltti, 0, B_INT | B_VXE3, 0, BT_FN_INT_INT128_INT128)
+B_DEF (vec_any_ltuti, vec_any_ltuti, 0, B_INT | B_VXE3, 0, BT_FN_INT_UINT128_UINT128)
B_DEF (vec_any_ltv4sf, vec_any_ltv4sf, 0, B_INT | B_VXE, 0, BT_FN_INT_V4SF_V4SF)
B_DEF (vec_any_ltv2df, vec_any_ltv2df, 0, B_INT | B_VX, 0, BT_FN_INT_V2DF_V2DF)
@@ -1361,6 +1398,9 @@ OB_DEF_VAR (s390_vec_any_eq_b64_b, vec_any_eqv2di, B_DEP,
OB_DEF_VAR (s390_vec_any_eq_b64_c, vec_any_eqv2di, B_DEP, 0, BT_OV_INT_BV2DI_UV2DI)
OB_DEF_VAR (s390_vec_any_eq_u64_a, vec_any_eqv2di, 0, 0, BT_OV_INT_UV2DI_UV2DI)
OB_DEF_VAR (s390_vec_any_eq_u64_b, vec_any_eqv2di, B_DEP, 0, BT_OV_INT_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_any_eq_s128, vec_any_eqti, B_VXE3, 0, BT_OV_INT_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_any_eq_b128, vec_any_eqti, B_VXE3, 0, BT_OV_INT_BV1TI_BV1TI)
+OB_DEF_VAR (s390_vec_any_eq_u128, vec_any_eqti, B_VXE3, 0, BT_OV_INT_UV1TI_UV1TI)
OB_DEF_VAR (s390_vec_any_eq_flt, vec_any_eqv4sf, B_VXE, 0, BT_OV_INT_V4SF_V4SF)
OB_DEF_VAR (s390_vec_any_eq_dbl, vec_any_eqv2df, 0, 0, BT_OV_INT_V2DF_V2DF)
@@ -1393,6 +1433,9 @@ OB_DEF_VAR (s390_vec_any_ne_b64_b, vec_any_nev2di, B_DEP,
OB_DEF_VAR (s390_vec_any_ne_b64_c, vec_any_nev2di, B_DEP, 0, BT_OV_INT_BV2DI_UV2DI)
OB_DEF_VAR (s390_vec_any_ne_u64_a, vec_any_nev2di, 0, 0, BT_OV_INT_UV2DI_UV2DI)
OB_DEF_VAR (s390_vec_any_ne_u64_b, vec_any_nev2di, B_DEP, 0, BT_OV_INT_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_any_ne_s128, vec_any_neti, B_VXE3, 0, BT_OV_INT_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_any_ne_b128, vec_any_neti, B_VXE3, 0, BT_OV_INT_BV1TI_BV1TI)
+OB_DEF_VAR (s390_vec_any_ne_u128, vec_any_neti, B_VXE3, 0, BT_OV_INT_UV1TI_UV1TI)
OB_DEF_VAR (s390_vec_any_ne_flt, vec_any_nev4sf, B_VXE, 0, BT_OV_INT_V4SF_V4SF)
OB_DEF_VAR (s390_vec_any_ne_dbl, vec_any_nev2df, 0, 0, BT_OV_INT_V2DF_V2DF)
@@ -1425,6 +1468,8 @@ OB_DEF_VAR (s390_vec_any_ge_b64_b, vec_any_gev2di, B_DEP,
OB_DEF_VAR (s390_vec_any_ge_b64_c, vec_any_geuv2di, B_DEP, 0, BT_OV_INT_BV2DI_UV2DI)
OB_DEF_VAR (s390_vec_any_ge_u64_a, vec_any_geuv2di, 0, 0, BT_OV_INT_UV2DI_UV2DI)
OB_DEF_VAR (s390_vec_any_ge_u64_b, vec_any_geuv2di, B_DEP, 0, BT_OV_INT_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_any_ge_s128, vec_any_geti, B_VXE3, 0, BT_OV_INT_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_any_ge_u128, vec_any_geuti, B_VXE3, 0, BT_OV_INT_UV1TI_UV1TI)
OB_DEF_VAR (s390_vec_any_ge_flt, vec_any_gev4sf, B_VXE, 0, BT_OV_INT_V4SF_V4SF)
OB_DEF_VAR (s390_vec_any_ge_dbl, vec_any_gev2df, 0, 0, BT_OV_INT_V2DF_V2DF)
@@ -1457,6 +1502,8 @@ OB_DEF_VAR (s390_vec_any_gt_b64_b, vec_any_gtv2di, B_DEP,
OB_DEF_VAR (s390_vec_any_gt_b64_c, vec_any_gtuv2di, B_DEP, 0, BT_OV_INT_BV2DI_UV2DI)
OB_DEF_VAR (s390_vec_any_gt_u64_a, vec_any_gtuv2di, 0, 0, BT_OV_INT_UV2DI_UV2DI)
OB_DEF_VAR (s390_vec_any_gt_u64_b, vec_any_gtuv2di, B_DEP, 0, BT_OV_INT_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_any_gt_s128, vec_any_gtti, B_VXE3, 0, BT_OV_INT_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_any_gt_u128, vec_any_gtuti, B_VXE3, 0, BT_OV_INT_UV1TI_UV1TI)
OB_DEF_VAR (s390_vec_any_gt_flt, vec_any_gtv4sf, B_VXE, 0, BT_OV_INT_V4SF_V4SF)
OB_DEF_VAR (s390_vec_any_gt_dbl, vec_any_gtv2df, 0, 0, BT_OV_INT_V2DF_V2DF)
@@ -1489,6 +1536,8 @@ OB_DEF_VAR (s390_vec_any_le_b64_b, vec_any_lev2di, B_DEP,
OB_DEF_VAR (s390_vec_any_le_b64_c, vec_any_leuv2di, B_DEP, 0, BT_OV_INT_BV2DI_UV2DI)
OB_DEF_VAR (s390_vec_any_le_u64_a, vec_any_leuv2di, 0, 0, BT_OV_INT_UV2DI_UV2DI)
OB_DEF_VAR (s390_vec_any_le_u64_b, vec_any_leuv2di, B_DEP, 0, BT_OV_INT_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_any_le_s128, vec_any_leti, B_VXE3, 0, BT_OV_INT_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_any_le_u128, vec_any_leuti, B_VXE3, 0, BT_OV_INT_UV1TI_UV1TI)
OB_DEF_VAR (s390_vec_any_le_flt, vec_any_lev4sf, B_VXE, 0, BT_OV_INT_V4SF_V4SF)
OB_DEF_VAR (s390_vec_any_le_dbl, vec_any_lev2df, 0, 0, BT_OV_INT_V2DF_V2DF)
@@ -1521,6 +1570,8 @@ OB_DEF_VAR (s390_vec_any_lt_b64_b, vec_any_ltv2di, B_DEP,
OB_DEF_VAR (s390_vec_any_lt_b64_c, vec_any_ltuv2di, B_DEP, 0, BT_OV_INT_BV2DI_UV2DI)
OB_DEF_VAR (s390_vec_any_lt_u64_a, vec_any_ltuv2di, 0, 0, BT_OV_INT_UV2DI_UV2DI)
OB_DEF_VAR (s390_vec_any_lt_u64_b, vec_any_ltuv2di, B_DEP, 0, BT_OV_INT_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_any_lt_s128, vec_any_ltti, B_VXE3, 0, BT_OV_INT_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_any_lt_u128, vec_any_ltuti, B_VXE3, 0, BT_OV_INT_UV1TI_UV1TI)
OB_DEF_VAR (s390_vec_any_lt_flt, vec_any_ltv4sf, B_VXE, 0, BT_OV_INT_V4SF_V4SF)
OB_DEF_VAR (s390_vec_any_lt_dbl, vec_any_ltv2df, 0, 0, BT_OV_INT_V2DF_V2DF)
@@ -1537,6 +1588,9 @@ OB_DEF_VAR (s390_vec_cmpeq_b32, s390_vceqf, 0,
OB_DEF_VAR (s390_vec_cmpeq_s64, s390_vceqg, 0, 0, BT_OV_BV2DI_V2DI_V2DI)
OB_DEF_VAR (s390_vec_cmpeq_u64, s390_vceqg, 0, 0, BT_OV_BV2DI_UV2DI_UV2DI)
OB_DEF_VAR (s390_vec_cmpeq_b64, s390_vceqg, 0, 0, BT_OV_BV2DI_BV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_cmpeq_s128, s390_vceqq, 0, 0, BT_OV_BV1TI_V1TI_V1TI) /* NOGEN */
+OB_DEF_VAR (s390_vec_cmpeq_u128, s390_vceqq, 0, 0, BT_OV_BV1TI_UV1TI_UV1TI) /* NOGEN */
+OB_DEF_VAR (s390_vec_cmpeq_b128, s390_vceqq, 0, 0, BT_OV_BV1TI_BV1TI_BV1TI) /* NOGEN */
OB_DEF_VAR (s390_vec_cmpeq_flt, s390_vfcesb, B_VXE, 0, BT_OV_BV4SI_V4SF_V4SF)
OB_DEF_VAR (s390_vec_cmpeq_dbl, s390_vfcedb, 0, 0, BT_OV_BV2DI_V2DF_V2DF)
@@ -1544,6 +1598,7 @@ B_DEF (s390_vceqb, vec_cmpeqv16qi, 0,
B_DEF (s390_vceqh, vec_cmpeqv8hi, 0, B_VX, 0, BT_FN_V8HI_UV8HI_UV8HI)
B_DEF (s390_vceqf, vec_cmpeqv4si, 0, B_VX, 0, BT_FN_V4SI_UV4SI_UV4SI)
B_DEF (s390_vceqg, vec_cmpeqv2di, 0, B_VX, 0, BT_FN_V2DI_UV2DI_UV2DI)
+B_DEF (s390_vceqq, vec_cmpeqti, 0, B_VX, 0, BT_FN_INT128_UINT128_UINT128)
B_DEF (s390_vfcesb, vec_cmpeqv4sf, 0, B_VXE, 0, BT_FN_V4SI_V4SF_V4SF)
B_DEF (s390_vfcedb, vec_cmpeqv2df, 0, B_VX, 0, BT_FN_V2DI_V2DF_V2DF)
@@ -1556,6 +1611,8 @@ OB_DEF_VAR (s390_vec_cmpge_s32, vec_cmpgev4si, 0,
OB_DEF_VAR (s390_vec_cmpge_u32, vec_cmpgeuv4si, 0, 0, BT_OV_BV4SI_UV4SI_UV4SI)
OB_DEF_VAR (s390_vec_cmpge_s64, vec_cmpgev2di, 0, 0, BT_OV_BV2DI_V2DI_V2DI)
OB_DEF_VAR (s390_vec_cmpge_u64, vec_cmpgeuv2di, 0, 0, BT_OV_BV2DI_UV2DI_UV2DI)
+OB_DEF_VAR (s390_vec_cmpge_s128, vec_cmpgeti, 0, 0, BT_OV_BV1TI_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_cmpge_u128, vec_cmpgeuti, 0, 0, BT_OV_BV1TI_UV1TI_UV1TI)
OB_DEF_VAR (s390_vec_cmpge_flt, s390_vfchesb, B_VXE, 0, BT_OV_BV4SI_V4SF_V4SF)
OB_DEF_VAR (s390_vec_cmpge_dbl, s390_vfchedb, 0, 0, BT_OV_BV2DI_V2DF_V2DF)
@@ -1567,6 +1624,8 @@ B_DEF (vec_cmpgev4si, vec_cmpgev4si, 0,
B_DEF (vec_cmpgeuv4si, vec_cmpgeuv4si, 0, B_INT | B_VX, 0, BT_FN_V4SI_UV4SI_UV4SI)
B_DEF (vec_cmpgev2di, vec_cmpgev2di, 0, B_INT | B_VX, 0, BT_FN_V2DI_UV2DI_UV2DI)
B_DEF (vec_cmpgeuv2di, vec_cmpgeuv2di, 0, B_INT | B_VX, 0, BT_FN_V2DI_UV2DI_UV2DI)
+B_DEF (vec_cmpgeti, vec_cmpgeti, 0, B_INT | B_VX, 0, BT_FN_INT128_UINT128_UINT128)
+B_DEF (vec_cmpgeuti, vec_cmpgeuti, 0, B_INT | B_VX, 0, BT_FN_INT128_UINT128_UINT128)
B_DEF (s390_vfchesb, vec_cmpgev4sf_quiet_nocc,0, B_VXE, 0, BT_FN_V4SI_V4SF_V4SF)
B_DEF (s390_vfchedb, vec_cmpgev2df_quiet_nocc,0, B_VX, 0, BT_FN_V2DI_V2DF_V2DF)
@@ -1579,6 +1638,8 @@ OB_DEF_VAR (s390_vec_cmpgt_s32, s390_vchf, 0,
OB_DEF_VAR (s390_vec_cmpgt_u32, s390_vchlf, 0, 0, BT_OV_BV4SI_UV4SI_UV4SI)
OB_DEF_VAR (s390_vec_cmpgt_s64, s390_vchg, 0, 0, BT_OV_BV2DI_V2DI_V2DI)
OB_DEF_VAR (s390_vec_cmpgt_u64, s390_vchlg, 0, 0, BT_OV_BV2DI_UV2DI_UV2DI)
+OB_DEF_VAR (s390_vec_cmpgt_s128, s390_vchq, 0, 0, BT_OV_BV1TI_V1TI_V1TI) /* NOGEN */
+OB_DEF_VAR (s390_vec_cmpgt_u128, s390_vchlq, 0, 0, BT_OV_BV1TI_UV1TI_UV1TI) /* NOGEN */
OB_DEF_VAR (s390_vec_cmpgt_flt, s390_vfchsb, B_VXE, 0, BT_OV_BV4SI_V4SF_V4SF)
OB_DEF_VAR (s390_vec_cmpgt_dbl, s390_vfchdb, 0, 0, BT_OV_BV2DI_V2DF_V2DF)
@@ -1590,6 +1651,8 @@ B_DEF (s390_vchf, vec_cmpgtv4si, 0,
B_DEF (s390_vchlf, vec_cmpgtuv4si, 0, B_VX, 0, BT_FN_V4SI_UV4SI_UV4SI)
B_DEF (s390_vchg, vec_cmpgtv2di, 0, B_VX, 0, BT_FN_V2DI_V2DI_V2DI)
B_DEF (s390_vchlg, vec_cmpgtuv2di, 0, B_VX, 0, BT_FN_V2DI_UV2DI_UV2DI)
+B_DEF (s390_vchq, vec_cmpgtti, 0, B_VX, 0, BT_FN_INT128_INT128_INT128)
+B_DEF (s390_vchlq, vec_cmpgtuti, 0, B_VX, 0, BT_FN_INT128_UINT128_UINT128)
B_DEF (s390_vfchsb, vec_cmpgtv4sf_quiet_nocc,0, B_VXE, 0, BT_FN_V4SI_V4SF_V4SF)
B_DEF (s390_vfchdb, vec_cmpgtv2df_quiet_nocc,0, B_VX, 0, BT_FN_V2DI_V2DF_V2DF)
@@ -1602,6 +1665,8 @@ OB_DEF_VAR (s390_vec_cmple_s32, vec_cmplev4si, 0,
OB_DEF_VAR (s390_vec_cmple_u32, vec_cmpleuv4si, 0, 0, BT_OV_BV4SI_UV4SI_UV4SI)
OB_DEF_VAR (s390_vec_cmple_s64, vec_cmplev2di, 0, 0, BT_OV_BV2DI_V2DI_V2DI)
OB_DEF_VAR (s390_vec_cmple_u64, vec_cmpleuv2di, 0, 0, BT_OV_BV2DI_UV2DI_UV2DI)
+OB_DEF_VAR (s390_vec_cmple_s128, vec_cmpleti, 0, 0, BT_OV_BV1TI_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_cmple_u128, vec_cmpleuti, 0, 0, BT_OV_BV1TI_UV1TI_UV1TI)
OB_DEF_VAR (s390_vec_cmple_flt, vec_cmplev4sf, B_VXE, 0, BT_OV_BV4SI_V4SF_V4SF)
OB_DEF_VAR (s390_vec_cmple_dbl, vec_cmplev2df, 0, 0, BT_OV_BV2DI_V2DF_V2DF)
@@ -1613,6 +1678,8 @@ B_DEF (vec_cmplev4si, vec_cmplev4si, 0,
B_DEF (vec_cmpleuv4si, vec_cmpleuv4si, 0, B_INT | B_VX, 0, BT_FN_V4SI_UV4SI_UV4SI)
B_DEF (vec_cmplev2di, vec_cmplev2di, 0, B_INT | B_VX, 0, BT_FN_V2DI_UV2DI_UV2DI)
B_DEF (vec_cmpleuv2di, vec_cmpleuv2di, 0, B_INT | B_VX, 0, BT_FN_V2DI_UV2DI_UV2DI)
+B_DEF (vec_cmpleti, vec_cmpleti, 0, B_INT | B_VX, 0, BT_FN_INT128_UINT128_UINT128)
+B_DEF (vec_cmpleuti, vec_cmpleuti, 0, B_INT | B_VX, 0, BT_FN_INT128_UINT128_UINT128)
B_DEF (vec_cmplev4sf, vec_cmplev4sf_quiet_nocc,0, B_INT | B_VXE, 0, BT_FN_V4SI_V4SF_V4SF)
B_DEF (vec_cmplev2df, vec_cmplev2df_quiet_nocc,0, B_INT | B_VX, 0, BT_FN_V2DI_V2DF_V2DF)
@@ -1625,6 +1692,8 @@ OB_DEF_VAR (s390_vec_cmplt_s32, vec_cmpltv4si, 0,
OB_DEF_VAR (s390_vec_cmplt_u32, vec_cmpltuv4si, 0, 0, BT_OV_BV4SI_UV4SI_UV4SI)
OB_DEF_VAR (s390_vec_cmplt_s64, vec_cmpltv2di, 0, 0, BT_OV_BV2DI_V2DI_V2DI)
OB_DEF_VAR (s390_vec_cmplt_u64, vec_cmpltuv2di, 0, 0, BT_OV_BV2DI_UV2DI_UV2DI)
+OB_DEF_VAR (s390_vec_cmplt_s128, vec_cmpltti, 0, 0, BT_OV_BV1TI_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_cmplt_u128, vec_cmpltuti, 0, 0, BT_OV_BV1TI_UV1TI_UV1TI)
OB_DEF_VAR (s390_vec_cmplt_flt, vec_cmpltv4sf, B_VXE, 0, BT_OV_BV4SI_V4SF_V4SF)
OB_DEF_VAR (s390_vec_cmplt_dbl, vec_cmpltv2df, 0, 0, BT_OV_BV2DI_V2DF_V2DF)
@@ -1636,6 +1705,8 @@ B_DEF (vec_cmpltv4si, vec_cmpltv4si, 0,
B_DEF (vec_cmpltuv4si, vec_cmpltuv4si, 0, B_INT | B_VX, 0, BT_FN_V4SI_UV4SI_UV4SI)
B_DEF (vec_cmpltv2di, vec_cmpltv2di, 0, B_INT | B_VX, 0, BT_FN_V2DI_UV2DI_UV2DI)
B_DEF (vec_cmpltuv2di, vec_cmpltuv2di, 0, B_INT | B_VX, 0, BT_FN_V2DI_UV2DI_UV2DI)
+B_DEF (vec_cmpltti, vec_cmpltti, 0, B_INT | B_VX, 0, BT_FN_INT128_UINT128_UINT128)
+B_DEF (vec_cmpltuti, vec_cmpltuti, 0, B_INT | B_VX, 0, BT_FN_INT128_UINT128_UINT128)
B_DEF (vec_cmpltv4sf, vec_cmpltv4sf_quiet_nocc,0, B_INT | B_VXE, 0, BT_FN_V4SI_V4SF_V4SF)
B_DEF (vec_cmpltv2df, vec_cmpltv2df_quiet_nocc,0, B_INT | B_VX, 0, BT_FN_V2DI_V2DF_V2DF)
diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc
index f3b0061..313f968 100644
--- a/gcc/config/s390/s390.cc
+++ b/gcc/config/s390/s390.cc
@@ -7296,7 +7296,8 @@ s390_expand_vec_compare_cc (rtx target, enum rtx_code code,
rtx tmp_reg = gen_reg_rtx (SImode);
bool swap_p = false;
- if (GET_MODE_CLASS (GET_MODE (cmp1)) == MODE_VECTOR_INT)
+ if (GET_MODE_CLASS (GET_MODE (cmp1)) == MODE_VECTOR_INT
+ || GET_MODE (cmp1) == TImode)
{
switch (code)
{
diff --git a/gcc/config/s390/vector.md b/gcc/config/s390/vector.md
index 606c682..57a9d20 100644
--- a/gcc/config/s390/vector.md
+++ b/gcc/config/s390/vector.md
@@ -66,6 +66,7 @@
; All integer vector modes supported in a vector register + TImode
(define_mode_iterator VIT [V1QI V2QI V4QI V8QI V16QI V1HI V2HI V4HI V8HI V1SI V2SI V4SI V1DI V2DI V1TI TI])
+(define_mode_iterator VIT_VXE3 [V1QI V2QI V4QI V8QI V16QI V1HI V2HI V4HI V8HI V1SI V2SI V4SI V1DI V2DI (V1TI "TARGET_VXE3") (TI "TARGET_VXE3")])
(define_mode_iterator VI [V1QI V2QI V4QI V8QI V16QI V1HI V2HI V4HI V8HI V1SI V2SI V4SI V1DI V2DI])
(define_mode_iterator VI_VXE3 [V1QI V2QI V4QI V8QI V16QI V1HI V2HI V4HI V8HI V1SI V2SI V4SI V1DI (V2DI "TARGET_VXE3")])
(define_mode_iterator VI_QHS [V1QI V2QI V4QI V8QI V16QI V1HI V2HI V4HI V8HI V1SI V2SI V4SI])
@@ -237,6 +238,7 @@
; Comparison operators on int and fp compares which are directly
; supported by the HW.
(define_code_iterator VICMP_HW_OP [eq gt gtu])
+(define_code_iterator VICMP_HW_OP2 [gt gtu])
; For int insn_cmp_op can be used in the insn name as well as in the asm output.
(define_code_attr insn_cmp_op [(eq "eq") (gt "h") (gtu "hl") (ge "he")])
@@ -1978,8 +1980,8 @@
(define_expand "vec_cmp<mode><tointvec>"
[(set (match_operand:<TOINTVEC> 0 "register_operand" "")
(match_operator:<TOINTVEC> 1 "vcond_comparison_operator"
- [(match_operand:V_HW 2 "register_operand" "")
- (match_operand:V_HW 3 "nonmemory_operand" "")]))]
+ [(match_operand:V_HW1 2 "register_operand" "")
+ (match_operand:V_HW1 3 "nonmemory_operand" "")]))]
"TARGET_VX"
{
s390_expand_vec_compare (operands[0], GET_CODE(operands[1]), operands[2], operands[3]);
@@ -1997,19 +1999,19 @@
DONE;
})
-(define_insn "*vec_cmp<VICMP_HW_OP:code><VI:mode><VI:mode>_nocc"
- [(set (match_operand:VI 2 "register_operand" "=v")
- (VICMP_HW_OP:VI (match_operand:VI 0 "register_operand" "v")
- (match_operand:VI 1 "register_operand" "v")))]
+(define_insn "*vec_cmp<VICMP_HW_OP:code><VIT_VXE3:mode><VIT_VXE3:mode>_nocc"
+ [(set (match_operand:VIT_VXE3 2 "register_operand" "=v")
+ (VICMP_HW_OP:VIT_VXE3 (match_operand:VIT_VXE3 0 "register_operand" "v")
+ (match_operand:VIT_VXE3 1 "register_operand" "v")))]
"TARGET_VX"
- "vc<VICMP_HW_OP:insn_cmp_op><VI:bhfgq>\t%v2,%v0,%v1"
+ "vc<VICMP_HW_OP:insn_cmp_op><VIT_VXE3:bhfgq>\t%v2,%v0,%v1"
[(set_attr "op_type" "VRR")])
(define_insn_and_split "*vec_cmpeq<mode><mode>_nocc_emu"
[(set (match_operand:VI_HW_T 0 "register_operand" "=v")
(eq:VI_HW_T (match_operand:VI_HW_T 1 "register_operand" "v")
(match_operand:VI_HW_T 2 "register_operand" "v")))]
- "TARGET_VX"
+ "TARGET_VX && !TARGET_VXE3"
"#"
"&& can_create_pseudo_p ()"
[(set (match_dup 3)
@@ -2031,7 +2033,7 @@
[(set (match_operand:VI_HW_T 0 "register_operand" "=v")
(gt:VI_HW_T (match_operand:VI_HW_T 1 "register_operand" "v")
(match_operand:VI_HW_T 2 "register_operand" "v")))]
- "TARGET_VX"
+ "TARGET_VX && !TARGET_VXE3"
"#"
"&& can_create_pseudo_p ()"
[(set (match_dup 3)
diff --git a/gcc/config/s390/vx-builtins.md b/gcc/config/s390/vx-builtins.md
index c332e02..a25122d 100644
--- a/gcc/config/s390/vx-builtins.md
+++ b/gcc/config/s390/vx-builtins.md
@@ -748,10 +748,10 @@
; vec_all/any int compares
-(define_expand "vec_all_<intcmpcc:code><VI_HW:mode>"
- [(match_operand:SI 0 "register_operand" "")
- (intcmpcc (match_operand:VI_HW 1 "register_operand" "")
- (match_operand:VI_HW 2 "register_operand" ""))]
+(define_expand "vec_all_<intcmpcc:code><VIT_HW_VXE3_T:mode>"
+ [(match_operand:SI 0 "register_operand" "")
+ (intcmpcc (match_operand:VIT_HW_VXE3_T 1 "register_operand" "")
+ (match_operand:VIT_HW_VXE3_T 2 "register_operand" ""))]
"TARGET_VX"
{
s390_expand_vec_compare_cc (operands[0],
@@ -762,10 +762,10 @@
DONE;
})
-(define_expand "vec_any_<intcmpcc:code><VI_HW:mode>"
- [(match_operand:SI 0 "register_operand" "")
- (intcmpcc (match_operand:VI_HW 1 "register_operand" "")
- (match_operand:VI_HW 2 "register_operand" ""))]
+(define_expand "vec_any_<intcmpcc:code><VIT_HW_VXE3_T:mode>"
+ [(match_operand:SI 0 "register_operand" "")
+ (intcmpcc (match_operand:VIT_HW_VXE3_T 1 "register_operand" "")
+ (match_operand:VIT_HW_VXE3_T 2 "register_operand" ""))]
"TARGET_VX"
{
s390_expand_vec_compare_cc (operands[0],
@@ -809,10 +809,10 @@
; Compare without generating CC
-(define_expand "vec_cmp<intcmp:code><VI_HW:mode>"
- [(set (match_operand:VI_HW 0 "register_operand" "=v")
- (intcmp:VI_HW (match_operand:VI_HW 1 "register_operand" "v")
- (match_operand:VI_HW 2 "register_operand" "v")))]
+(define_expand "vec_cmp<intcmp:code><VIT_HW_VXE3_T:mode>"
+ [(set (match_operand:VIT_HW_VXE3_T 0 "register_operand" "=v")
+ (intcmp:VIT_HW_VXE3_T (match_operand:VIT_HW_VXE3_T 1 "register_operand" "v")
+ (match_operand:VIT_HW_VXE3_T 2 "register_operand" "v")))]
"TARGET_VX"
{
s390_expand_vec_compare (operands[0], <intcmp:CODE>, operands[1], operands[2]);
@@ -1979,13 +1979,13 @@
; All comparisons which produce a CC need fully populated (VI_HW)
; vector arguments. Otherwise the any/all CCs would be just bogus.
-(define_insn "*vec_cmp<VICMP:insn_cmp><VI_HW:mode>_cconly"
+(define_insn "*vec_cmp<VICMP:insn_cmp><VIT_HW_VXE3_T:mode>_cconly"
[(set (reg:VICMP CC_REGNUM)
- (compare:VICMP (match_operand:VI_HW 0 "register_operand" "v")
- (match_operand:VI_HW 1 "register_operand" "v")))
- (clobber (match_scratch:VI_HW 2 "=v"))]
+ (compare:VICMP (match_operand:VIT_HW_VXE3_T 0 "register_operand" "v")
+ (match_operand:VIT_HW_VXE3_T 1 "register_operand" "v")))
+ (clobber (match_scratch:VIT_HW_VXE3_T 2 "=v"))]
"TARGET_VX"
- "vc<VICMP:insn_cmp><VI_HW:bhfgq>s\t%v2,%v0,%v1"
+ "vc<VICMP:insn_cmp><VIT_HW_VXE3_T:bhfgq>s\t%v2,%v0,%v1"
[(set_attr "op_type" "VRR")])
; FIXME: The following 2x3 definitions should be merged into 2 with
@@ -1993,68 +1993,68 @@
; operator (eq) depending on the mode CCVEQ (mode_iterator). Or the
; other way around - setting the mode depending on the code
; (code_iterator).
-(define_expand "vec_cmpeq<VI_HW:mode>_cc"
+(define_expand "vec_cmpeq<VIT_HW_VXE3_T:mode>_cc"
[(parallel
[(set (reg:CCVEQ CC_REGNUM)
- (compare:CCVEQ (match_operand:VI_HW 1 "register_operand" "v")
- (match_operand:VI_HW 2 "register_operand" "v")))
- (set (match_operand:VI_HW 0 "register_operand" "=v")
- (eq:VI_HW (match_dup 1) (match_dup 2)))])
+ (compare:CCVEQ (match_operand:VIT_HW_VXE3_T 1 "register_operand" "v")
+ (match_operand:VIT_HW_VXE3_T 2 "register_operand" "v")))
+ (set (match_operand:VIT_HW_VXE3_T 0 "register_operand" "=v")
+ (eq:VIT_HW_VXE3_T (match_dup 1) (match_dup 2)))])
(set (match_operand:SI 3 "memory_operand" "")
(unspec:SI [(reg:CCVEQ CC_REGNUM)] UNSPEC_CC_TO_INT))]
"TARGET_VX")
-(define_expand "vec_cmph<VI_HW:mode>_cc"
+(define_expand "vec_cmph<VIT_HW_VXE3_T:mode>_cc"
[(parallel
[(set (reg:CCVIH CC_REGNUM)
- (compare:CCVIH (match_operand:VI_HW 1 "register_operand" "v")
- (match_operand:VI_HW 2 "register_operand" "v")))
- (set (match_operand:VI_HW 0 "register_operand" "=v")
- (gt:VI_HW (match_dup 1) (match_dup 2)))])
+ (compare:CCVIH (match_operand:VIT_HW_VXE3_T 1 "register_operand" "v")
+ (match_operand:VIT_HW_VXE3_T 2 "register_operand" "v")))
+ (set (match_operand:VIT_HW_VXE3_T 0 "register_operand" "=v")
+ (gt:VIT_HW_VXE3_T (match_dup 1) (match_dup 2)))])
(set (match_operand:SI 3 "memory_operand" "")
(unspec:SI [(reg:CCVIH CC_REGNUM)] UNSPEC_CC_TO_INT))]
"TARGET_VX")
-(define_expand "vec_cmphl<VI_HW:mode>_cc"
+(define_expand "vec_cmphl<VIT_HW_VXE3_T:mode>_cc"
[(parallel
[(set (reg:CCVIHU CC_REGNUM)
- (compare:CCVIHU (match_operand:VI_HW 1 "register_operand" "v")
- (match_operand:VI_HW 2 "register_operand" "v")))
- (set (match_operand:VI_HW 0 "register_operand" "=v")
- (gtu:VI_HW (match_dup 1) (match_dup 2)))])
+ (compare:CCVIHU (match_operand:VIT_HW_VXE3_T 1 "register_operand" "v")
+ (match_operand:VIT_HW_VXE3_T 2 "register_operand" "v")))
+ (set (match_operand:VIT_HW_VXE3_T 0 "register_operand" "=v")
+ (gtu:VIT_HW_VXE3_T (match_dup 1) (match_dup 2)))])
(set (match_operand:SI 3 "memory_operand" "")
(unspec:SI [(reg:CCVIHU CC_REGNUM)] UNSPEC_CC_TO_INT))]
"TARGET_VX")
-(define_insn "*vec_cmpeq<VI_HW:mode>_cc"
+(define_insn "*vec_cmpeq<VIT_HW_VXE3_T:mode>_cc"
[(set (reg:CCVEQ CC_REGNUM)
- (compare:CCVEQ (match_operand:VI_HW 0 "register_operand" "v")
- (match_operand:VI_HW 1 "register_operand" "v")))
- (set (match_operand:VI_HW 2 "register_operand" "=v")
- (eq:VI_HW (match_dup 0) (match_dup 1)))]
+ (compare:CCVEQ (match_operand:VIT_HW_VXE3_T 0 "register_operand" "v")
+ (match_operand:VIT_HW_VXE3_T 1 "register_operand" "v")))
+ (set (match_operand:VIT_HW_VXE3_T 2 "register_operand" "=v")
+ (eq:VIT_HW_VXE3_T (match_dup 0) (match_dup 1)))]
"TARGET_VX"
- "vceq<VI_HW:bhfgq>s\t%v2,%v0,%v1"
+ "vceq<VIT_HW_VXE3_T:bhfgq>s\t%v2,%v0,%v1"
[(set_attr "op_type" "VRR")])
-(define_insn "*vec_cmph<VI_HW:mode>_cc"
+(define_insn "*vec_cmph<VIT_HW_VXE3_T:mode>_cc"
[(set (reg:CCVIH CC_REGNUM)
- (compare:CCVIH (match_operand:VI_HW 0 "register_operand" "v")
- (match_operand:VI_HW 1 "register_operand" "v")))
- (set (match_operand:VI_HW 2 "register_operand" "=v")
- (gt:VI_HW (match_dup 0) (match_dup 1)))]
+ (compare:CCVIH (match_operand:VIT_HW_VXE3_T 0 "register_operand" "v")
+ (match_operand:VIT_HW_VXE3_T 1 "register_operand" "v")))
+ (set (match_operand:VIT_HW_VXE3_T 2 "register_operand" "=v")
+ (gt:VIT_HW_VXE3_T (match_dup 0) (match_dup 1)))]
"TARGET_VX"
- "vch<VI_HW:bhfgq>s\t%v2,%v0,%v1"
+ "vch<VIT_HW_VXE3_T:bhfgq>s\t%v2,%v0,%v1"
[(set_attr "op_type" "VRR")])
-(define_insn "*vec_cmphl<VI_HW:mode>_cc"
+(define_insn "*vec_cmphl<VIT_HW_VXE3_T:mode>_cc"
[(set (reg:CCVIHU CC_REGNUM)
- (compare:CCVIHU (match_operand:VI_HW 0 "register_operand" "v")
- (match_operand:VI_HW 1 "register_operand" "v")))
- (set (match_operand:VI_HW 2 "register_operand" "=v")
- (gtu:VI_HW (match_dup 0) (match_dup 1)))]
+ (compare:CCVIHU (match_operand:VIT_HW_VXE3_T 0 "register_operand" "v")
+ (match_operand:VIT_HW_VXE3_T 1 "register_operand" "v")))
+ (set (match_operand:VIT_HW_VXE3_T 2 "register_operand" "=v")
+ (gtu:VIT_HW_VXE3_T (match_dup 0) (match_dup 1)))]
"TARGET_VX"
- "vchl<VI_HW:bhfgq>s\t%v2,%v0,%v1"
+ "vchl<VIT_HW_VXE3_T:bhfgq>s\t%v2,%v0,%v1"
[(set_attr "op_type" "VRR")])
;;