https://gcc.gnu.org/g:447b917e98ee34e2eae455b43784ab6a86b604f2

commit r15-7043-g447b917e98ee34e2eae455b43784ab6a86b604f2
Author: Stefan Schulze Frielinghaus <stefa...@gcc.gnu.org>
Date:   Mon Jan 20 10:01:08 2025 +0100

    s390: arch15: New instruction variants supporting 128-bit integer
    
    Add new instruction variants and also extend builtins in order to deal
    with 128-bit integer.
    
    gcc/ChangeLog:
    
            * config/s390/s390-builtins.def: Add new instruction variants.
            * config/s390/s390-builtin-types.def: Update accordingly.
            * config/s390/vecintrin.h: Add new defines.
            * config/s390/vector.md: Adapt insns for new instruction
            variants.
            * config/s390/vx-builtins.md: Ditto.

Diff:
---
 gcc/config/s390/s390-builtin-types.def |  58 +++++++++++
 gcc/config/s390/s390-builtins.def      | 182 ++++++++++++++++++++++++++++-----
 gcc/config/s390/vecintrin.h            |   7 ++
 gcc/config/s390/vector.md              |  60 ++++++-----
 gcc/config/s390/vx-builtins.md         | 146 +++++++++++++-------------
 5 files changed, 329 insertions(+), 124 deletions(-)

diff --git a/gcc/config/s390/s390-builtin-types.def 
b/gcc/config/s390/s390-builtin-types.def
index 2993aea3fb9b..f995fe47f1da 100644
--- a/gcc/config/s390/s390-builtin-types.def
+++ b/gcc/config/s390/s390-builtin-types.def
@@ -58,6 +58,7 @@ DEF_TYPE (BT_FLT, float_type_node, 0)
 DEF_TYPE (BT_FLTCONST, float_type_node, 1)
 DEF_TYPE (BT_INT, integer_type_node, 0)
 DEF_TYPE (BT_INT128, intTI_type_node, 0)
+DEF_TYPE (BT_INT128CONST, intTI_type_node, 1)
 DEF_TYPE (BT_INTCONST, integer_type_node, 1)
 DEF_TYPE (BT_LONG, long_integer_type_node, 0)
 DEF_TYPE (BT_LONGLONG, long_long_integer_type_node, 0)
@@ -70,6 +71,7 @@ DEF_TYPE (BT_UCHAR, unsigned_char_type_node, 0)
 DEF_TYPE (BT_UCHARCONST, unsigned_char_type_node, 1)
 DEF_TYPE (BT_UINT, unsigned_type_node, 0)
 DEF_TYPE (BT_UINT128, unsigned_intTI_type_node, 0)
+DEF_TYPE (BT_UINT128CONST, unsigned_intTI_type_node, 1)
 DEF_TYPE (BT_UINT64, c_uint64_type_node, 0)
 DEF_TYPE (BT_UINTCONST, unsigned_type_node, 1)
 DEF_TYPE (BT_ULONG, long_unsigned_type_node, 0)
@@ -80,10 +82,12 @@ DEF_TYPE (BT_USHORTCONST, short_unsigned_type_node, 1)
 DEF_TYPE (BT_VOID, void_type_node, 0)
 DEF_TYPE (BT_VOIDCONST, void_type_node, 1)
 DEF_VECTOR_TYPE (BT_UV16QI, BT_UCHAR, 16)
+DEF_VECTOR_TYPE (BT_UV1TI, BT_UINT128, 1)
 DEF_VECTOR_TYPE (BT_UV2DI, BT_ULONGLONG, 2)
 DEF_VECTOR_TYPE (BT_UV4SI, BT_UINT, 4)
 DEF_VECTOR_TYPE (BT_UV8HI, BT_USHORT, 8)
 DEF_VECTOR_TYPE (BT_V16QI, BT_SCHAR, 16)
+DEF_VECTOR_TYPE (BT_V1TI, BT_INT128, 1)
 DEF_VECTOR_TYPE (BT_V2DF, BT_DBL, 2)
 DEF_VECTOR_TYPE (BT_V2DI, BT_LONGLONG, 2)
 DEF_VECTOR_TYPE (BT_V4SF, BT_FLT, 4)
@@ -93,6 +97,8 @@ DEF_POINTER_TYPE (BT_DBLCONSTPTR, BT_DBLCONST)
 DEF_POINTER_TYPE (BT_DBLPTR, BT_DBL)
 DEF_POINTER_TYPE (BT_FLTCONSTPTR, BT_FLTCONST)
 DEF_POINTER_TYPE (BT_FLTPTR, BT_FLT)
+DEF_POINTER_TYPE (BT_INT128CONSTPTR, BT_INT128CONST)
+DEF_POINTER_TYPE (BT_INT128PTR, BT_INT128)
 DEF_POINTER_TYPE (BT_INTCONSTPTR, BT_INTCONST)
 DEF_POINTER_TYPE (BT_INTPTR, BT_INT)
 DEF_POINTER_TYPE (BT_LONGLONGCONSTPTR, BT_LONGLONGCONST)
@@ -103,6 +109,8 @@ DEF_POINTER_TYPE (BT_SHORTCONSTPTR, BT_SHORTCONST)
 DEF_POINTER_TYPE (BT_SHORTPTR, BT_SHORT)
 DEF_POINTER_TYPE (BT_UCHARCONSTPTR, BT_UCHARCONST)
 DEF_POINTER_TYPE (BT_UCHARPTR, BT_UCHAR)
+DEF_POINTER_TYPE (BT_UINT128CONSTPTR, BT_UINT128CONST)
+DEF_POINTER_TYPE (BT_UINT128PTR, BT_UINT128)
 DEF_POINTER_TYPE (BT_UINT64PTR, BT_UINT64)
 DEF_POINTER_TYPE (BT_UINTCONSTPTR, BT_UINTCONST)
 DEF_POINTER_TYPE (BT_UINTPTR, BT_UINT)
@@ -128,12 +136,14 @@ DEF_OPAQUE_VECTOR_TYPE (BT_OV4SI, BT_INT, 4)
 DEF_FN_TYPE_0 (BT_FN_INT, BT_INT)
 DEF_FN_TYPE_0 (BT_FN_UINT, BT_UINT)
 DEF_FN_TYPE_0 (BT_FN_VOID, BT_VOID)
+DEF_FN_TYPE_1 (BT_FN_INT128_V2DI, BT_INT128, BT_V2DI)
 DEF_FN_TYPE_1 (BT_FN_INT_INT, BT_INT, BT_INT)
 DEF_FN_TYPE_1 (BT_FN_INT_VOIDPTR, BT_INT, BT_VOIDPTR)
 DEF_FN_TYPE_1 (BT_FN_OV4SI_INT, BT_OV4SI, BT_INT)
 DEF_FN_TYPE_1 (BT_FN_OV4SI_INTCONSTPTR, BT_OV4SI, BT_INTCONSTPTR)
 DEF_FN_TYPE_1 (BT_FN_OV4SI_OV4SI, BT_OV4SI, BT_OV4SI)
 DEF_FN_TYPE_1 (BT_FN_UINT128_UINT128, BT_UINT128, BT_UINT128)
+DEF_FN_TYPE_1 (BT_FN_UINT128_UV2DI, BT_UINT128, BT_UV2DI)
 DEF_FN_TYPE_1 (BT_FN_UV16QI_UCHAR, BT_UV16QI, BT_UCHAR)
 DEF_FN_TYPE_1 (BT_FN_UV16QI_UCHARCONSTPTR, BT_UV16QI, BT_UCHARCONSTPTR)
 DEF_FN_TYPE_1 (BT_FN_UV16QI_USHORT, BT_UV16QI, BT_USHORT)
@@ -187,6 +197,7 @@ 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_V2DI_V2DI, BT_INT128, BT_V2DI, BT_V2DI)
 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_UV16QI_UV16QI, BT_INT, BT_UV16QI, BT_UV16QI)
@@ -226,6 +237,7 @@ DEF_FN_TYPE_2 (BT_FN_UV16QI_UV8HI_UV8HI, BT_UV16QI, 
BT_UV8HI, BT_UV8HI)
 DEF_FN_TYPE_2 (BT_FN_UV2DI_UCHAR_UCHAR, BT_UV2DI, BT_UCHAR, BT_UCHAR)
 DEF_FN_TYPE_2 (BT_FN_UV2DI_ULONGLONG_INT, BT_UV2DI, BT_ULONGLONG, BT_INT)
 DEF_FN_TYPE_2 (BT_FN_UV2DI_UV16QI_UV16QI, BT_UV2DI, BT_UV16QI, BT_UV16QI)
+DEF_FN_TYPE_2 (BT_FN_UV2DI_UV1TI_UV16QI, BT_UV2DI, BT_UV1TI, BT_UV16QI)
 DEF_FN_TYPE_2 (BT_FN_UV2DI_UV2DI_UCHAR, BT_UV2DI, BT_UV2DI, BT_UCHAR)
 DEF_FN_TYPE_2 (BT_FN_UV2DI_UV2DI_UV2DI, BT_UV2DI, BT_UV2DI, BT_UV2DI)
 DEF_FN_TYPE_2 (BT_FN_UV2DI_UV4SI_UV4SI, BT_UV2DI, BT_UV4SI, BT_UV4SI)
@@ -285,6 +297,8 @@ DEF_FN_TYPE_2 (BT_FN_VOID_UINT64PTR_UINT64, BT_VOID, 
BT_UINT64PTR, BT_UINT64)
 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_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)
 DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_INT_INTPTR, BT_OV4SI, BT_OV4SI, BT_INT, 
BT_INTPTR)
@@ -302,6 +316,7 @@ DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UV16QI_INTPTR, 
BT_UV16QI, BT_UV16QI, BT_UV16Q
 DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UV16QI_UV16QI, BT_UV16QI, BT_UV16QI, 
BT_UV16QI, BT_UV16QI)
 DEF_FN_TYPE_3 (BT_FN_UV16QI_UV2DI_UV2DI_UV16QI, BT_UV16QI, BT_UV2DI, BT_UV2DI, 
BT_UV16QI)
 DEF_FN_TYPE_3 (BT_FN_UV16QI_UV8HI_UV8HI_INTPTR, BT_UV16QI, BT_UV8HI, BT_UV8HI, 
BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_UV1TI_UV1TI_UV1TI_UV1TI, BT_UV1TI, BT_UV1TI, BT_UV1TI, 
BT_UV1TI)
 DEF_FN_TYPE_3 (BT_FN_UV2DI_UV2DI_ULONGLONG_INT, BT_UV2DI, BT_UV2DI, 
BT_ULONGLONG, BT_INT)
 DEF_FN_TYPE_3 (BT_FN_UV2DI_UV2DI_UV2DI_INT, BT_UV2DI, BT_UV2DI, BT_UV2DI, 
BT_INT)
 DEF_FN_TYPE_3 (BT_FN_UV2DI_UV2DI_UV2DI_UV2DI, BT_UV2DI, BT_UV2DI, BT_UV2DI, 
BT_UV2DI)
@@ -333,6 +348,7 @@ DEF_FN_TYPE_3 (BT_FN_V2DI_UV2DI_UV2DI_INTPTR, BT_V2DI, 
BT_UV2DI, BT_UV2DI, BT_IN
 DEF_FN_TYPE_3 (BT_FN_V2DI_V2DF_INT_INTPTR, BT_V2DI, BT_V2DF, BT_INT, BT_INTPTR)
 DEF_FN_TYPE_3 (BT_FN_V2DI_V2DF_V2DF_INTPTR, BT_V2DI, BT_V2DF, BT_V2DF, 
BT_INTPTR)
 DEF_FN_TYPE_3 (BT_FN_V2DI_V2DI_V2DI_INTPTR, BT_V2DI, BT_V2DI, BT_V2DI, 
BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_V2DI_V2DI_V2DI_V2DI, BT_V2DI, BT_V2DI, BT_V2DI, BT_V2DI)
 DEF_FN_TYPE_3 (BT_FN_V2DI_V4SI_V4SI_V2DI, BT_V2DI, BT_V4SI, BT_V4SI, BT_V2DI)
 DEF_FN_TYPE_3 (BT_FN_V4SF_V2DF_INT_INT, BT_V4SF, BT_V2DF, BT_INT, BT_INT)
 DEF_FN_TYPE_3 (BT_FN_V4SF_V4SF_FLT_INT, BT_V4SF, BT_V4SF, BT_FLT, BT_INT)
@@ -364,6 +380,7 @@ DEF_FN_TYPE_4 (BT_FN_UV16QI_UV16QI_UV16QI_UV16QI_INTPTR, 
BT_UV16QI, BT_UV16QI, B
 DEF_FN_TYPE_4 (BT_FN_UV16QI_UV2DI_UV2DI_UV16QI_INT, BT_UV16QI, BT_UV2DI, 
BT_UV2DI, BT_UV16QI, BT_INT)
 DEF_FN_TYPE_4 (BT_FN_UV16QI_UV4SI_UV4SI_UV16QI_INTPTR, BT_UV16QI, BT_UV4SI, 
BT_UV4SI, BT_UV16QI, BT_INTPTR)
 DEF_FN_TYPE_4 (BT_FN_UV16QI_UV8HI_UV8HI_UV16QI_INTPTR, BT_UV16QI, BT_UV8HI, 
BT_UV8HI, BT_UV16QI, BT_INTPTR)
+DEF_FN_TYPE_4 (BT_FN_UV1TI_UV2DI_UV2DI_UV1TI_INT, BT_UV1TI, BT_UV2DI, 
BT_UV2DI, BT_UV1TI, BT_INT)
 DEF_FN_TYPE_4 (BT_FN_UV2DI_UV2DI_UV2DI_ULONGLONGCONSTPTR_UCHAR, BT_UV2DI, 
BT_UV2DI, BT_UV2DI, BT_ULONGLONGCONSTPTR, BT_UCHAR)
 DEF_FN_TYPE_4 (BT_FN_UV2DI_UV2DI_UV2DI_UV2DI_INT, BT_UV2DI, BT_UV2DI, 
BT_UV2DI, BT_UV2DI, BT_INT)
 DEF_FN_TYPE_4 (BT_FN_UV4SI_UV4SI_UV4SI_INT_INTPTR, BT_UV4SI, BT_UV4SI, 
BT_UV4SI, BT_INT, BT_INTPTR)
@@ -395,6 +412,12 @@ DEF_OV_TYPE (BT_OV_BV16QI_UV16QI_UV16QI_UV16QI, BT_BV16QI, 
BT_UV16QI, BT_UV16QI,
 DEF_OV_TYPE (BT_OV_BV16QI_UV16QI_UV16QI_UV16QI_INTPTR, BT_BV16QI, BT_UV16QI, 
BT_UV16QI, BT_UV16QI, BT_INTPTR)
 DEF_OV_TYPE (BT_OV_BV16QI_V16QI_V16QI, BT_BV16QI, BT_V16QI, BT_V16QI)
 DEF_OV_TYPE (BT_OV_BV16QI_V16QI_V16QI_INTPTR, BT_BV16QI, BT_V16QI, BT_V16QI, 
BT_INTPTR)
+DEF_OV_TYPE (BT_OV_BV1TI_BV1TI_BV1TI, BT_BV1TI, BT_BV1TI, BT_BV1TI)
+DEF_OV_TYPE (BT_OV_BV1TI_BV1TI_BV1TI_BV1TI, BT_BV1TI, BT_BV1TI, BT_BV1TI, 
BT_BV1TI)
+DEF_OV_TYPE (BT_OV_BV1TI_BV1TI_BV1TI_UV16QI, BT_BV1TI, BT_BV1TI, BT_BV1TI, 
BT_UV16QI)
+DEF_OV_TYPE (BT_OV_BV1TI_BV1TI_BV1TI_UV1TI, BT_BV1TI, BT_BV1TI, BT_BV1TI, 
BT_UV1TI)
+DEF_OV_TYPE (BT_OV_BV1TI_BV2DI, BT_BV1TI, BT_BV2DI)
+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)
 DEF_OV_TYPE (BT_OV_BV2DI_BV2DI_BV2DI_BV2DI, BT_BV2DI, BT_BV2DI, BT_BV2DI, 
BT_BV2DI)
@@ -471,6 +494,7 @@ DEF_OV_TYPE (BT_OV_INT_BV8HI_UV8HI, BT_INT, BT_BV8HI, 
BT_UV8HI)
 DEF_OV_TYPE (BT_OV_INT_BV8HI_V8HI, BT_INT, BT_BV8HI, BT_V8HI)
 DEF_OV_TYPE (BT_OV_INT_UV16QI_BV16QI, BT_INT, BT_UV16QI, BT_BV16QI)
 DEF_OV_TYPE (BT_OV_INT_UV16QI_UV16QI, BT_INT, BT_UV16QI, BT_UV16QI)
+DEF_OV_TYPE (BT_OV_INT_UV1TI_UV1TI, BT_INT, BT_UV1TI, BT_UV1TI)
 DEF_OV_TYPE (BT_OV_INT_UV2DI_BV2DI, BT_INT, BT_UV2DI, BT_BV2DI)
 DEF_OV_TYPE (BT_OV_INT_UV2DI_UV2DI, BT_INT, BT_UV2DI, BT_UV2DI)
 DEF_OV_TYPE (BT_OV_INT_UV4SI_BV4SI, BT_INT, BT_UV4SI, BT_BV4SI)
@@ -480,6 +504,7 @@ DEF_OV_TYPE (BT_OV_INT_UV8HI_UV8HI, BT_INT, BT_UV8HI, 
BT_UV8HI)
 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_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)
@@ -547,6 +572,18 @@ DEF_OV_TYPE (BT_OV_UV16QI_V16QI_V16QI_UV16QI_INTPTR, 
BT_UV16QI, BT_V16QI, BT_V16
 DEF_OV_TYPE (BT_OV_UV16QI_V4SI_V4SI_UV16QI_INTPTR, BT_UV16QI, BT_V4SI, 
BT_V4SI, BT_UV16QI, BT_INTPTR)
 DEF_OV_TYPE (BT_OV_UV16QI_V8HI_V8HI, BT_UV16QI, BT_V8HI, BT_V8HI)
 DEF_OV_TYPE (BT_OV_UV16QI_V8HI_V8HI_UV16QI_INTPTR, BT_UV16QI, BT_V8HI, 
BT_V8HI, BT_UV16QI, BT_INTPTR)
+DEF_OV_TYPE (BT_OV_UV1TI_LONG_UINT128CONSTPTR, BT_UV1TI, BT_LONG, 
BT_UINT128CONSTPTR)
+DEF_OV_TYPE (BT_OV_UV1TI_UINT128, BT_UV1TI, BT_UINT128)
+DEF_OV_TYPE (BT_OV_UV1TI_UINT128CONSTPTR_USHORT, BT_UV1TI, BT_UINT128CONSTPTR, 
BT_USHORT)
+DEF_OV_TYPE (BT_OV_UV1TI_UV1TI, BT_UV1TI, BT_UV1TI)
+DEF_OV_TYPE (BT_OV_UV1TI_UV1TI_UV1TI, BT_UV1TI, BT_UV1TI, BT_UV1TI)
+DEF_OV_TYPE (BT_OV_UV1TI_UV1TI_UV1TI_BV1TI, BT_UV1TI, BT_UV1TI, BT_UV1TI, 
BT_BV1TI)
+DEF_OV_TYPE (BT_OV_UV1TI_UV1TI_UV1TI_UV16QI, BT_UV1TI, BT_UV1TI, BT_UV1TI, 
BT_UV16QI)
+DEF_OV_TYPE (BT_OV_UV1TI_UV1TI_UV1TI_UV1TI, BT_UV1TI, BT_UV1TI, BT_UV1TI, 
BT_UV1TI)
+DEF_OV_TYPE (BT_OV_UV1TI_UV2DI, BT_UV1TI, BT_UV2DI)
+DEF_OV_TYPE (BT_OV_UV1TI_UV2DI_UV2DI, BT_UV1TI, BT_UV2DI, BT_UV2DI)
+DEF_OV_TYPE (BT_OV_UV1TI_UV2DI_UV2DI_UV1TI, BT_UV1TI, BT_UV2DI, BT_UV2DI, 
BT_UV1TI)
+DEF_OV_TYPE (BT_OV_UV1TI_UV4SI_UV4SI, BT_UV1TI, BT_UV4SI, BT_UV4SI)
 DEF_OV_TYPE (BT_OV_UV2DI_BV2DI_UV2DI, BT_UV2DI, BT_BV2DI, BT_UV2DI)
 DEF_OV_TYPE (BT_OV_UV2DI_LONG_ULONGLONGCONSTPTR, BT_UV2DI, BT_LONG, 
BT_ULONGLONGCONSTPTR)
 DEF_OV_TYPE (BT_OV_UV2DI_ULONGLONG, BT_UV2DI, BT_ULONGLONG)
@@ -557,6 +594,7 @@ DEF_OV_TYPE (BT_OV_UV2DI_ULONGLONG_BV2DI_INT, BT_UV2DI, 
BT_ULONGLONG, BT_BV2DI,
 DEF_OV_TYPE (BT_OV_UV2DI_ULONGLONG_INT, BT_UV2DI, BT_ULONGLONG, BT_INT)
 DEF_OV_TYPE (BT_OV_UV2DI_ULONGLONG_ULONGLONG, BT_UV2DI, BT_ULONGLONG, 
BT_ULONGLONG)
 DEF_OV_TYPE (BT_OV_UV2DI_ULONGLONG_UV2DI_INT, BT_UV2DI, BT_ULONGLONG, 
BT_UV2DI, BT_INT)
+DEF_OV_TYPE (BT_OV_UV2DI_UV1TI_UV1TI, BT_UV2DI, BT_UV1TI, BT_UV1TI)
 DEF_OV_TYPE (BT_OV_UV2DI_UV2DI, BT_UV2DI, BT_UV2DI)
 DEF_OV_TYPE (BT_OV_UV2DI_UV2DI_BV2DI, BT_UV2DI, BT_UV2DI, BT_BV2DI)
 DEF_OV_TYPE (BT_OV_UV2DI_UV2DI_UCHAR, BT_UV2DI, BT_UV2DI, BT_UCHAR)
@@ -684,6 +722,20 @@ DEF_OV_TYPE (BT_OV_V16QI_V16QI_V16QI_UV16QI, BT_V16QI, 
BT_V16QI, BT_V16QI, BT_UV
 DEF_OV_TYPE (BT_OV_V16QI_V16QI_V16QI_V16QI, BT_V16QI, BT_V16QI, BT_V16QI, 
BT_V16QI)
 DEF_OV_TYPE (BT_OV_V16QI_V8HI_V8HI, BT_V16QI, BT_V8HI, BT_V8HI)
 DEF_OV_TYPE (BT_OV_V16QI_V8HI_V8HI_INTPTR, BT_V16QI, BT_V8HI, BT_V8HI, 
BT_INTPTR)
+DEF_OV_TYPE (BT_OV_V1TI_INT128, BT_V1TI, BT_INT128)
+DEF_OV_TYPE (BT_OV_V1TI_INT128CONSTPTR_USHORT, BT_V1TI, BT_INT128CONSTPTR, 
BT_USHORT)
+DEF_OV_TYPE (BT_OV_V1TI_LONG_INT128CONSTPTR, BT_V1TI, BT_LONG, 
BT_INT128CONSTPTR)
+DEF_OV_TYPE (BT_OV_V1TI_UV1TI_V1TI_V1TI, BT_V1TI, BT_UV1TI, BT_V1TI, BT_V1TI)
+DEF_OV_TYPE (BT_OV_V1TI_V1TI, BT_V1TI, BT_V1TI)
+DEF_OV_TYPE (BT_OV_V1TI_V1TI_UV1TI_UV1TI, BT_V1TI, BT_V1TI, BT_UV1TI, BT_UV1TI)
+DEF_OV_TYPE (BT_OV_V1TI_V1TI_V1TI, BT_V1TI, BT_V1TI, BT_V1TI)
+DEF_OV_TYPE (BT_OV_V1TI_V1TI_V1TI_BV1TI, BT_V1TI, BT_V1TI, BT_V1TI, BT_BV1TI)
+DEF_OV_TYPE (BT_OV_V1TI_V1TI_V1TI_UV16QI, BT_V1TI, BT_V1TI, BT_V1TI, BT_UV16QI)
+DEF_OV_TYPE (BT_OV_V1TI_V1TI_V1TI_UV1TI, BT_V1TI, BT_V1TI, BT_V1TI, BT_UV1TI)
+DEF_OV_TYPE (BT_OV_V1TI_V1TI_V1TI_V1TI, BT_V1TI, BT_V1TI, BT_V1TI, BT_V1TI)
+DEF_OV_TYPE (BT_OV_V1TI_V2DI, BT_V1TI, BT_V2DI)
+DEF_OV_TYPE (BT_OV_V1TI_V2DI_V2DI, BT_V1TI, BT_V2DI, BT_V2DI)
+DEF_OV_TYPE (BT_OV_V1TI_V2DI_V2DI_V1TI, BT_V1TI, BT_V2DI, BT_V2DI, BT_V1TI)
 DEF_OV_TYPE (BT_OV_V2DF_BV2DI_V2DF, BT_V2DF, BT_BV2DI, BT_V2DF)
 DEF_OV_TYPE (BT_OV_V2DF_DBL, BT_V2DF, BT_DBL)
 DEF_OV_TYPE (BT_OV_V2DF_DBLCONSTPTR, BT_V2DF, BT_DBLCONSTPTR)
@@ -720,7 +772,9 @@ DEF_OV_TYPE (BT_OV_V2DI_LONGLONG_INT, BT_V2DI, BT_LONGLONG, 
BT_INT)
 DEF_OV_TYPE (BT_OV_V2DI_LONGLONG_LONGLONG, BT_V2DI, BT_LONGLONG, BT_LONGLONG)
 DEF_OV_TYPE (BT_OV_V2DI_LONGLONG_V2DI_INT, BT_V2DI, BT_LONGLONG, BT_V2DI, 
BT_INT)
 DEF_OV_TYPE (BT_OV_V2DI_LONG_LONGLONGCONSTPTR, BT_V2DI, BT_LONG, 
BT_LONGLONGCONSTPTR)
+DEF_OV_TYPE (BT_OV_V2DI_UV2DI_V2DI_V2DI, BT_V2DI, BT_UV2DI, BT_V2DI, BT_V2DI)
 DEF_OV_TYPE (BT_OV_V2DI_V16QI, BT_V2DI, BT_V16QI)
+DEF_OV_TYPE (BT_OV_V2DI_V1TI_V1TI, BT_V2DI, BT_V1TI, BT_V1TI)
 DEF_OV_TYPE (BT_OV_V2DI_V2DF, BT_V2DI, BT_V2DF)
 DEF_OV_TYPE (BT_OV_V2DI_V2DI, BT_V2DI, BT_V2DI)
 DEF_OV_TYPE (BT_OV_V2DI_V2DI_BV2DI, BT_V2DI, BT_V2DI, BT_BV2DI)
@@ -730,6 +784,7 @@ DEF_OV_TYPE (BT_OV_V2DI_V2DI_UV16QI, BT_V2DI, BT_V2DI, 
BT_UV16QI)
 DEF_OV_TYPE (BT_OV_V2DI_V2DI_UV2DI, BT_V2DI, BT_V2DI, BT_UV2DI)
 DEF_OV_TYPE (BT_OV_V2DI_V2DI_UV2DI_LONGLONGCONSTPTR_UCHAR, BT_V2DI, BT_V2DI, 
BT_UV2DI, BT_LONGLONGCONSTPTR, BT_UCHAR)
 DEF_OV_TYPE (BT_OV_V2DI_V2DI_UV2DI_UCHAR, BT_V2DI, BT_V2DI, BT_UV2DI, BT_UCHAR)
+DEF_OV_TYPE (BT_OV_V2DI_V2DI_UV2DI_UV2DI, BT_V2DI, BT_V2DI, BT_UV2DI, BT_UV2DI)
 DEF_OV_TYPE (BT_OV_V2DI_V2DI_UV4SI, BT_V2DI, BT_V2DI, BT_UV4SI)
 DEF_OV_TYPE (BT_OV_V2DI_V2DI_UV8HI, BT_V2DI, BT_V2DI, BT_UV8HI)
 DEF_OV_TYPE (BT_OV_V2DI_V2DI_V2DI, BT_V2DI, BT_V2DI, BT_V2DI)
@@ -739,6 +794,7 @@ DEF_OV_TYPE (BT_OV_V2DI_V2DI_V2DI_UINT, BT_V2DI, BT_V2DI, 
BT_V2DI, BT_UINT)
 DEF_OV_TYPE (BT_OV_V2DI_V2DI_V2DI_ULONGLONG, BT_V2DI, BT_V2DI, BT_V2DI, 
BT_ULONGLONG)
 DEF_OV_TYPE (BT_OV_V2DI_V2DI_V2DI_UV16QI, BT_V2DI, BT_V2DI, BT_V2DI, BT_UV16QI)
 DEF_OV_TYPE (BT_OV_V2DI_V2DI_V2DI_UV2DI, BT_V2DI, BT_V2DI, BT_V2DI, BT_UV2DI)
+DEF_OV_TYPE (BT_OV_V2DI_V2DI_V2DI_V2DI, BT_V2DI, BT_V2DI, BT_V2DI, BT_V2DI)
 DEF_OV_TYPE (BT_OV_V2DI_V4SI, BT_V2DI, BT_V4SI)
 DEF_OV_TYPE (BT_OV_V2DI_V4SI_V4SI, BT_V2DI, BT_V4SI, BT_V4SI)
 DEF_OV_TYPE (BT_OV_V2DI_V4SI_V4SI_V2DI, BT_V2DI, BT_V4SI, BT_V4SI, BT_V2DI)
@@ -839,6 +895,7 @@ DEF_OV_TYPE (BT_OV_VOID_BV2DI_UV2DI_ULONGLONGPTR_ULONGLONG, 
BT_VOID, BT_BV2DI, B
 DEF_OV_TYPE (BT_OV_VOID_BV4SI_UV4SI_UINTPTR_ULONGLONG, BT_VOID, BT_BV4SI, 
BT_UV4SI, BT_UINTPTR, BT_ULONGLONG)
 DEF_OV_TYPE (BT_OV_VOID_UV16QI_LONG_UCHARPTR, BT_VOID, BT_UV16QI, BT_LONG, 
BT_UCHARPTR)
 DEF_OV_TYPE (BT_OV_VOID_UV16QI_UCHARPTR_UINT, BT_VOID, BT_UV16QI, BT_UCHARPTR, 
BT_UINT)
+DEF_OV_TYPE (BT_OV_VOID_UV1TI_LONG_UINT128PTR, BT_VOID, BT_UV1TI, BT_LONG, 
BT_UINT128PTR)
 DEF_OV_TYPE (BT_OV_VOID_UV2DI_LONG_ULONGLONGPTR, BT_VOID, BT_UV2DI, BT_LONG, 
BT_ULONGLONGPTR)
 DEF_OV_TYPE (BT_OV_VOID_UV2DI_ULONGLONGPTR_UINT, BT_VOID, BT_UV2DI, 
BT_ULONGLONGPTR, BT_UINT)
 DEF_OV_TYPE (BT_OV_VOID_UV2DI_UV2DI_ULONGLONGPTR_ULONGLONG, BT_VOID, BT_UV2DI, 
BT_UV2DI, BT_ULONGLONGPTR, BT_ULONGLONG)
@@ -849,6 +906,7 @@ DEF_OV_TYPE (BT_OV_VOID_UV8HI_LONG_USHORTPTR, BT_VOID, 
BT_UV8HI, BT_LONG, BT_USH
 DEF_OV_TYPE (BT_OV_VOID_UV8HI_USHORTPTR_UINT, BT_VOID, BT_UV8HI, BT_USHORTPTR, 
BT_UINT)
 DEF_OV_TYPE (BT_OV_VOID_V16QI_LONG_SCHARPTR, BT_VOID, BT_V16QI, BT_LONG, 
BT_SCHARPTR)
 DEF_OV_TYPE (BT_OV_VOID_V16QI_SCHARPTR_UINT, BT_VOID, BT_V16QI, BT_SCHARPTR, 
BT_UINT)
+DEF_OV_TYPE (BT_OV_VOID_V1TI_LONG_INT128PTR, BT_VOID, BT_V1TI, BT_LONG, 
BT_INT128PTR)
 DEF_OV_TYPE (BT_OV_VOID_V2DF_DBLPTR_UINT, BT_VOID, BT_V2DF, BT_DBLPTR, BT_UINT)
 DEF_OV_TYPE (BT_OV_VOID_V2DF_LONG_DBLPTR, BT_VOID, BT_V2DF, BT_LONG, BT_DBLPTR)
 DEF_OV_TYPE (BT_OV_VOID_V2DF_UV2DI_DBLPTR_ULONGLONG, BT_VOID, BT_V2DF, 
BT_UV2DI, BT_DBLPTR, BT_ULONGLONG)
diff --git a/gcc/config/s390/s390-builtins.def 
b/gcc/config/s390/s390-builtins.def
index 1700016fe4ce..b8e8b64587f2 100644
--- a/gcc/config/s390/s390-builtins.def
+++ b/gcc/config/s390/s390-builtins.def
@@ -358,6 +358,8 @@ OB_DEF_VAR (s390_vec_xl_s32,            MAX,                
0,
 OB_DEF_VAR (s390_vec_xl_u32,            MAX,                0,                 
 O1_LIT,             BT_OV_UV4SI_LONG_UINTCONSTPTR)           /* vl */
 OB_DEF_VAR (s390_vec_xl_s64,            MAX,                0,                 
 O1_LIT,             BT_OV_V2DI_LONG_LONGLONGCONSTPTR)        /* vl */
 OB_DEF_VAR (s390_vec_xl_u64,            MAX,                0,                 
 O1_LIT,             BT_OV_UV2DI_LONG_ULONGLONGCONSTPTR)      /* vl */
+OB_DEF_VAR (s390_vec_xl_s128,           MAX,                0,                 
 O1_LIT,             BT_OV_V1TI_LONG_INT128CONSTPTR)          /* vl */
+OB_DEF_VAR (s390_vec_xl_u128,           MAX,                0,                 
 O1_LIT,             BT_OV_UV1TI_LONG_UINT128CONSTPTR)        /* vl */
 OB_DEF_VAR (s390_vec_xl_flt,            MAX,                0,                 
 O1_LIT,             BT_OV_V4SF_LONG_FLTCONSTPTR)             /* vl */
 OB_DEF_VAR (s390_vec_xl_dbl,            MAX,                0,                 
 O1_LIT,             BT_OV_V2DF_LONG_DBLCONSTPTR)             /* vl */
 
@@ -391,6 +393,8 @@ OB_DEF_VAR (s390_vec_splats_s32,        s390_vlrepf,        
0,
 OB_DEF_VAR (s390_vec_splats_u32,        s390_vlrepf,        0,                 
 0,                  BT_OV_UV4SI_UINT)
 OB_DEF_VAR (s390_vec_splats_s64,        s390_vlrepg,        0,                 
 0,                  BT_OV_V2DI_LONGLONG)
 OB_DEF_VAR (s390_vec_splats_u64,        s390_vlrepg,        0,                 
 0,                  BT_OV_UV2DI_ULONGLONG)
+OB_DEF_VAR (s390_vec_splats_s128,       s390_vlrepq_emu,    0,                 
 0,                  BT_OV_V1TI_INT128)
+OB_DEF_VAR (s390_vec_splats_u128,       s390_vlrepq_emu,    0,                 
 0,                  BT_OV_UV1TI_UINT128)
 OB_DEF_VAR (s390_vec_splats_flt,        s390_vlrepf_flt,    B_VXE,             
 0,                  BT_OV_V4SF_FLT)                          /* vlrepf */
 OB_DEF_VAR (s390_vec_splats_dbl,        s390_vlrepg_dbl,    0,                 
 0,                  BT_OV_V2DF_DBL)                          /* vlrepg */
 
@@ -400,6 +404,7 @@ B_DEF      (s390_vlrepf,                vec_splatsv4si,     
0,
 B_DEF      (s390_vlrepf_flt,            vec_splatsv4sf,     0,                 
 B_INT | B_VXE,      0,                  BT_FN_V4SF_FLT)
 B_DEF      (s390_vlrepg,                vec_splatsv2di,     0,                 
 B_VX,               0,                  BT_FN_UV2DI_ULONGLONG)
 B_DEF      (s390_vlrepg_dbl,            vec_splatsv2df,     0,                 
 B_INT | B_VX,       0,                  BT_FN_V2DF_DBL)
+B_DEF      (s390_vlrepq_emu,            movti,              0,                 
 B_VX,               0,                  BT_FN_UINT128_UINT128)
 B_DEF      (s390_vrepib,                vec_splatsv16qi,    0,                 
 B_VX,               O1_U8,              BT_FN_V16QI_UCHAR)
 B_DEF      (s390_vrepih,                vec_splatsv8hi,     0,                 
 B_VX,               O1_S16,             BT_FN_V8HI_SHORT)
 B_DEF      (s390_vrepif,                vec_splatsv4si,     0,                 
 B_VX,               O1_S16,             BT_FN_V4SI_SHORT)
@@ -509,6 +514,8 @@ OB_DEF_VAR (s390_vec_load_bndry_s32,    s390_vlbb,          
0,
 OB_DEF_VAR (s390_vec_load_bndry_u32,    s390_vlbb,          0,                 
 O2_U16,             BT_OV_UV4SI_UINTCONSTPTR_USHORT)
 OB_DEF_VAR (s390_vec_load_bndry_s64,    s390_vlbb,          0,                 
 O2_U16,             BT_OV_V2DI_LONGLONGCONSTPTR_USHORT)
 OB_DEF_VAR (s390_vec_load_bndry_u64,    s390_vlbb,          0,                 
 O2_U16,             BT_OV_UV2DI_ULONGLONGCONSTPTR_USHORT)
+OB_DEF_VAR (s390_vec_load_bndry_s128,   s390_vlbb,          0,                 
 O2_U16,             BT_OV_V1TI_INT128CONSTPTR_USHORT)
+OB_DEF_VAR (s390_vec_load_bndry_u128,   s390_vlbb,          0,                 
 O2_U16,             BT_OV_UV1TI_UINT128CONSTPTR_USHORT)
 OB_DEF_VAR (s390_vec_load_bndry_flt,    s390_vlbb,          B_VXE,             
 O2_U16,             BT_OV_V4SF_FLTCONSTPTR_USHORT)
 OB_DEF_VAR (s390_vec_load_bndry_dbl,    s390_vlbb,          0,                 
 O2_U16,             BT_OV_V2DF_DBLCONSTPTR_USHORT)
 
@@ -580,7 +587,7 @@ B_DEF      (s390_vmrlf_flt,             vec_mergelv4sf,     
0,
 B_DEF      (s390_vmrlg,                 vec_mergelv2di,     0,                 
 B_VX,               0,                  BT_FN_UV2DI_UV2DI_UV2DI)
 B_DEF      (s390_vmrlg_dbl,             vec_mergelv2df,     0,                 
 B_INT | B_VX,       0,                  BT_FN_V2DF_V2DF_V2DF)
 
-OB_DEF     (s390_vec_pack,              s390_vec_pack_s16,  s390_vec_pack_b64, 
 B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
+OB_DEF     (s390_vec_pack,              s390_vec_pack_s16,  
s390_vec_pack_b128, B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_pack_s16,          s390_vpkh,          0,                 
 0,                  BT_OV_V16QI_V8HI_V8HI)
 OB_DEF_VAR (s390_vec_pack_u16,          s390_vpkh,          0,                 
 0,                  BT_OV_UV16QI_UV8HI_UV8HI)
 OB_DEF_VAR (s390_vec_pack_b16,          s390_vpkh,          0,                 
 0,                  BT_OV_BV16QI_BV8HI_BV8HI)
@@ -590,6 +597,9 @@ OB_DEF_VAR (s390_vec_pack_b32,          s390_vpkf,          
0,
 OB_DEF_VAR (s390_vec_pack_s64,          s390_vpkg,          0,                 
 0,                  BT_OV_V4SI_V2DI_V2DI)
 OB_DEF_VAR (s390_vec_pack_u64,          s390_vpkg,          0,                 
 0,                  BT_OV_UV4SI_UV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_pack_b64,          s390_vpkg,          0,                 
 0,                  BT_OV_BV4SI_BV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_pack_s128,         s390_vpkg,          0,                 
 0,                  BT_OV_V2DI_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_pack_u128,         s390_vpkg,          0,                 
 0,                  BT_OV_UV2DI_UV1TI_UV1TI)
+OB_DEF_VAR (s390_vec_pack_b128,         s390_vpkg,          0,                 
 0,                  BT_OV_BV2DI_BV1TI_BV1TI)
 
 B_DEF      (s390_vpkh,                  vec_packv8hi,       0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV8HI_UV8HI)
 B_DEF      (s390_vpkf,                  vec_packv4si,       0,                 
 B_VX,               0,                  BT_FN_UV8HI_UV4SI_UV4SI)
@@ -655,6 +665,9 @@ OB_DEF_VAR (s390_vec_perm_u32,          s390_vperm,         
0,
 OB_DEF_VAR (s390_vec_perm_s64,          s390_vperm,         0,                 
 0,                  BT_OV_V2DI_V2DI_V2DI_UV16QI)
 OB_DEF_VAR (s390_vec_perm_b64,          s390_vperm,         0,                 
 0,                  BT_OV_BV2DI_BV2DI_BV2DI_UV16QI)
 OB_DEF_VAR (s390_vec_perm_u64,          s390_vperm,         0,                 
 0,                  BT_OV_UV2DI_UV2DI_UV2DI_UV16QI)
+OB_DEF_VAR (s390_vec_perm_s128,         s390_vperm,         0,                 
 0,                  BT_OV_V1TI_V1TI_V1TI_UV16QI)
+OB_DEF_VAR (s390_vec_perm_b128,         s390_vperm,         0,                 
 0,                  BT_OV_BV1TI_BV1TI_BV1TI_UV16QI)
+OB_DEF_VAR (s390_vec_perm_u128,         s390_vperm,         0,                 
 0,                  BT_OV_UV1TI_UV1TI_UV1TI_UV16QI)
 OB_DEF_VAR (s390_vec_perm_flt,          s390_vperm,         B_VXE,             
 0,                  BT_OV_V4SF_V4SF_V4SF_UV16QI)
 OB_DEF_VAR (s390_vec_perm_dbl,          s390_vperm,         0,                 
 0,                  BT_OV_V2DF_V2DF_V2DF_UV16QI)
 
@@ -730,6 +743,12 @@ OB_DEF_VAR (s390_vec_sel_s64_a,         s390_vselg,        
 0,
 OB_DEF_VAR (s390_vec_sel_s64_b,         s390_vselg,         0,                 
 0,                  BT_OV_V2DI_V2DI_V2DI_BV2DI)
 OB_DEF_VAR (s390_vec_sel_u64_a,         s390_vselg,         0,                 
 0,                  BT_OV_UV2DI_UV2DI_UV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_sel_u64_b,         s390_vselg,         0,                 
 0,                  BT_OV_UV2DI_UV2DI_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_sel_b128_a,        s390_vselq,         0,                 
 0,                  BT_OV_BV1TI_BV1TI_BV1TI_UV1TI)
+OB_DEF_VAR (s390_vec_sel_b128_b,        s390_vselq,         0,                 
 0,                  BT_OV_BV1TI_BV1TI_BV1TI_BV1TI)
+OB_DEF_VAR (s390_vec_sel_s128_a,        s390_vselq,         0,                 
 0,                  BT_OV_V1TI_V1TI_V1TI_UV1TI)
+OB_DEF_VAR (s390_vec_sel_s128_b,        s390_vselq,         0,                 
 0,                  BT_OV_V1TI_V1TI_V1TI_BV1TI)
+OB_DEF_VAR (s390_vec_sel_u128_a,        s390_vselq,         0,                 
 0,                  BT_OV_UV1TI_UV1TI_UV1TI_UV1TI)
+OB_DEF_VAR (s390_vec_sel_u128_b,        s390_vselq,         0,                 
 0,                  BT_OV_UV1TI_UV1TI_UV1TI_BV1TI)
 OB_DEF_VAR (s390_vec_sel_flt_a,         s390_vself_flt,     B_VXE,             
 0,                  BT_OV_V4SF_V4SF_V4SF_UV4SI)
 OB_DEF_VAR (s390_vec_sel_flt_b,         s390_vself_flt,     B_VXE,             
 0,                  BT_OV_V4SF_V4SF_V4SF_BV4SI)
 OB_DEF_VAR (s390_vec_sel_dbl_a,         s390_vselg_dbl,     0,                 
 0,                  BT_OV_V2DF_V2DF_V2DF_UV2DI)
@@ -739,6 +758,7 @@ B_DEF      (s390_vselb,                 vselv16qi,          
0,
 B_DEF      (s390_vselh,                 vselv8hi,           0,                 
 B_VX,               0,                  BT_FN_UV8HI_UV8HI_UV8HI_UV8HI)
 B_DEF      (s390_vself,                 vselv4si,           0,                 
 B_VX,               0,                  BT_FN_UV4SI_UV4SI_UV4SI_UV4SI)
 B_DEF      (s390_vselg,                 vselv2di,           0,                 
 B_VX,               0,                  BT_FN_UV2DI_UV2DI_UV2DI_UV2DI)
+B_DEF      (s390_vselq,                 vselv1ti,           0,                 
 B_VX,               0,                  BT_FN_UV1TI_UV1TI_UV1TI_UV1TI)
 B_DEF      (s390_vself_flt,             vselv4sf,           0,                 
 B_VXE,              0,                  BT_FN_V4SF_V4SF_V4SF_UV4SI)
 B_DEF      (s390_vselg_dbl,             vselv2df,           0,                 
 B_VX,               0,                  BT_FN_V2DF_V2DF_V2DF_UV2DI)
 
@@ -760,6 +780,8 @@ OB_DEF_VAR (s390_vec_xst_s32,           MAX,                
0,
 OB_DEF_VAR (s390_vec_xst_u32,           MAX,                0,                 
 O2_LIT,             BT_OV_VOID_UV4SI_LONG_UINTPTR)           /* vst */
 OB_DEF_VAR (s390_vec_xst_s64,           MAX,                0,                 
 O2_LIT,             BT_OV_VOID_V2DI_LONG_LONGLONGPTR)        /* vst */
 OB_DEF_VAR (s390_vec_xst_u64,           MAX,                0,                 
 O2_LIT,             BT_OV_VOID_UV2DI_LONG_ULONGLONGPTR)      /* vst */
+OB_DEF_VAR (s390_vec_xst_s128,          MAX,                0,                 
 O2_LIT,             BT_OV_VOID_V1TI_LONG_INT128PTR)          /* vst */
+OB_DEF_VAR (s390_vec_xst_u128,          MAX,                0,                 
 O2_LIT,             BT_OV_VOID_UV1TI_LONG_UINT128PTR)        /* vst */
 OB_DEF_VAR (s390_vec_xst_flt,           MAX,                0,                 
 O2_LIT,             BT_OV_VOID_V4SF_LONG_FLTPTR)             /* vst */
 OB_DEF_VAR (s390_vec_xst_dbl,           MAX,                0,                 
 O2_LIT,             BT_OV_VOID_V2DF_LONG_DBLPTR)             /* vst */
 
@@ -798,10 +820,11 @@ OB_DEF_VAR (s390_vec_store_len_dbl,     s390_vstl,        
  0,
 B_DEF      (s390_vstl,                  vstlv16qi,          0,                 
 B_VX,               0,                  BT_FN_VOID_V16QI_UINT_VOIDPTR)
 B_DEF      (s390_vstrlr,                vstrlrv16qi,        0,                 
 B_VXE,              0,                  BT_FN_VOID_V16QI_UINT_VOIDPTR)
 
-B_DEF      (s390_vec_bperm_u128,        vbpermv16qi,        0,                 
 B_VXE,              0,                  BT_FN_UV2DI_UV16QI_UV16QI)             
  /* vbperm */
-B_DEF      (s390_vbperm,                vbpermv16qi,        0,                 
 B_VXE,              0,                  BT_FN_UV2DI_UV16QI_UV16QI)
+B_DEF      (s390_vec_bperm_u128,        vbpermv16qi,        0,                 
 B_DEP | B_VXE,      0,                  BT_FN_UV2DI_UV16QI_UV16QI)
+B_DEF      (s390_vec_bperm,             vbpermv16qi,        0,                 
 B_VXE,              0,                  BT_FN_UV2DI_UV1TI_UV16QI)              
 /* vbperm */
+B_DEF      (s390_vbperm,                vbpermv16qi,        0,                 
 B_VXE,              0,                  BT_FN_UV2DI_UV16QI_UV16QI)             
 /* vbperm */
 
-OB_DEF     (s390_vec_unpackh,           
s390_vec_unpackh_s8,s390_vec_unpackh_u32,B_VX,              BT_FN_OV4SI_OV4SI)
+OB_DEF     (s390_vec_unpackh,           
s390_vec_unpackh_s8,s390_vec_unpackh_u64,B_VX,              BT_FN_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_unpackh_s8,        s390_vuphb,         0,                 
 0,                  BT_OV_V8HI_V16QI)
 OB_DEF_VAR (s390_vec_unpackh_b8,        s390_vuphb,         0,                 
 0,                  BT_OV_BV8HI_BV16QI)
 OB_DEF_VAR (s390_vec_unpackh_u8,        s390_vuplhb,        0,                 
 0,                  BT_OV_UV8HI_UV16QI)
@@ -811,6 +834,9 @@ OB_DEF_VAR (s390_vec_unpackh_u16,       s390_vuplhh,        
0,
 OB_DEF_VAR (s390_vec_unpackh_s32,       s390_vuphf,         0,                 
 0,                  BT_OV_V2DI_V4SI)
 OB_DEF_VAR (s390_vec_unpackh_b32,       s390_vuphf,         0,                 
 0,                  BT_OV_BV2DI_BV4SI)
 OB_DEF_VAR (s390_vec_unpackh_u32,       s390_vuplhf,        0,                 
 0,                  BT_OV_UV2DI_UV4SI)
+OB_DEF_VAR (s390_vec_unpackh_s64,       s390_vuphg,         B_VXE3,            
 0,                  BT_OV_V1TI_V2DI)
+OB_DEF_VAR (s390_vec_unpackh_b64,       s390_vuphg,         B_VXE3,            
 0,                  BT_OV_BV1TI_BV2DI)
+OB_DEF_VAR (s390_vec_unpackh_u64,       s390_vuplhg,        B_VXE3,            
 0,                  BT_OV_UV1TI_UV2DI)
 
 B_DEF      (s390_vuphb,                 vec_unpackhv16qi,   0,                 
 B_VX,               0,                  BT_FN_V8HI_V16QI)
 B_DEF      (s390_vuplhb,                vec_unpackh_lv16qi, 0,                 
 B_VX,               0,                  BT_FN_UV8HI_UV16QI)
@@ -818,8 +844,10 @@ B_DEF      (s390_vuphh,                 vec_unpackhv8hi,   
 0,
 B_DEF      (s390_vuplhh,                vec_unpackh_lv8hi,  0,                 
 B_VX,               0,                  BT_FN_UV4SI_UV8HI)
 B_DEF      (s390_vuphf,                 vec_unpackhv4si,    0,                 
 B_VX,               0,                  BT_FN_V2DI_V4SI)
 B_DEF      (s390_vuplhf,                vec_unpackh_lv4si,  0,                 
 B_VX,               0,                  BT_FN_UV2DI_UV4SI)
+B_DEF      (s390_vuphg,                 vec_unpackhv2di,    0,                 
 B_VXE3,             0,                  BT_FN_INT128_V2DI)
+B_DEF      (s390_vuplhg,                vec_unpackh_lv2di,  0,                 
 B_VXE3,             0,                  BT_FN_UINT128_UV2DI)
 
-OB_DEF     (s390_vec_unpackl,           
s390_vec_unpackl_s8,s390_vec_unpackl_u32,B_VX,              BT_FN_OV4SI_OV4SI)
+OB_DEF     (s390_vec_unpackl,           
s390_vec_unpackl_s8,s390_vec_unpackl_u64,B_VX,              BT_FN_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_unpackl_s8,        s390_vuplb,         0,                 
 0,                  BT_OV_V8HI_V16QI)
 OB_DEF_VAR (s390_vec_unpackl_b8,        s390_vuplb,         0,                 
 0,                  BT_OV_BV8HI_BV16QI)
 OB_DEF_VAR (s390_vec_unpackl_u8,        s390_vupllb,        0,                 
 0,                  BT_OV_UV8HI_UV16QI)
@@ -829,6 +857,9 @@ OB_DEF_VAR (s390_vec_unpackl_u16,       s390_vupllh,        
0,
 OB_DEF_VAR (s390_vec_unpackl_s32,       s390_vuplf,         0,                 
 0,                  BT_OV_V2DI_V4SI)
 OB_DEF_VAR (s390_vec_unpackl_b32,       s390_vuplf,         0,                 
 0,                  BT_OV_BV2DI_BV4SI)
 OB_DEF_VAR (s390_vec_unpackl_u32,       s390_vupllf,        0,                 
 0,                  BT_OV_UV2DI_UV4SI)
+OB_DEF_VAR (s390_vec_unpackl_s64,       s390_vuplg,         B_VXE3,            
 0,                  BT_OV_V1TI_V2DI)
+OB_DEF_VAR (s390_vec_unpackl_b64,       s390_vuplg,         B_VXE3,            
 0,                  BT_OV_BV1TI_BV2DI)
+OB_DEF_VAR (s390_vec_unpackl_u64,       s390_vupllg,        B_VXE3,            
 0,                  BT_OV_UV1TI_UV2DI)
 
 B_DEF      (s390_vuplb,                 vec_unpacklv16qi,   0,                 
 B_VX,               0,                  BT_FN_V8HI_V16QI)
 B_DEF      (s390_vupllb,                vec_unpackl_lv16qi, 0,                 
 B_VX,               0,                  BT_FN_UV8HI_UV16QI)
@@ -836,22 +867,29 @@ B_DEF      (s390_vuplhw,                vec_unpacklv8hi,  
  0,
 B_DEF      (s390_vupllh,                vec_unpackl_lv8hi,  0,                 
 B_VX,               0,                  BT_FN_UV4SI_UV8HI)
 B_DEF      (s390_vuplf,                 vec_unpacklv4si,    0,                 
 B_VX,               0,                  BT_FN_V2DI_V4SI)
 B_DEF      (s390_vupllf,                vec_unpackl_lv4si,  0,                 
 B_VX,               0,                  BT_FN_UV2DI_UV4SI)
+B_DEF      (s390_vuplg,                 vec_unpacklv2di,    0,                 
 B_VXE3,             0,                  BT_FN_INT128_V2DI)
+B_DEF      (s390_vupllg,                vec_unpackl_lv2di,  0,                 
 B_VXE3,             0,                  BT_FN_UINT128_UV2DI)
 
-OB_DEF     (s390_vec_addc,              s390_vec_addc_u8,   s390_vec_addc_u64, 
 B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
+OB_DEF     (s390_vec_addc,              s390_vec_addc_u8,   
s390_vec_addc_u128, B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_addc_u8,           s390_vaccb,         0,                 
 0,                  BT_OV_UV16QI_UV16QI_UV16QI)
 OB_DEF_VAR (s390_vec_addc_u16,          s390_vacch,         0,                 
 0,                  BT_OV_UV8HI_UV8HI_UV8HI)
 OB_DEF_VAR (s390_vec_addc_u32,          s390_vaccf,         0,                 
 0,                  BT_OV_UV4SI_UV4SI_UV4SI)
 OB_DEF_VAR (s390_vec_addc_u64,          s390_vaccg,         0,                 
 0,                  BT_OV_UV2DI_UV2DI_UV2DI)
+OB_DEF_VAR (s390_vec_addc_u128,         s390_vaccq,         0,                 
 0,                  BT_OV_UV1TI_UV1TI_UV1TI)
+
+B_DEF      (s390_vec_adde,              vacq,               0,                 
 B_VX,               0,                  BT_FN_UV1TI_UV1TI_UV1TI_UV1TI)
+
+B_DEF      (s390_vec_addec,             vacccq,             0,                 
 B_VX,               0,                  BT_FN_UV1TI_UV1TI_UV1TI_UV1TI)
 
 B_DEF      (s390_vaccb,                 vaccb_v16qi,        0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
 B_DEF      (s390_vacch,                 vacch_v8hi,         0,                 
 B_VX,               0,                  BT_FN_UV8HI_UV8HI_UV8HI)
 B_DEF      (s390_vaccf,                 vaccf_v4si,         0,                 
 B_VX,               0,                  BT_FN_UV4SI_UV4SI_UV4SI)
 B_DEF      (s390_vaccg,                 vaccg_v2di,         0,                 
 B_VX,               0,                  BT_FN_UV2DI_UV2DI_UV2DI)
 
-B_DEF      (s390_vec_add_u128,          addti3,             0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
-B_DEF      (s390_vec_addc_u128,         vaccq_ti,           0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
-B_DEF      (s390_vec_adde_u128,         vacq,               0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
-B_DEF      (s390_vec_addec_u128,        vacccq,             0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vec_add_u128,          addti3,             0,                 
 B_DEP | B_VX,       0,                  BT_FN_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vec_addc_u128,         vaccq_ti,           0,                 
 B_DEP | B_VX,       0,                  BT_FN_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vec_adde_u128,         vacq,               0,                 
 B_DEP | B_VX,       0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vec_addec_u128,        vacccq,             0,                 
 B_DEP | B_VX,       0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
 
 B_DEF      (s390_vaq,                   addti3,             0,                 
 B_VX,               0,                  BT_FN_INT128_INT128_INT128)
 B_DEF      (s390_vaccq,                 vaccq_ti,           0,                 
 B_VX,               0,                  BT_FN_UINT128_UINT128_UINT128)
@@ -887,6 +925,9 @@ OB_DEF_VAR (s390_vec_and_s64_c,         s390_vn,            
B_DEP,
 OB_DEF_VAR (s390_vec_and_u64_a,         s390_vn,            B_DEP,             
 0,                  BT_OV_UV2DI_BV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_and_u64_b,         s390_vn,            0,                 
 0,                  BT_OV_UV2DI_UV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_and_u64_c,         s390_vn,            B_DEP,             
 0,                  BT_OV_UV2DI_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_and_b128,          s390_vn,            0,                 
 0,                  BT_OV_BV1TI_BV1TI_BV1TI)
+OB_DEF_VAR (s390_vec_and_s128,          s390_vn,            0,                 
 0,                  BT_OV_V1TI_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_and_u128,          s390_vn,            0,                 
 0,                  BT_OV_UV1TI_UV1TI_UV1TI)
 OB_DEF_VAR (s390_vec_and_flt_a,         s390_vn,            B_VXE | B_DEP,     
 0,                  BT_OV_V4SF_BV4SI_V4SF)
 OB_DEF_VAR (s390_vec_and_flt_b,         s390_vn,            B_VXE,             
 0,                  BT_OV_V4SF_V4SF_V4SF)
 OB_DEF_VAR (s390_vec_and_flt_c,         s390_vn,            B_VXE | B_DEP,     
 0,                  BT_OV_V4SF_V4SF_BV4SI)
@@ -925,6 +966,9 @@ OB_DEF_VAR (s390_vec_andc_s64_c,        s390_vnc,           
B_DEP,
 OB_DEF_VAR (s390_vec_andc_u64_a,        s390_vnc,           B_DEP,             
 0,                  BT_OV_UV2DI_BV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_andc_u64_b,        s390_vnc,           0,                 
 0,                  BT_OV_UV2DI_UV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_andc_u64_c,        s390_vnc,           B_DEP,             
 0,                  BT_OV_UV2DI_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_andc_b128,         s390_vnc,           0,                 
 0,                  BT_OV_BV1TI_BV1TI_BV1TI)
+OB_DEF_VAR (s390_vec_andc_s128,         s390_vnc,           0,                 
 0,                  BT_OV_V1TI_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_andc_u128,         s390_vnc,           0,                 
 0,                  BT_OV_UV1TI_UV1TI_UV1TI)
 OB_DEF_VAR (s390_vec_andc_flt_a,        s390_vnc,           B_VXE | B_DEP,     
 0,                  BT_OV_V4SF_BV4SI_V4SF)
 OB_DEF_VAR (s390_vec_andc_flt_b,        s390_vnc,           B_VXE,             
 0,                  BT_OV_V4SF_V4SF_V4SF)
 OB_DEF_VAR (s390_vec_andc_flt_c,        s390_vnc,           B_VXE | B_DEP,     
 0,                  BT_OV_V4SF_V4SF_BV4SI)
@@ -934,7 +978,7 @@ OB_DEF_VAR (s390_vec_andc_dbl_c,        s390_vnc,           
B_DEP,
 
 B_DEF      (s390_vnc,                   vec_andcv16qi3,     0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
 
-OB_DEF     (s390_vec_avg,               s390_vec_avg_s8,    s390_vec_avg_u64,  
 B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
+OB_DEF     (s390_vec_avg,               s390_vec_avg_s8,    s390_vec_avg_u128, 
 B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_avg_s8,            s390_vavgb,         0,                 
 0,                  BT_OV_V16QI_V16QI_V16QI)
 OB_DEF_VAR (s390_vec_avg_u8,            s390_vavglb,        0,                 
 0,                  BT_OV_UV16QI_UV16QI_UV16QI)
 OB_DEF_VAR (s390_vec_avg_s16,           s390_vavgh,         0,                 
 0,                  BT_OV_V8HI_V8HI_V8HI)
@@ -943,6 +987,8 @@ OB_DEF_VAR (s390_vec_avg_s32,           s390_vavgf,         
0,
 OB_DEF_VAR (s390_vec_avg_u32,           s390_vavglf,        0,                 
 0,                  BT_OV_UV4SI_UV4SI_UV4SI)
 OB_DEF_VAR (s390_vec_avg_s64,           s390_vavgg,         0,                 
 0,                  BT_OV_V2DI_V2DI_V2DI)
 OB_DEF_VAR (s390_vec_avg_u64,           s390_vavglg,        0,                 
 0,                  BT_OV_UV2DI_UV2DI_UV2DI)
+OB_DEF_VAR (s390_vec_avg_s128,          s390_vavgq,         B_VXE3,            
 0,                  BT_OV_V1TI_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_avg_u128,          s390_vavglq,        B_VXE3,            
 0,                  BT_OV_UV1TI_UV1TI_UV1TI)
 
 B_DEF      (s390_vavgb,                 vec_avgv16qi,       0,                 
 B_VX,               0,                  BT_FN_V16QI_V16QI_V16QI)
 B_DEF      (s390_vavglb,                vec_avguv16qi,      0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
@@ -952,6 +998,8 @@ B_DEF      (s390_vavgf,                 vec_avgv4si,        
0,
 B_DEF      (s390_vavglf,                vec_avguv4si,       0,                 
 B_VX,               0,                  BT_FN_UV4SI_UV4SI_UV4SI)
 B_DEF      (s390_vavgg,                 vec_avgv2di,        0,                 
 B_VX,               0,                  BT_FN_V2DI_V2DI_V2DI)
 B_DEF      (s390_vavglg,                vec_avguv2di,       0,                 
 B_VX,               0,                  BT_FN_UV2DI_UV2DI_UV2DI)
+B_DEF      (s390_vavgq,                 vec_avgti,          0,                 
 B_VXE3,             0,                  BT_FN_INT128_INT128_INT128)
+B_DEF      (s390_vavglq,                vec_avguti,         0,                 
 B_VXE3,             0,                  BT_FN_UINT128_UINT128_UINT128)
 
 B_DEF      (s390_vcksm,                 vec_checksum,       0,                 
 B_VX,               0,                  BT_FN_UV4SI_UV4SI_UV4SI)
 
@@ -1650,6 +1698,9 @@ OB_DEF_VAR (s390_vec_xor_s64_c,         s390_vx,          
  B_DEP,
 OB_DEF_VAR (s390_vec_xor_u64_a,         s390_vx,            B_DEP,             
 0,                  BT_OV_UV2DI_BV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_xor_u64_b,         s390_vx,            0,                 
 0,                  BT_OV_UV2DI_UV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_xor_u64_c,         s390_vx,            B_DEP,             
 0,                  BT_OV_UV2DI_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_xor_b128,          s390_vx,            0,                 
 0,                  BT_OV_BV1TI_BV1TI_BV1TI)
+OB_DEF_VAR (s390_vec_xor_s128,          s390_vx,            0,                 
 0,                  BT_OV_V1TI_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_xor_u128,          s390_vx,            0,                 
 0,                  BT_OV_UV1TI_UV1TI_UV1TI)
 OB_DEF_VAR (s390_vec_xor_flt_a,         s390_vx,            B_VXE | B_DEP,     
 0,                  BT_OV_V4SF_BV4SI_V4SF)
 OB_DEF_VAR (s390_vec_xor_flt_b,         s390_vx,            B_VXE,             
 0,                  BT_OV_V4SF_V4SF_V4SF)
 OB_DEF_VAR (s390_vec_xor_flt_c,         s390_vx,            B_VXE | B_DEP,     
 0,                  BT_OV_V4SF_V4SF_BV4SI)
@@ -1659,10 +1710,11 @@ OB_DEF_VAR (s390_vec_xor_dbl_c,         s390_vx,        
    B_DEP,
 
 B_DEF      (s390_vx,                    xorv16qi3,          0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
 
-OB_DEF     (s390_vec_gfmsum,            s390_vec_gfmsum_u8, 
s390_vec_gfmsum_u32,B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
+OB_DEF     (s390_vec_gfmsum,            s390_vec_gfmsum_u8, 
s390_vec_gfmsum_u64,B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_gfmsum_u8,         s390_vgfmb,         0,                 
 0,                  BT_OV_UV8HI_UV16QI_UV16QI)
 OB_DEF_VAR (s390_vec_gfmsum_u16,        s390_vgfmh,         0,                 
 0,                  BT_OV_UV4SI_UV8HI_UV8HI)
 OB_DEF_VAR (s390_vec_gfmsum_u32,        s390_vgfmf,         0,                 
 0,                  BT_OV_UV2DI_UV4SI_UV4SI)
+OB_DEF_VAR (s390_vec_gfmsum_u64,        s390_vgfmg,         0,                 
 0,                  BT_OV_UV1TI_UV2DI_UV2DI)
 
 B_DEF      (s390_vgfmb,                 vec_gfmsumv16qi,    0,                 
 B_VX,               0,                  BT_FN_UV8HI_UV16QI_UV16QI)
 B_DEF      (s390_vgfmh,                 vec_gfmsumv8hi,     0,                 
 B_VX,               0,                  BT_FN_UV4SI_UV8HI_UV8HI)
@@ -1670,10 +1722,13 @@ B_DEF      (s390_vgfmf,                 vec_gfmsumv4si, 
    0,
 B_DEF      (s390_vgfmg,                 vec_gfmsum_128,     0,                 
 B_VX,               0,                  BT_FN_UINT128_UV2DI_UV2DI)
 B_DEF      (s390_vgfmg_128,             vec_gfmsum_128,     0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV2DI_UV2DI)
 
-OB_DEF     (s390_vec_gfmsum_accum,      
s390_vec_gfmsum_accum_u8,s390_vec_gfmsum_accum_u32,B_VX,    
BT_FN_OV4SI_OV4SI_OV4SI_OV4SI)
+B_DEF      (s390_vec_gfmsum_128,        vec_gfmsum_128,     0,                 
 B_DEP | B_VX,       0,                  BT_FN_UV16QI_UV2DI_UV2DI)
+
+OB_DEF     (s390_vec_gfmsum_accum,      
s390_vec_gfmsum_accum_u8,s390_vec_gfmsum_accum_u64,B_VX,    
BT_FN_OV4SI_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_gfmsum_accum_u8,   s390_vgfmab,        0,                 
 0,                  BT_OV_UV8HI_UV16QI_UV16QI_UV8HI)
 OB_DEF_VAR (s390_vec_gfmsum_accum_u16,  s390_vgfmah,        0,                 
 0,                  BT_OV_UV4SI_UV8HI_UV8HI_UV4SI)
 OB_DEF_VAR (s390_vec_gfmsum_accum_u32,  s390_vgfmaf,        0,                 
 0,                  BT_OV_UV2DI_UV4SI_UV4SI_UV2DI)
+OB_DEF_VAR (s390_vec_gfmsum_accum_u64,  s390_vgfmag,        0,                 
 0,                  BT_OV_UV1TI_UV2DI_UV2DI_UV1TI)
 
 B_DEF      (s390_vgfmab,                vec_gfmsum_accumv16qi,0,               
 B_VX,               0,                  BT_FN_UV8HI_UV16QI_UV16QI_UV8HI)
 B_DEF      (s390_vgfmah,                vec_gfmsum_accumv8hi,0,                
 B_VX,               0,                  BT_FN_UV4SI_UV8HI_UV8HI_UV4SI)
@@ -1681,6 +1736,8 @@ B_DEF      (s390_vgfmaf,                
vec_gfmsum_accumv4si,0,
 B_DEF      (s390_vgfmag,                vec_gfmsum_accum_128,0,                
 B_VX,               0,                  BT_FN_UINT128_UV2DI_UV2DI_UINT128)
 B_DEF      (s390_vgfmag_128,            vec_gfmsum_accum_128,0,                
 B_VX,               0,                  BT_FN_UV16QI_UV2DI_UV2DI_UV16QI)
 
+B_DEF      (s390_vec_gfmsum_accum_128,  vec_gfmsum_accum_128,0,                
 B_DEP | B_VX,       0,                  BT_FN_UV16QI_UV2DI_UV2DI_UV16QI)
+
 OB_DEF     (s390_vec_abs,               s390_vec_abs_s8,    s390_vec_abs_dbl,  
 B_VX,               BT_FN_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_abs_s8,            s390_vlpb,          0,                 
 0,                  BT_OV_V16QI_V16QI)
 OB_DEF_VAR (s390_vec_abs_s16,           s390_vlph,          0,                 
 0,                  BT_OV_V8HI_V8HI)
@@ -1778,7 +1835,7 @@ B_DEF      (s390_vfmindb,               vfminv2df,        
  0,
 B_DEF      (s390_vfminsb_4,             sminv4sf3,          0,                 
 B_INT | B_VXE,      0,                  BT_FN_V4SF_V4SF_V4SF) /* vfminsb */
 B_DEF      (s390_vfmindb_4,             sminv2df3,          0,                 
 B_INT | B_VX,       0,                  BT_FN_V2DF_V2DF_V2DF) /* vfmindb */
 
-OB_DEF     (s390_vec_mladd,             s390_vec_mladd_u8,  
s390_vec_mladd_s32_c,B_VX,              BT_FN_OV4SI_OV4SI_OV4SI_OV4SI)
+OB_DEF     (s390_vec_mladd,             s390_vec_mladd_u8,  
s390_vec_mladd_s128_c,B_VX,             BT_FN_OV4SI_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_mladd_u8,          s390_vmalb,         0,                 
 0,                  BT_OV_UV16QI_UV16QI_UV16QI_UV16QI)
 OB_DEF_VAR (s390_vec_mladd_s8_a,        s390_vmalb,         0,                 
 0,                  BT_OV_V16QI_UV16QI_V16QI_V16QI)
 OB_DEF_VAR (s390_vec_mladd_s8_b,        s390_vmalb,         0,                 
 0,                  BT_OV_V16QI_V16QI_UV16QI_UV16QI)
@@ -1791,18 +1848,32 @@ OB_DEF_VAR (s390_vec_mladd_u32,         s390_vmalf,     
    0,
 OB_DEF_VAR (s390_vec_mladd_s32_a,       s390_vmalf,         0,                 
 0,                  BT_OV_V4SI_UV4SI_V4SI_V4SI)
 OB_DEF_VAR (s390_vec_mladd_s32_b,       s390_vmalf,         0,                 
 0,                  BT_OV_V4SI_V4SI_UV4SI_UV4SI)
 OB_DEF_VAR (s390_vec_mladd_s32_c,       s390_vmalf,         0,                 
 0,                  BT_OV_V4SI_V4SI_V4SI_V4SI)
+OB_DEF_VAR (s390_vec_mladd_u64,         s390_vmalg,         B_VXE3,            
 0,                  BT_OV_UV2DI_UV2DI_UV2DI_UV2DI)
+OB_DEF_VAR (s390_vec_mladd_s64_a,       s390_vmalg,         B_VXE3,            
 0,                  BT_OV_V2DI_UV2DI_V2DI_V2DI)
+OB_DEF_VAR (s390_vec_mladd_s64_b,       s390_vmalg,         B_VXE3,            
 0,                  BT_OV_V2DI_V2DI_UV2DI_UV2DI)
+OB_DEF_VAR (s390_vec_mladd_s64_c,       s390_vmalg,         B_VXE3,            
 0,                  BT_OV_V2DI_V2DI_V2DI_V2DI)
+OB_DEF_VAR (s390_vec_mladd_u128,        s390_vmalq,         B_VXE3,            
 0,                  BT_OV_UV1TI_UV1TI_UV1TI_UV1TI)
+OB_DEF_VAR (s390_vec_mladd_s128_a,      s390_vmalq,         B_VXE3,            
 0,                  BT_OV_V1TI_UV1TI_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_mladd_s128_b,      s390_vmalq,         B_VXE3,            
 0,                  BT_OV_V1TI_V1TI_UV1TI_UV1TI)
+OB_DEF_VAR (s390_vec_mladd_s128_c,      s390_vmalq,         B_VXE3,            
 0,                  BT_OV_V1TI_V1TI_V1TI_V1TI)
 
 B_DEF      (s390_vmalb,                 vec_vmalv16qi,      0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
 B_DEF      (s390_vmalhw,                vec_vmalv8hi,       0,                 
 B_VX,               0,                  BT_FN_UV8HI_UV8HI_UV8HI_UV8HI)
 B_DEF      (s390_vmalf,                 vec_vmalv4si,       0,                 
 B_VX,               0,                  BT_FN_UV4SI_UV4SI_UV4SI_UV4SI)
+B_DEF      (s390_vmalg,                 vec_vmalv2di,       0,                 
 B_VXE3,             0,                  BT_FN_UV2DI_UV2DI_UV2DI_UV2DI)
+B_DEF      (s390_vmalq,                 vec_vmalti,         0,                 
 B_VXE3,             0,                  BT_FN_UINT128_UINT128_UINT128_UINT128)
 
-OB_DEF     (s390_vec_mhadd,             s390_vec_mhadd_u8,  
s390_vec_mhadd_s32, B_VX,               BT_FN_OV4SI_OV4SI_OV4SI_OV4SI)
+OB_DEF     (s390_vec_mhadd,             s390_vec_mhadd_u8,  
s390_vec_mhadd_s128,B_VX,               BT_FN_OV4SI_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_mhadd_u8,          s390_vmalhb,        0,                 
 0,                  BT_OV_UV16QI_UV16QI_UV16QI_UV16QI)
 OB_DEF_VAR (s390_vec_mhadd_s8,          s390_vmahb,         0,                 
 0,                  BT_OV_V16QI_V16QI_V16QI_V16QI)
 OB_DEF_VAR (s390_vec_mhadd_u16,         s390_vmalhh,        0,                 
 0,                  BT_OV_UV8HI_UV8HI_UV8HI_UV8HI)
 OB_DEF_VAR (s390_vec_mhadd_s16,         s390_vmahh,         0,                 
 0,                  BT_OV_V8HI_V8HI_V8HI_V8HI)
 OB_DEF_VAR (s390_vec_mhadd_u32,         s390_vmalhf,        0,                 
 0,                  BT_OV_UV4SI_UV4SI_UV4SI_UV4SI)
 OB_DEF_VAR (s390_vec_mhadd_s32,         s390_vmahf,         0,                 
 0,                  BT_OV_V4SI_V4SI_V4SI_V4SI)
+OB_DEF_VAR (s390_vec_mhadd_u64,         s390_vmalhg,        B_VXE3,            
 0,                  BT_OV_UV2DI_UV2DI_UV2DI_UV2DI)
+OB_DEF_VAR (s390_vec_mhadd_s64,         s390_vmahg,         B_VXE3,            
 0,                  BT_OV_V2DI_V2DI_V2DI_V2DI)
+OB_DEF_VAR (s390_vec_mhadd_u128,        s390_vmalhq,        B_VXE3,            
 0,                  BT_OV_UV1TI_UV1TI_UV1TI_UV1TI)
+OB_DEF_VAR (s390_vec_mhadd_s128,        s390_vmahq,         B_VXE3,            
 0,                  BT_OV_V1TI_V1TI_V1TI_V1TI)
 
 B_DEF      (s390_vmalhb,                vec_vmalhv16qi,     0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
 B_DEF      (s390_vmahb,                 vec_vmahv16qi,      0,                 
 B_VX,               0,                  BT_FN_V16QI_V16QI_V16QI_V16QI)
@@ -1810,14 +1881,20 @@ B_DEF      (s390_vmalhh,                vec_vmalhv8hi,  
    0,
 B_DEF      (s390_vmahh,                 vec_vmahv8hi,       0,                 
 B_VX,               0,                  BT_FN_V8HI_V8HI_V8HI_V8HI)
 B_DEF      (s390_vmalhf,                vec_vmalhv4si,      0,                 
 B_VX,               0,                  BT_FN_UV4SI_UV4SI_UV4SI_UV4SI)
 B_DEF      (s390_vmahf,                 vec_vmahv4si,       0,                 
 B_VX,               0,                  BT_FN_V4SI_V4SI_V4SI_V4SI)
+B_DEF      (s390_vmalhg,                vec_vmalhv2di,      0,                 
 B_VXE3,             0,                  BT_FN_UV2DI_UV2DI_UV2DI_UV2DI)
+B_DEF      (s390_vmahg,                 vec_vmahv2di,       0,                 
 B_VXE3,             0,                  BT_FN_V2DI_V2DI_V2DI_V2DI)
+B_DEF      (s390_vmalhq,                vec_vmalhti,        0,                 
 B_VXE3,             0,                  BT_FN_UINT128_UINT128_UINT128_UINT128)
+B_DEF      (s390_vmahq,                 vec_vmahti,         0,                 
 B_VXE3,             0,                  BT_FN_INT128_INT128_INT128_INT128)
 
-OB_DEF     (s390_vec_meadd,             s390_vec_meadd_u8,  
s390_vec_meadd_s32, B_VX,               BT_FN_OV4SI_OV4SI_OV4SI_OV4SI)
+OB_DEF     (s390_vec_meadd,             s390_vec_meadd_u8,  
s390_vec_meadd_s64, B_VX,               BT_FN_OV4SI_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_meadd_u8,          s390_vmaleb,        0,                 
 0,                  BT_OV_UV8HI_UV16QI_UV16QI_UV8HI)
 OB_DEF_VAR (s390_vec_meadd_s8,          s390_vmaeb,         0,                 
 0,                  BT_OV_V8HI_V16QI_V16QI_V8HI)
 OB_DEF_VAR (s390_vec_meadd_u16,         s390_vmaleh,        0,                 
 0,                  BT_OV_UV4SI_UV8HI_UV8HI_UV4SI)
 OB_DEF_VAR (s390_vec_meadd_s16,         s390_vmaeh,         0,                 
 0,                  BT_OV_V4SI_V8HI_V8HI_V4SI)
 OB_DEF_VAR (s390_vec_meadd_u32,         s390_vmalef,        0,                 
 0,                  BT_OV_UV2DI_UV4SI_UV4SI_UV2DI)
 OB_DEF_VAR (s390_vec_meadd_s32,         s390_vmaef,         0,                 
 0,                  BT_OV_V2DI_V4SI_V4SI_V2DI)
+OB_DEF_VAR (s390_vec_meadd_u64,         s390_vmaleg,        B_VXE3,            
 0,                  BT_OV_UV1TI_UV2DI_UV2DI_UV1TI)
+OB_DEF_VAR (s390_vec_meadd_s64,         s390_vmaeg,         B_VXE3,            
 0,                  BT_OV_V1TI_V2DI_V2DI_V1TI)
 
 B_DEF      (s390_vmaleb,                vec_vmalev16qi,     0,                 
 B_VX,               0,                  BT_FN_UV8HI_UV16QI_UV16QI_UV8HI)
 B_DEF      (s390_vmaeb,                 vec_vmaev16qi,      0,                 
 B_VX,               0,                  BT_FN_V8HI_V16QI_V16QI_V8HI)
@@ -1825,14 +1902,18 @@ B_DEF      (s390_vmaleh,                vec_vmalev8hi,  
    0,
 B_DEF      (s390_vmaeh,                 vec_vmaev8hi,       0,                 
 B_VX,               0,                  BT_FN_V4SI_V8HI_V8HI_V4SI)
 B_DEF      (s390_vmalef,                vec_vmalev4si,      0,                 
 B_VX,               0,                  BT_FN_UV2DI_UV4SI_UV4SI_UV2DI)
 B_DEF      (s390_vmaef,                 vec_vmaev4si,       0,                 
 B_VX,               0,                  BT_FN_V2DI_V4SI_V4SI_V2DI)
+B_DEF      (s390_vmaleg,                vec_vmalev2di,      0,                 
 B_VXE3,             0,                  BT_FN_UINT128_UV2DI_UV2DI_UINT128)
+B_DEF      (s390_vmaeg,                 vec_vmaev2di,       0,                 
 B_VXE3,             0,                  BT_FN_INT128_V2DI_V2DI_INT128)
 
-OB_DEF     (s390_vec_moadd,             s390_vec_moadd_u8,  
s390_vec_moadd_s32, B_VX,               BT_FN_OV4SI_OV4SI_OV4SI_OV4SI)
+OB_DEF     (s390_vec_moadd,             s390_vec_moadd_u8,  
s390_vec_moadd_s64, B_VX,               BT_FN_OV4SI_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_moadd_u8,          s390_vmalob,        0,                 
 0,                  BT_OV_UV8HI_UV16QI_UV16QI_UV8HI)
 OB_DEF_VAR (s390_vec_moadd_s8,          s390_vmaob,         0,                 
 0,                  BT_OV_V8HI_V16QI_V16QI_V8HI)
 OB_DEF_VAR (s390_vec_moadd_u16,         s390_vmaloh,        0,                 
 0,                  BT_OV_UV4SI_UV8HI_UV8HI_UV4SI)
 OB_DEF_VAR (s390_vec_moadd_s16,         s390_vmaoh,         0,                 
 0,                  BT_OV_V4SI_V8HI_V8HI_V4SI)
 OB_DEF_VAR (s390_vec_moadd_u32,         s390_vmalof,        0,                 
 0,                  BT_OV_UV2DI_UV4SI_UV4SI_UV2DI)
 OB_DEF_VAR (s390_vec_moadd_s32,         s390_vmaof,         0,                 
 0,                  BT_OV_V2DI_V4SI_V4SI_V2DI)
+OB_DEF_VAR (s390_vec_moadd_u64,         s390_vmalog,        B_VXE3,            
 0,                  BT_OV_UV1TI_UV2DI_UV2DI_UV1TI)
+OB_DEF_VAR (s390_vec_moadd_s64,         s390_vmaog,         B_VXE3,            
 0,                  BT_OV_V1TI_V2DI_V2DI_V1TI)
 
 B_DEF      (s390_vmalob,                vec_vmalov16qi,     0,                 
 B_VX,               0,                  BT_FN_UV8HI_UV16QI_UV16QI_UV8HI)
 B_DEF      (s390_vmaob,                 vec_vmaov16qi,      0,                 
 B_VX,               0,                  BT_FN_V8HI_V16QI_V16QI_V8HI)
@@ -1840,14 +1921,20 @@ B_DEF      (s390_vmaloh,                vec_vmalov8hi,  
    0,
 B_DEF      (s390_vmaoh,                 vec_vmaov8hi,       0,                 
 B_VX,               0,                  BT_FN_V4SI_V8HI_V8HI_V4SI)
 B_DEF      (s390_vmalof,                vec_vmalov4si,      0,                 
 B_VX,               0,                  BT_FN_UV2DI_UV4SI_UV4SI_UV2DI)
 B_DEF      (s390_vmaof,                 vec_vmaov4si,       0,                 
 B_VX,               0,                  BT_FN_V2DI_V4SI_V4SI_V2DI)
+B_DEF      (s390_vmalog,                vec_vmalov2di,      0,                 
 B_VXE3,             0,                  BT_FN_UINT128_UV2DI_UV2DI_UINT128)
+B_DEF      (s390_vmaog,                 vec_vmaov2di,       0,                 
 B_VXE3,             0,                  BT_FN_INT128_V2DI_V2DI_INT128)
 
-OB_DEF     (s390_vec_mulh,              s390_vec_mulh_u8,   s390_vec_mulh_s32, 
 B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
+OB_DEF     (s390_vec_mulh,              s390_vec_mulh_u8,   
s390_vec_mulh_s128, B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_mulh_u8,           s390_vmlhb,         0,                 
 0,                  BT_OV_UV16QI_UV16QI_UV16QI)
 OB_DEF_VAR (s390_vec_mulh_s8,           s390_vmhb,          0,                 
 0,                  BT_OV_V16QI_V16QI_V16QI)
 OB_DEF_VAR (s390_vec_mulh_u16,          s390_vmlhh,         0,                 
 0,                  BT_OV_UV8HI_UV8HI_UV8HI)
 OB_DEF_VAR (s390_vec_mulh_s16,          s390_vmhh,          0,                 
 0,                  BT_OV_V8HI_V8HI_V8HI)
 OB_DEF_VAR (s390_vec_mulh_u32,          s390_vmlhf,         0,                 
 0,                  BT_OV_UV4SI_UV4SI_UV4SI)
 OB_DEF_VAR (s390_vec_mulh_s32,          s390_vmhf,          0,                 
 0,                  BT_OV_V4SI_V4SI_V4SI)
+OB_DEF_VAR (s390_vec_mulh_u64,          s390_vmlhg,         B_VXE3,            
 0,                  BT_OV_UV2DI_UV2DI_UV2DI)
+OB_DEF_VAR (s390_vec_mulh_s64,          s390_vmhg,          B_VXE3,            
 0,                  BT_OV_V2DI_V2DI_V2DI)
+OB_DEF_VAR (s390_vec_mulh_u128,         s390_vmlhq,         B_VXE3,            
 0,                  BT_OV_UV1TI_UV1TI_UV1TI)
+OB_DEF_VAR (s390_vec_mulh_s128,         s390_vmhq,          B_VXE3,            
 0,                  BT_OV_V1TI_V1TI_V1TI)
 
 B_DEF      (s390_vmlhb,                 vec_umulhv16qi,     0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
 B_DEF      (s390_vmhb,                  vec_smulhv16qi,     0,                 
 B_VX,               0,                  BT_FN_V16QI_V16QI_V16QI)
@@ -1855,14 +1942,20 @@ B_DEF      (s390_vmlhh,                 vec_umulhv8hi,  
    0,
 B_DEF      (s390_vmhh,                  vec_smulhv8hi,      0,                 
 B_VX,               0,                  BT_FN_V8HI_V8HI_V8HI)
 B_DEF      (s390_vmlhf,                 vec_umulhv4si,      0,                 
 B_VX,               0,                  BT_FN_UV4SI_UV4SI_UV4SI)
 B_DEF      (s390_vmhf,                  vec_smulhv4si,      0,                 
 B_VX,               0,                  BT_FN_V4SI_V4SI_V4SI)
+B_DEF      (s390_vmlhg,                 vec_umulhv2di,      0,                 
 B_VXE3,             0,                  BT_FN_UV2DI_UV2DI_UV2DI)
+B_DEF      (s390_vmhg,                  vec_smulhv2di,      0,                 
 B_VXE3,             0,                  BT_FN_V2DI_V2DI_V2DI)
+B_DEF      (s390_vmlhq,                 vec_umulhti,        0,                 
 B_VXE3,             0,                  BT_FN_UINT128_UINT128_UINT128)
+B_DEF      (s390_vmhq,                  vec_smulhti,        0,                 
 B_VXE3,             0,                  BT_FN_INT128_INT128_INT128)
 
-OB_DEF     (s390_vec_mule,              s390_vec_mule_u8,   s390_vec_mule_s32, 
 B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
+OB_DEF     (s390_vec_mule,              s390_vec_mule_u8,   s390_vec_mule_s64, 
 B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_mule_u8,           s390_vmleb,         0,                 
 0,                  BT_OV_UV8HI_UV16QI_UV16QI)
 OB_DEF_VAR (s390_vec_mule_s8,           s390_vmeb,          0,                 
 0,                  BT_OV_V8HI_V16QI_V16QI)
 OB_DEF_VAR (s390_vec_mule_u16,          s390_vmleh,         0,                 
 0,                  BT_OV_UV4SI_UV8HI_UV8HI)
 OB_DEF_VAR (s390_vec_mule_s15,          s390_vmeh,          0,                 
 0,                  BT_OV_V4SI_V8HI_V8HI)
 OB_DEF_VAR (s390_vec_mule_u32,          s390_vmlef,         0,                 
 0,                  BT_OV_UV2DI_UV4SI_UV4SI)
 OB_DEF_VAR (s390_vec_mule_s32,          s390_vmef,          0,                 
 0,                  BT_OV_V2DI_V4SI_V4SI)
+OB_DEF_VAR (s390_vec_mule_u64,          s390_vmleg,         B_VXE3,            
 0,                  BT_OV_UV1TI_UV2DI_UV2DI)
+OB_DEF_VAR (s390_vec_mule_s64,          s390_vmeg,          B_VXE3,            
 0,                  BT_OV_V1TI_V2DI_V2DI)
 
 B_DEF      (s390_vmleb,                 vec_widen_umult_even_v16qi,0,          
 B_VX,               0,                  BT_FN_UV8HI_UV16QI_UV16QI)
 B_DEF      (s390_vmeb,                  vec_widen_smult_even_v16qi,0,          
 B_VX,               0,                  BT_FN_V8HI_V16QI_V16QI)
@@ -1870,14 +1963,18 @@ B_DEF      (s390_vmleh,                 
vec_widen_umult_even_v8hi,0,
 B_DEF      (s390_vmeh,                  vec_widen_smult_even_v8hi,0,           
 B_VX,               0,                  BT_FN_V4SI_V8HI_V8HI)
 B_DEF      (s390_vmlef,                 vec_widen_umult_even_v4si,0,           
 B_VX,               0,                  BT_FN_UV2DI_UV4SI_UV4SI)
 B_DEF      (s390_vmef,                  vec_widen_smult_even_v4si,0,           
 B_VX,               0,                  BT_FN_V2DI_V4SI_V4SI)
+B_DEF      (s390_vmleg,                 vec_widen_umult_even_v2di,0,           
 B_VXE3,             0,                  BT_FN_UINT128_UV2DI_UV2DI)
+B_DEF      (s390_vmeg,                  vec_widen_smult_even_v2di,0,           
 B_VXE3,             0,                  BT_FN_INT128_V2DI_V2DI)
 
-OB_DEF     (s390_vec_mulo,              s390_vec_mulo_u8,   s390_vec_mulo_s32, 
 B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
+OB_DEF     (s390_vec_mulo,              s390_vec_mulo_u8,   s390_vec_mulo_s64, 
 B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_mulo_u8,           s390_vmlob,         0,                 
 0,                  BT_OV_UV8HI_UV16QI_UV16QI)
 OB_DEF_VAR (s390_vec_mulo_s8,           s390_vmob,          0,                 
 0,                  BT_OV_V8HI_V16QI_V16QI)
 OB_DEF_VAR (s390_vec_mulo_u16,          s390_vmloh,         0,                 
 0,                  BT_OV_UV4SI_UV8HI_UV8HI)
 OB_DEF_VAR (s390_vec_mulo_s16,          s390_vmoh,          0,                 
 0,                  BT_OV_V4SI_V8HI_V8HI)
 OB_DEF_VAR (s390_vec_mulo_u32,          s390_vmlof,         0,                 
 0,                  BT_OV_UV2DI_UV4SI_UV4SI)
 OB_DEF_VAR (s390_vec_mulo_s32,          s390_vmof,          0,                 
 0,                  BT_OV_V2DI_V4SI_V4SI)
+OB_DEF_VAR (s390_vec_mulo_u64,          s390_vmlog,         B_VXE3,            
 0,                  BT_OV_UV1TI_UV2DI_UV2DI)
+OB_DEF_VAR (s390_vec_mulo_s64,          s390_vmog,          B_VXE3,            
 0,                  BT_OV_V1TI_V2DI_V2DI)
 
 B_DEF      (s390_vmlob,                 vec_widen_umult_odd_v16qi,0,           
 B_VX,               0,                  BT_FN_UV8HI_UV16QI_UV16QI)
 B_DEF      (s390_vmob,                  vec_widen_smult_odd_v16qi,0,           
 B_VX,               0,                  BT_FN_V8HI_V16QI_V16QI)
@@ -1885,6 +1982,8 @@ B_DEF      (s390_vmloh,                 
vec_widen_umult_odd_v8hi,0,
 B_DEF      (s390_vmoh,                  vec_widen_smult_odd_v8hi,0,            
 B_VX,               0,                  BT_FN_V4SI_V8HI_V8HI)
 B_DEF      (s390_vmlof,                 vec_widen_umult_odd_v4si,0,            
 B_VX,               0,                  BT_FN_UV2DI_UV4SI_UV4SI)
 B_DEF      (s390_vmof,                  vec_widen_smult_odd_v4si,0,            
 B_VX,               0,                  BT_FN_V2DI_V4SI_V4SI)
+B_DEF      (s390_vmlog,                 vec_widen_umult_odd_v2di,0,            
 B_VXE3,             0,                  BT_FN_UINT128_UV2DI_UV2DI)
+B_DEF      (s390_vmog,                  vec_widen_smult_odd_v2di,0,            
 B_VXE3,             0,                  BT_FN_INT128_V2DI_V2DI)
 
 OB_DEF     (s390_vec_nor,               s390_vec_nor_b8,    
s390_vec_nor_dbl_c, B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_nor_b8,            s390_vno,           0,                 
 0,                  BT_OV_BV16QI_BV16QI_BV16QI)
@@ -1915,6 +2014,9 @@ OB_DEF_VAR (s390_vec_nor_s64_c,         s390_vno,         
  B_DEP,
 OB_DEF_VAR (s390_vec_nor_u64_a,         s390_vno,           B_DEP,             
 0,                  BT_OV_UV2DI_BV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_nor_u64_b,         s390_vno,           0,                 
 0,                  BT_OV_UV2DI_UV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_nor_u64_c,         s390_vno,           B_DEP,             
 0,                  BT_OV_UV2DI_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_nor_b128,          s390_vno,           0,                 
 0,                  BT_OV_BV1TI_BV1TI_BV1TI)
+OB_DEF_VAR (s390_vec_nor_s128,          s390_vno,           0,                 
 0,                  BT_OV_V1TI_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_nor_u128,          s390_vno,           0,                 
 0,                  BT_OV_UV1TI_UV1TI_UV1TI)
 OB_DEF_VAR (s390_vec_nor_flt_a,         s390_vno,           B_VXE | B_DEP,     
 0,                  BT_OV_V4SF_BV4SI_V4SF)
 OB_DEF_VAR (s390_vec_nor_flt_b,         s390_vno,           B_VXE,             
 0,                  BT_OV_V4SF_V4SF_V4SF)
 OB_DEF_VAR (s390_vec_nor_flt_c,         s390_vno,           B_VXE | B_DEP,     
 0,                  BT_OV_V4SF_V4SF_BV4SI)
@@ -1953,6 +2055,9 @@ OB_DEF_VAR (s390_vec_or_s64_c,          s390_vo,          
  B_DEP,
 OB_DEF_VAR (s390_vec_or_u64_a,          s390_vo,            B_DEP,             
 0,                  BT_OV_UV2DI_BV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_or_u64_b,          s390_vo,            0,                 
 0,                  BT_OV_UV2DI_UV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_or_u64_c,          s390_vo,            B_DEP,             
 0,                  BT_OV_UV2DI_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_or_b128,           s390_vo,            0,                 
 0,                  BT_OV_BV1TI_BV1TI_BV1TI)
+OB_DEF_VAR (s390_vec_or_s128,           s390_vo,            0,                 
 0,                  BT_OV_V1TI_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_or_u128,           s390_vo,            0,                 
 0,                  BT_OV_UV1TI_UV1TI_UV1TI)
 OB_DEF_VAR (s390_vec_or_flt_a,          s390_vo,            B_VXE | B_DEP,     
 0,                  BT_OV_V4SF_BV4SI_V4SF)
 OB_DEF_VAR (s390_vec_or_flt_b,          s390_vo,            B_VXE,             
 0,                  BT_OV_V4SF_V4SF_V4SF)
 OB_DEF_VAR (s390_vec_or_flt_c,          s390_vo,            B_VXE | B_DEP,     
 0,                  BT_OV_V4SF_V4SF_BV4SI)
@@ -2245,26 +2350,31 @@ OB_DEF_VAR (s390_vec_srb_dbl_s64,       s390_vsrlb,     
    0,
 
 B_DEF      (s390_vsrlb,                 vec_srbv16qi,       0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
 
-OB_DEF     (s390_vec_subc,              s390_vec_subc_u8,   s390_vec_subc_u64, 
 B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
+OB_DEF     (s390_vec_subc,              s390_vec_subc_u8,   
s390_vec_subc_u128, B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_subc_u8,           s390_vscbib,        0,                 
 0,                  BT_OV_UV16QI_UV16QI_UV16QI)
 OB_DEF_VAR (s390_vec_subc_u16,          s390_vscbih,        0,                 
 0,                  BT_OV_UV8HI_UV8HI_UV8HI)
 OB_DEF_VAR (s390_vec_subc_u32,          s390_vscbif,        0,                 
 0,                  BT_OV_UV4SI_UV4SI_UV4SI)
 OB_DEF_VAR (s390_vec_subc_u64,          s390_vscbig,        0,                 
 0,                  BT_OV_UV2DI_UV2DI_UV2DI)
+OB_DEF_VAR (s390_vec_subc_u128,         s390_vscbiq,        0,                 
 0,                  BT_OV_UV1TI_UV1TI_UV1TI)
 
 B_DEF      (s390_vscbib,                vscbib_v16qi,       0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
 B_DEF      (s390_vscbih,                vscbih_v8hi,        0,                 
 B_VX,               0,                  BT_FN_UV8HI_UV8HI_UV8HI)
 B_DEF      (s390_vscbif,                vscbif_v4si,        0,                 
 B_VX,               0,                  BT_FN_UV4SI_UV4SI_UV4SI)
 B_DEF      (s390_vscbig,                vscbig_v2di,        0,                 
 B_VX,               0,                  BT_FN_UV2DI_UV2DI_UV2DI)
 
+B_DEF      (s390_vec_sube,              vsbiq,              0,                 
 B_VX,               0,                  BT_FN_UV1TI_UV1TI_UV1TI_UV1TI)
+
+B_DEF      (s390_vec_subec,             vsbcbiq,            0,                 
 B_VX,               0,                  BT_FN_UV1TI_UV1TI_UV1TI_UV1TI)
+
 /* The builtin definitions requires these to use vector unsigned char.
    But we want the GCC low-level builtins and the insn patterns to
    allow int128_t and TImode.  So we rely on s390_expand_builtin to
    switch modes.  */
 
-B_DEF      (s390_vec_sub_u128,          subti3,             0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
-B_DEF      (s390_vec_subc_u128,         vscbiq_ti,          0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
-B_DEF      (s390_vec_sube_u128,         vsbiq,              0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
-B_DEF      (s390_vec_subec_u128,        vsbcbiq,            0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vec_sub_u128,          subti3,             0,                 
 B_DEP | B_VX,       0,                  BT_FN_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vec_subc_u128,         vscbiq_ti,          0,                 
 B_DEP | B_VX,       0,                  BT_FN_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vec_sube_u128,         vsbiq,              0,                 
 B_DEP | B_VX,       0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vec_subec_u128,        vsbcbiq,            0,                 
 B_DEP | B_VX,       0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
 
 B_DEF      (s390_vsq,                   subti3,             0,                 
 B_VX,               0,                  BT_FN_INT128_INT128_INT128)
 B_DEF      (s390_vscbiq,                vscbiq_ti,          0,                 
 B_VX,               0,                  BT_FN_UINT128_UINT128_UINT128)
@@ -2278,10 +2388,14 @@ OB_DEF_VAR (s390_vec_sum2_u32,          s390_vsumgf,    
    0,
 B_DEF      (s390_vsumgh,                vec_sum2v8hi,       0,                 
 B_VX,               0,                  BT_FN_UV2DI_UV8HI_UV8HI)
 B_DEF      (s390_vsumgf,                vec_sum2v4si,       0,                 
 B_VX,               0,                  BT_FN_UV2DI_UV4SI_UV4SI)
 
-OB_DEF     (s390_vec_sum_u128,          
s390_vec_sum_u128_u32,s390_vec_sum_u128_u64,B_VX,           
BT_FN_OV4SI_OV4SI_OV4SI)
+OB_DEF     (s390_vec_sum_u128,          
s390_vec_sum_u128_u32,s390_vec_sum_u128_u64,B_DEP | B_VX,   
BT_FN_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_sum_u128_u32,      s390_vsumqf,        0,                 
 0,                  BT_OV_UV16QI_UV4SI_UV4SI)
 OB_DEF_VAR (s390_vec_sum_u128_u64,      s390_vsumqg,        0,                 
 0,                  BT_OV_UV16QI_UV2DI_UV2DI)
 
+OB_DEF     (s390_vec_sum,               s390_vec_sum_u32,s390_vec_sum_u64,     
 B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
+OB_DEF_VAR (s390_vec_sum_u32,           s390_vsumqf,        0,                 
 0,                  BT_OV_UV1TI_UV4SI_UV4SI)
+OB_DEF_VAR (s390_vec_sum_u64,           s390_vsumqg,        0,                 
 0,                  BT_OV_UV1TI_UV2DI_UV2DI)
+
 B_DEF      (s390_vsumqf,                vec_sum_u128v4si,   0,                 
 B_VX,               0,                  BT_FN_UINT128_UV4SI_UV4SI)
 B_DEF      (s390_vsumqg,                vec_sum_u128v2di,   0,                 
 B_VX,               0,                  BT_FN_UINT128_UV2DI_UV2DI)
 
@@ -2301,12 +2415,15 @@ OB_DEF_VAR (s390_vec_test_mask_s32,     s390_vtm,       
    0,
 OB_DEF_VAR (s390_vec_test_mask_u32,     s390_vtm,           0,                 
 0,                  BT_OV_INT_UV4SI_UV4SI)
 OB_DEF_VAR (s390_vec_test_mask_s64,     s390_vtm,           0,                 
 0,                  BT_OV_INT_V2DI_UV2DI)
 OB_DEF_VAR (s390_vec_test_mask_u64,     s390_vtm,           0,                 
 0,                  BT_OV_INT_UV2DI_UV2DI)
+OB_DEF_VAR (s390_vec_test_mask_s128,    s390_vtm,           0,                 
 0,                  BT_OV_INT_V1TI_UV1TI)
+OB_DEF_VAR (s390_vec_test_mask_u128,    s390_vtm,           0,                 
 0,                  BT_OV_INT_UV1TI_UV1TI)
 OB_DEF_VAR (s390_vec_test_mask_flt,     s390_vtm,           B_VXE,             
 0,                  BT_OV_INT_V4SF_UV4SI)
 OB_DEF_VAR (s390_vec_test_mask_dbl,     s390_vtm,           0,                 
 0,                  BT_OV_INT_V2DF_UV2DI)
 
 B_DEF      (s390_vtm,                   vec_test_mask_intv16qi,0,              
 B_VX,               0,                  BT_FN_INT_UV16QI_UV16QI)
 
-B_DEF      (s390_vec_msum_u128,         vec_msumv2di,       0,                 
 B_VXE,              O4_M12,             BT_FN_UV16QI_UV2DI_UV2DI_UV16QI_INT)
+B_DEF      (s390_vec_msum,              vec_msumv2di,       0,                 
 B_VXE,              O4_M12,             BT_FN_UV1TI_UV2DI_UV2DI_UV1TI_INT)
+B_DEF      (s390_vec_msum_u128,         vec_msumv2di,       0,                 
 B_DEP | B_VXE,      O4_M12,             BT_FN_UV16QI_UV2DI_UV2DI_UV16QI_INT)
 B_DEF      (s390_vmslg,                 vmslg,              0,                 
 B_VXE,              O4_M12,             BT_FN_UINT128_UV2DI_UV2DI_UINT128_INT)
 
 OB_DEF     (s390_vec_eqv,               s390_vec_eqv_b8,    
s390_vec_eqv_dbl_c, B_VXE,              BT_FN_OV4SI_OV4SI_OV4SI)
@@ -2338,6 +2455,9 @@ OB_DEF_VAR (s390_vec_eqv_s64_c,         s390_vnx,         
  B_DEP,
 OB_DEF_VAR (s390_vec_eqv_u64_a,         s390_vnx,           B_DEP,             
 0,                  BT_OV_UV2DI_BV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_eqv_u64_b,         s390_vnx,           0,                 
 0,                  BT_OV_UV2DI_UV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_eqv_u64_c,         s390_vnx,           B_DEP,             
 0,                  BT_OV_UV2DI_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_eqv_b128,          s390_vnx,           0,                 
 0,                  BT_OV_BV1TI_BV1TI_BV1TI)
+OB_DEF_VAR (s390_vec_eqv_s128,          s390_vnx,           0,                 
 0,                  BT_OV_V1TI_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_eqv_u128,          s390_vnx,           0,                 
 0,                  BT_OV_UV1TI_UV1TI_UV1TI)
 OB_DEF_VAR (s390_vec_eqv_flt_a,         s390_vnx,           B_VXE | B_DEP,     
 0,                  BT_OV_V4SF_BV4SI_V4SF)
 OB_DEF_VAR (s390_vec_eqv_flt_b,         s390_vnx,           B_VXE,             
 0,                  BT_OV_V4SF_V4SF_V4SF)
 OB_DEF_VAR (s390_vec_eqv_flt_c,         s390_vnx,           B_VXE | B_DEP,     
 0,                  BT_OV_V4SF_V4SF_BV4SI)
@@ -2376,6 +2496,9 @@ OB_DEF_VAR (s390_vec_nand_s64_c,        s390_vnn,         
  B_DEP,
 OB_DEF_VAR (s390_vec_nand_u64_a,        s390_vnn,           B_DEP,             
 0,                  BT_OV_UV2DI_BV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_nand_u64_b,        s390_vnn,           0,                 
 0,                  BT_OV_UV2DI_UV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_nand_u64_c,        s390_vnn,           B_DEP,             
 0,                  BT_OV_UV2DI_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_nand_b128,         s390_vnn,           0,                 
 0,                  BT_OV_BV1TI_BV1TI_BV1TI)
+OB_DEF_VAR (s390_vec_nand_s128,         s390_vnn,           0,                 
 0,                  BT_OV_V1TI_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_nand_u128,         s390_vnn,           0,                 
 0,                  BT_OV_UV1TI_UV1TI_UV1TI)
 OB_DEF_VAR (s390_vec_nand_flt_a,        s390_vnn,           B_DEP,             
 0,                  BT_OV_V4SF_BV4SI_V4SF)
 OB_DEF_VAR (s390_vec_nand_flt_b,        s390_vnn,           0,                 
 0,                  BT_OV_V4SF_V4SF_V4SF)
 OB_DEF_VAR (s390_vec_nand_flt_c,        s390_vnn,           B_DEP,             
 0,                  BT_OV_V4SF_V4SF_BV4SI)
@@ -2414,6 +2537,9 @@ OB_DEF_VAR (s390_vec_orc_s64_c,         s390_voc,         
  B_DEP,
 OB_DEF_VAR (s390_vec_orc_u64_a,         s390_voc,           B_DEP,             
 0,                  BT_OV_UV2DI_BV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_orc_u64_b,         s390_voc,           0,                 
 0,                  BT_OV_UV2DI_UV2DI_UV2DI)
 OB_DEF_VAR (s390_vec_orc_u64_c,         s390_voc,           B_DEP,             
 0,                  BT_OV_UV2DI_UV2DI_BV2DI)
+OB_DEF_VAR (s390_vec_orc_b128,          s390_voc,           0,                 
 0,                  BT_OV_BV1TI_BV1TI_BV1TI)
+OB_DEF_VAR (s390_vec_orc_s128,          s390_voc,           0,                 
 0,                  BT_OV_V1TI_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_orc_u128,          s390_voc,           0,                 
 0,                  BT_OV_UV1TI_UV1TI_UV1TI)
 OB_DEF_VAR (s390_vec_orc_flt_a,         s390_voc,           B_DEP,             
 0,                  BT_OV_V4SF_BV4SI_V4SF)
 OB_DEF_VAR (s390_vec_orc_flt_b,         s390_voc,           0,                 
 0,                  BT_OV_V4SF_V4SF_V4SF)
 OB_DEF_VAR (s390_vec_orc_flt_c,         s390_voc,           B_DEP,             
 0,                  BT_OV_V4SF_V4SF_BV4SI)
@@ -2921,6 +3047,8 @@ OB_DEF_VAR (s390_vec_revb_s32,          s390_vlbrf,       
  0,
 OB_DEF_VAR (s390_vec_revb_u32,          s390_vlbrf,         0,                 
 0,                  BT_OV_UV4SI_UV4SI)
 OB_DEF_VAR (s390_vec_revb_s64,          s390_vlbrg,         0,                 
 0,                  BT_OV_V2DI_V2DI)
 OB_DEF_VAR (s390_vec_revb_u64,          s390_vlbrg,         0,                 
 0,                  BT_OV_UV2DI_UV2DI)
+OB_DEF_VAR (s390_vec_revb_s128,         s390_vlbrq,         0,                 
 0,                  BT_OV_V1TI_V1TI)
+OB_DEF_VAR (s390_vec_revb_u128,         s390_vlbrq,         0,                 
 0,                  BT_OV_UV1TI_UV1TI)
 OB_DEF_VAR (s390_vec_revb_flt,          s390_vlbrf_flt,     B_VXE,             
 0,                  BT_OV_V4SF_V4SF)
 OB_DEF_VAR (s390_vec_revb_dbl,          s390_vlbrg_dbl,     0,                 
 0,                  BT_OV_V2DF_V2DF)
 
diff --git a/gcc/config/s390/vecintrin.h b/gcc/config/s390/vecintrin.h
index ce422c7539d8..e16216964cda 100644
--- a/gcc/config/s390/vecintrin.h
+++ b/gcc/config/s390/vecintrin.h
@@ -80,6 +80,8 @@ __lcbb(const void *ptr, int bndry)
   return __builtin_s390_lcbb (ptr, code);
 }
 
+#define vec_adde __builtin_s390_vec_adde
+#define vec_addec __builtin_s390_vec_addec
 #define vec_all_nle(X, Y) vec_all_nge ((Y), (X))
 #define vec_all_nlt(X, Y) vec_all_ngt ((Y), (X))
 #define vec_any_nle(X, Y) vec_any_nge ((Y), (X))
@@ -97,6 +99,8 @@ __lcbb(const void *ptr, int bndry)
 #define vec_splat_s32 __builtin_s390_vec_splat_s32
 #define vec_splat_u64 __builtin_s390_vec_splat_u64
 #define vec_splat_s64 __builtin_s390_vec_splat_s64
+#define vec_sube __builtin_s390_vec_sube
+#define vec_subec __builtin_s390_vec_subec
 #define vec_checksum __builtin_s390_vcksm
 #define vec_gfmsum_128 __builtin_s390_vgfmg_128
 #define vec_gfmsum_accum_128 __builtin_s390_vgfmag_128
@@ -191,6 +195,7 @@ __lcbb(const void *ptr, int bndry)
 #define vec_any_nge __builtin_s390_vec_any_nge
 #define vec_any_ngt __builtin_s390_vec_any_ngt
 #define vec_avg __builtin_s390_vec_avg
+#define vec_bperm __builtin_s390_vec_bperm
 #define vec_bperm_u128 __builtin_s390_vec_bperm_u128
 #define vec_cmpeq __builtin_s390_vec_cmpeq
 #define vec_cmpeq_idx __builtin_s390_vec_cmpeq_idx
@@ -263,6 +268,7 @@ __lcbb(const void *ptr, int bndry)
 #define vec_mladd __builtin_s390_vec_mladd
 #define vec_moadd __builtin_s390_vec_moadd
 #define vec_msub __builtin_s390_vec_msub
+#define vec_msum __builtin_s390_vec_msum
 #define vec_msum_u128 __builtin_s390_vec_msum_u128
 #define vec_mule __builtin_s390_vec_mule
 #define vec_mulh __builtin_s390_vec_mulh
@@ -313,6 +319,7 @@ __lcbb(const void *ptr, int bndry)
 #define vec_subc_u128 __builtin_s390_vec_subc_u128
 #define vec_sube_u128 __builtin_s390_vec_sube_u128
 #define vec_subec_u128 __builtin_s390_vec_subec_u128
+#define vec_sum __builtin_s390_vec_sum
 #define vec_sum2 __builtin_s390_vec_sum2
 #define vec_sum4 __builtin_s390_vec_sum4
 #define vec_sum_u128 __builtin_s390_vec_sum_u128
diff --git a/gcc/config/s390/vector.md b/gcc/config/s390/vector.md
index 66ce1599fa7d..b5941a814c17 100644
--- a/gcc/config/s390/vector.md
+++ b/gcc/config/s390/vector.md
@@ -30,6 +30,12 @@
 (define_mode_iterator V_HW  [V16QI V8HI V4SI V2DI V1TI TI V2DF
                             (V4SF "TARGET_VXE") (V1TF "TARGET_VXE")
                             (TF "TARGET_VXE")])
+(define_mode_iterator V_HW1 [V16QI V8HI V4SI V2DI V1TI V2DF
+                            (V4SF "TARGET_VXE") (V1TF "TARGET_VXE")
+                            (TF "TARGET_VXE")])
+(define_mode_iterator V_HW2 [V16QI V8HI V4SI V2DI V2DF (V4SF "TARGET_VXE")
+                            (V1TF "TARGET_VXE") (TF "TARGET_VXE")])
+(define_mode_iterator V_HW3 [V16QI V8HI V4SI V2DI V1TI TI V4SF V2DF V1TF TF])
 
 (define_mode_iterator VT_HW_HSDT [V8HI V4SI V4SF V2DI V2DF V1TI V1TF TI TF])
 (define_mode_iterator V_HW_HSD [V8HI V4SI (V4SF "TARGET_VXE") V2DI V2DF])
@@ -39,8 +45,12 @@
 
 ; All full size integer vector modes supported in a vector register + TImode
 (define_mode_iterator VIT_HW    [V16QI V8HI V4SI V2DI V1TI TI])
+(define_mode_iterator VIT_HW_VXE3_T [V16QI V8HI V4SI V2DI (V1TI "TARGET_VXE3") 
(TI "TARGET_VXE3")])
+(define_mode_iterator VIT_HW_VXE3_DT [V16QI V8HI V4SI (V2DI "TARGET_VXE3") 
(V1TI "TARGET_VXE3") (TI "TARGET_VXE3")])
 (define_mode_iterator VI_HW     [V16QI V8HI V4SI V2DI])
+(define_mode_iterator VI_HW_VXE3 [V16QI V8HI V4SI (V2DI "TARGET_VXE3")])
 (define_mode_iterator VI_HW_QHS [V16QI V8HI V4SI])
+(define_mode_iterator VI_HW_SDT [V4SI  V2DI V1TI TI])
 (define_mode_iterator VI_HW_HSD [V8HI  V4SI V2DI])
 (define_mode_iterator VI_HW_HSDT [V8HI V4SI V2DI V1TI TI])
 (define_mode_iterator VI_HW_HS  [V8HI  V4SI])
@@ -54,14 +64,15 @@
 ; 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 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])
 
 (define_mode_iterator VFT [(V1SF "TARGET_VXE") (V2SF "TARGET_VXE") (V4SF 
"TARGET_VXE")
                           V1DF V2DF
                           (V1TF "TARGET_VXE") (TF "TARGET_VXE")])
 
-; All modes present in V_HW and VFT.
-(define_mode_iterator V_HW_FT [V16QI V8HI V4SI V2DI (V1TI "TARGET_VXE") V1DF
+; All modes present in V_HW1 and VFT.
+(define_mode_iterator V_HW1_FT [V16QI V8HI V4SI V2DI V1TI V1DF
                               V2DF (V1SF "TARGET_VXE") (V2SF "TARGET_VXE")
                               (V4SF "TARGET_VXE") (V1TF "TARGET_VXE")
                               (TF "TARGET_VXE")])
@@ -139,7 +150,8 @@
 (define_mode_attr w [(V1QI "")  (V2QI "")  (V4QI "")  (V8QI "") (V16QI "")
                     (V1HI "w") (V2HI "w") (V4HI "w") (V8HI "w")
                     (V1SI "")  (V2SI "")  (V4SI "")
-                    (V1DI "")  (V2DI "")])
+                    (V1DI "")  (V2DI "")
+                    (V1TI "")  (TI "")])
 
 ; Resulting mode of a vector comparison.  For floating point modes an
 ; integer vector mode with the same element size is picked.
@@ -173,7 +185,7 @@
 (define_mode_attr vec_double [(V1QI "V1HI") (V2QI "V1HI") (V4QI "V2HI") (V8QI 
"V4HI") (V16QI "V8HI")
                              (V1HI "V1SI") (V2HI "V1SI") (V4HI "V2SI") (V8HI 
"V4SI")
                              (V1SI "V1DI") (V2SI "V1DI") (V4SI "V2DI")
-                             (V1DI "V1TI") (V2DI "V1TI")
+                             (V1DI "V1TI") (V2DI "TI")
                              (V1SF "V1DF") (V2SF "V1DF") (V4SF "V2DF")])
 
 ; Vector with shrinked element size but twice the number of elements.
@@ -1121,11 +1133,11 @@
   "vs<bhfgq>\t%v0,%v1,%v2"
   [(set_attr "op_type" "VRR")])
 
-; vmlb, vmlhw, vmlf
+; vmlb, vmlhw, vmlf, vmlg, vmlq
 (define_insn "mul<mode>3"
-  [(set (match_operand:VI_QHS              0 "register_operand" "=v")
-       (mult:VI_QHS (match_operand:VI_QHS 1 "register_operand"  "v")
-                    (match_operand:VI_QHS 2 "register_operand"  "v")))]
+  [(set (match_operand:VIT_HW_VXE3_DT                      0 
"register_operand" "=v")
+       (mult:VIT_HW_VXE3_DT (match_operand:VIT_HW_VXE3_DT 1 "register_operand" 
 "v")
+                            (match_operand:VIT_HW_VXE3_DT 2 "register_operand" 
 "v")))]
   "TARGET_VX"
   "vml<bhfgq><w>\t%v0,%v1,%v2"
   [(set_attr "op_type" "VRR")])
@@ -1541,41 +1553,41 @@
   "vmxl<bhfgq>\t%v0,%v1,%v2"
   [(set_attr "op_type" "VRR")])
 
-; vmeb, vmeh, vmef
+; vmeb, vmeh, vmef, vmeg
 (define_insn "vec_widen_smult_even_<mode>"
-  [(set (match_operand:<vec_double>                 0 "register_operand" "=v")
-       (unspec:<vec_double> [(match_operand:VI_QHS 1 "register_operand"  "v")
-                             (match_operand:VI_QHS 2 "register_operand"  "v")]
+  [(set (match_operand:<vec_double>                  0 "register_operand" "=v")
+       (unspec:<vec_double> [(match_operand:VI_VXE3 1 "register_operand"  "v")
+                             (match_operand:VI_VXE3 2 "register_operand"  "v")]
                             UNSPEC_VEC_SMULT_EVEN))]
   "TARGET_VX"
   "vme<bhfgq>\t%v0,%v1,%v2"
   [(set_attr "op_type" "VRR")])
 
-; vmleb, vmleh, vmlef
+; vmleb, vmleh, vmlef, vmleg
 (define_insn "vec_widen_umult_even_<mode>"
-  [(set (match_operand:<vec_double>                 0 "register_operand" "=v")
-       (unspec:<vec_double> [(match_operand:VI_QHS 1 "register_operand"  "v")
-                             (match_operand:VI_QHS 2 "register_operand"  "v")]
+  [(set (match_operand:<vec_double>                  0 "register_operand" "=v")
+       (unspec:<vec_double> [(match_operand:VI_VXE3 1 "register_operand"  "v")
+                             (match_operand:VI_VXE3 2 "register_operand"  "v")]
                             UNSPEC_VEC_UMULT_EVEN))]
   "TARGET_VX"
   "vmle<bhfgq>\t%v0,%v1,%v2"
   [(set_attr "op_type" "VRR")])
 
-; vmob, vmoh, vmof
+; vmob, vmoh, vmof, vmog
 (define_insn "vec_widen_smult_odd_<mode>"
-  [(set (match_operand:<vec_double>                 0 "register_operand" "=v")
-       (unspec:<vec_double> [(match_operand:VI_QHS 1 "register_operand"  "v")
-                             (match_operand:VI_QHS 2 "register_operand"  "v")]
+  [(set (match_operand:<vec_double>                  0 "register_operand" "=v")
+       (unspec:<vec_double> [(match_operand:VI_VXE3 1 "register_operand"  "v")
+                             (match_operand:VI_VXE3 2 "register_operand"  "v")]
                             UNSPEC_VEC_SMULT_ODD))]
   "TARGET_VX"
   "vmo<bhfgq>\t%v0,%v1,%v2"
   [(set_attr "op_type" "VRR")])
 
-; vmlob, vmloh, vmlof
+; vmlob, vmloh, vmlof, vmlog
 (define_insn "vec_widen_umult_odd_<mode>"
-  [(set (match_operand:<vec_double>                 0 "register_operand" "=v")
-       (unspec:<vec_double> [(match_operand:VI_QHS 1 "register_operand"  "v")
-                             (match_operand:VI_QHS 2 "register_operand"  "v")]
+  [(set (match_operand:<vec_double>                  0 "register_operand" "=v")
+       (unspec:<vec_double> [(match_operand:VI_VXE3 1 "register_operand"  "v")
+                             (match_operand:VI_VXE3 2 "register_operand"  "v")]
                             UNSPEC_VEC_UMULT_ODD))]
   "TARGET_VX"
   "vmlo<bhfgq>\t%v0,%v1,%v2"
diff --git a/gcc/config/s390/vx-builtins.md b/gcc/config/s390/vx-builtins.md
index 89cd5205719a..abdc583e0e37 100644
--- a/gcc/config/s390/vx-builtins.md
+++ b/gcc/config/s390/vx-builtins.md
@@ -520,23 +520,23 @@
 ; swapped in s390-c.cc when we get here.
 
 (define_insn "vsel<mode>"
-  [(set (match_operand:V_HW_FT               0 "register_operand" "=v")
-       (ior:V_HW_FT
-        (and:V_HW_FT (match_operand:V_HW_FT 1 "register_operand"  "v")
-                     (match_operand:V_HW_FT 3 "register_operand"  "v"))
-        (and:V_HW_FT (not:V_HW_FT (match_dup 3))
-                     (match_operand:V_HW_FT 2 "register_operand"  "v"))))]
+  [(set (match_operand:V_HW1_FT                0 "register_operand" "=v")
+       (ior:V_HW1_FT
+        (and:V_HW1_FT (match_operand:V_HW1_FT 1 "register_operand"  "v")
+                     (match_operand:V_HW1_FT  3 "register_operand"  "v"))
+        (and:V_HW1_FT (not:V_HW1_FT (match_dup 3))
+                     (match_operand:V_HW1_FT  2 "register_operand"  "v"))))]
   "TARGET_VX"
   "vsel\t%v0,%1,%2,%3"
   [(set_attr "op_type" "VRR")])
 
 (define_insn "*vsel<mode>_swapped"
-  [(set (match_operand:V_HW_FT               0 "register_operand" "=v")
-       (ior:V_HW_FT
-        (and:V_HW_FT (not:V_HW_FT (match_operand:V_HW_FT 3 "register_operand"  
"v"))
-                     (match_operand:V_HW_FT 1 "register_operand"  "v"))
-        (and:V_HW_FT (match_dup 3)
-                     (match_operand:V_HW_FT 2 "register_operand"  "v"))))]
+  [(set (match_operand:V_HW1_FT               0 "register_operand" "=v")
+       (ior:V_HW1_FT
+        (and:V_HW1_FT (not:V_HW1_FT (match_operand:V_HW1_FT 3 
"register_operand"  "v"))
+                     (match_operand:V_HW1_FT 1 "register_operand"  "v"))
+        (and:V_HW1_FT (match_dup 3)
+                     (match_operand:V_HW1_FT 2 "register_operand"  "v"))))]
   "TARGET_VX"
   "vsel\t%v0,%2,%1,%3"
   [(set_attr "op_type" "VRR")])
@@ -612,19 +612,19 @@
 
 ; Vector unpack high
 
-; vuphb, vuphh, vuphf
+; vuphb, vuphh, vuphf, vuphg
 (define_insn "vec_unpackh<mode>"
-  [(set (match_operand:<vec_double>                    0 "register_operand" 
"=v")
-       (unspec:<vec_double> [(match_operand:VI_HW_QHS 1 "register_operand"  
"v")]
+  [(set (match_operand:<vec_double>                     0 "register_operand" 
"=v")
+       (unspec:<vec_double> [(match_operand:VI_HW_VXE3 1 "register_operand"  
"v")]
                             UNSPEC_VEC_UNPACKH))]
   "TARGET_VX"
   "vuph<bhfgq>\t%v0,%v1"
   [(set_attr "op_type" "VRR")])
 
-; vuplhb, vuplhh, vuplhf
+; vuplhb, vuplhh, vuplhf, vuplhg
 (define_insn "vec_unpackh_l<mode>"
-  [(set (match_operand:<vec_double>                    0 "register_operand" 
"=v")
-       (unspec:<vec_double> [(match_operand:VI_HW_QHS 1 "register_operand"  
"v")]
+  [(set (match_operand:<vec_double>                     0 "register_operand" 
"=v")
+       (unspec:<vec_double> [(match_operand:VI_HW_VXE3 1 "register_operand"  
"v")]
                             UNSPEC_VEC_UNPACKH_L))]
   "TARGET_VX"
   "vuplh<bhfgq>\t%v0,%v1"
@@ -633,19 +633,19 @@
 
 ; Vector unpack low
 
-; vuplb, vuplhw, vuplf
+; vuplb, vuplhw, vuplf, vuplg
 (define_insn "vec_unpackl<mode>"
-  [(set (match_operand:<vec_double>                    0 "register_operand" 
"=v")
-       (unspec:<vec_double> [(match_operand:VI_HW_QHS 1 "register_operand"  
"v")]
+  [(set (match_operand:<vec_double>                     0 "register_operand" 
"=v")
+       (unspec:<vec_double> [(match_operand:VI_HW_VXE3 1 "register_operand"  
"v")]
                             UNSPEC_VEC_UNPACKL))]
   "TARGET_VX"
   "vupl<bhfgq><w>\t%v0,%v1"
   [(set_attr "op_type" "VRR")])
 
-; vupllb, vupllh, vupllf
+; vupllb, vupllh, vupllf, vupllg
 (define_insn "vec_unpackl_l<mode>"
-  [(set (match_operand:<vec_double>                    0 "register_operand" 
"=v")
-       (unspec:<vec_double> [(match_operand:VI_HW_QHS 1 "register_operand"  
"v")]
+  [(set (match_operand:<vec_double>                     0 "register_operand" 
"=v")
+       (unspec:<vec_double> [(match_operand:VI_HW_VXE3 1 "register_operand"  
"v")]
                             UNSPEC_VEC_UNPACKL_L))]
   "TARGET_VX"
   "vupll<bhfgq>\t%v0,%v1"
@@ -708,24 +708,24 @@
 
 ; Vector average
 
-; vavgb, vavgh, vavgf, vavgg
+; vavgb, vavgh, vavgf, vavgg, vavgq
 (define_insn "vec_avg<mode>"
-  [(set (match_operand:VI_HW                0 "register_operand" "=v")
-       (unspec:VI_HW [(match_operand:VI_HW 1 "register_operand"  "v")
-                      (match_operand:VI_HW 2 "register_operand"  "v")]
-                     UNSPEC_VEC_AVG))]
+  [(set (match_operand:VIT_HW_VXE3_T                        0 
"register_operand" "=v")
+       (unspec:VIT_HW_VXE3_T [(match_operand:VIT_HW_VXE3_T 1 
"register_operand"  "v")
+                              (match_operand:VIT_HW_VXE3_T 2 
"register_operand"  "v")]
+                             UNSPEC_VEC_AVG))]
   "TARGET_VX"
   "vavg<bhfgq>\t%v0,%v1,%v2"
   [(set_attr "op_type" "VRR")])
 
 ; Vector average logical
 
-; vavglb, vavglh, vavglf, vavglg
+; vavglb, vavglh, vavglf, vavglg, vavglq
 (define_insn "vec_avgu<mode>"
-  [(set (match_operand:VI_HW                0 "register_operand" "=v")
-       (unspec:VI_HW [(match_operand:VI_HW 1 "register_operand"  "v")
-                      (match_operand:VI_HW 2 "register_operand"  "v")]
-                     UNSPEC_VEC_AVGU))]
+  [(set (match_operand:VIT_HW_VXE3_T                        0 
"register_operand" "=v")
+       (unspec:VIT_HW_VXE3_T [(match_operand:VIT_HW_VXE3_T 1 
"register_operand"  "v")
+                              (match_operand:VIT_HW_VXE3_T 2 
"register_operand"  "v")]
+                             UNSPEC_VEC_AVGU))]
   "TARGET_VX"
   "vavgl<bhfgq>\t%v0,%v1,%v2"
   [(set_attr "op_type" "VRR")])
@@ -872,10 +872,10 @@
   [(set_attr "op_type" "VRR")])
 
 (define_insn "vec_gfmsum_accum_128"
-  [(set (match_operand:V16QI 0 "register_operand" "=v")
-       (unspec:V16QI [(match_operand:V2DI 1 "register_operand" "v")
+  [(set (match_operand:TI 0 "register_operand" "=v")
+       (unspec:TI [(match_operand:V2DI 1 "register_operand" "v")
                       (match_operand:V2DI 2 "register_operand" "v")
-                      (match_operand:V16QI 3 "register_operand" "v")]
+                      (match_operand:TI 3 "register_operand" "v")]
                      UNSPEC_VEC_GFMSUM_ACCUM_128))]
   "TARGET_VX"
   "vgfmag\t%v0,%v1,%v2,%v3"
@@ -892,37 +892,37 @@
 ; Vector multiply and add high
 
 ; vec_mladd -> vec_vmal
-; vmalb, vmalh, vmalf, vmalg
+; vmalb, vmalh, vmalf, vmalg, vmalq
 (define_insn "vec_vmal<mode>"
-  [(set (match_operand:VI_HW_QHS 0 "register_operand" "=v")
-       (unspec:VI_HW_QHS [(match_operand:VI_HW_QHS 1 "register_operand" "v")
-                          (match_operand:VI_HW_QHS 2 "register_operand" "v")
-                          (match_operand:VI_HW_QHS 3 "register_operand" "v")]
-                         UNSPEC_VEC_VMAL))]
+  [(set (match_operand:VIT_HW_VXE3_DT 0 "register_operand" "=v")
+       (unspec:VIT_HW_VXE3_DT [(match_operand:VIT_HW_VXE3_DT 1 
"register_operand" "v")
+                               (match_operand:VIT_HW_VXE3_DT 2 
"register_operand" "v")
+                               (match_operand:VIT_HW_VXE3_DT 3 
"register_operand" "v")]
+                              UNSPEC_VEC_VMAL))]
   "TARGET_VX"
   "vmal<bhfgq><w>\t%v0,%v1,%v2,%v3"
   [(set_attr "op_type" "VRR")])
 
 ; vec_mhadd -> vec_vmah/vec_vmalh
 
-; vmahb; vmahh, vmahf, vmahg
+; vmahb; vmahh, vmahf, vmahg, vmahq
 (define_insn "vec_vmah<mode>"
-  [(set (match_operand:VI_HW_QHS 0 "register_operand" "=v")
-       (unspec:VI_HW_QHS [(match_operand:VI_HW_QHS 1 "register_operand" "v")
-                          (match_operand:VI_HW_QHS 2 "register_operand" "v")
-                          (match_operand:VI_HW_QHS 3 "register_operand" "v")]
-                         UNSPEC_VEC_VMAH))]
+  [(set (match_operand:VIT_HW_VXE3_DT 0 "register_operand" "=v")
+       (unspec:VIT_HW_VXE3_DT [(match_operand:VIT_HW_VXE3_DT 1 
"register_operand" "v")
+                               (match_operand:VIT_HW_VXE3_DT 2 
"register_operand" "v")
+                               (match_operand:VIT_HW_VXE3_DT 3 
"register_operand" "v")]
+                              UNSPEC_VEC_VMAH))]
   "TARGET_VX"
   "vmah<bhfgq>\t%v0,%v1,%v2,%v3"
   [(set_attr "op_type" "VRR")])
 
-; vmalhb; vmalhh, vmalhf, vmalhg
+; vmalhb; vmalhh, vmalhf, vmalhg, vmalhq
 (define_insn "vec_vmalh<mode>"
-  [(set (match_operand:VI_HW_QHS 0 "register_operand"                   "=v")
-       (unspec:VI_HW_QHS [(match_operand:VI_HW_QHS 1 "register_operand" "v")
-                          (match_operand:VI_HW_QHS 2 "register_operand" "v")
-                          (match_operand:VI_HW_QHS 3 "register_operand" "v")]
-                         UNSPEC_VEC_VMALH))]
+  [(set (match_operand:VIT_HW_VXE3_DT 0 "register_operand"                     
   "=v")
+       (unspec:VIT_HW_VXE3_DT [(match_operand:VIT_HW_VXE3_DT 1 
"register_operand" "v")
+                               (match_operand:VIT_HW_VXE3_DT 2 
"register_operand" "v")
+                               (match_operand:VIT_HW_VXE3_DT 3 
"register_operand" "v")]
+                              UNSPEC_VEC_VMALH))]
   "TARGET_VX"
   "vmalh<bhfgq>\t%v0,%v1,%v2,%v3"
   [(set_attr "op_type" "VRR")])
@@ -932,8 +932,8 @@
 ; vmaeb; vmaeh, vmaef, vmaeg
 (define_insn "vec_vmae<mode>"
   [(set (match_operand:<vec_double> 0 "register_operand"                      
"=v")
-       (unspec:<vec_double> [(match_operand:VI_HW_QHS 1 "register_operand"    
"v")
-                             (match_operand:VI_HW_QHS 2 "register_operand"    
"v")
+       (unspec:<vec_double> [(match_operand:VI_HW_VXE3   1 "register_operand" 
"v")
+                             (match_operand:VI_HW_VXE3   2 "register_operand" 
"v")
                              (match_operand:<vec_double> 3 "register_operand" 
"v")]
                             UNSPEC_VEC_VMAE))]
   "TARGET_VX"
@@ -943,8 +943,8 @@
 ; vmaleb; vmaleh, vmalef, vmaleg
 (define_insn "vec_vmale<mode>"
   [(set (match_operand:<vec_double> 0 "register_operand"                      
"=v")
-       (unspec:<vec_double> [(match_operand:VI_HW_QHS 1 "register_operand"    
"v")
-                             (match_operand:VI_HW_QHS 2 "register_operand"    
"v")
+       (unspec:<vec_double> [(match_operand:VI_HW_VXE3   1 "register_operand" 
"v")
+                             (match_operand:VI_HW_VXE3   2 "register_operand" 
"v")
                              (match_operand:<vec_double> 3 "register_operand" 
"v")]
                             UNSPEC_VEC_VMALE))]
   "TARGET_VX"
@@ -956,8 +956,8 @@
 ; vmaob; vmaoh, vmaof, vmaog
 (define_insn "vec_vmao<mode>"
   [(set (match_operand:<vec_double> 0 "register_operand"                      
"=v")
-       (unspec:<vec_double> [(match_operand:VI_HW_QHS 1 "register_operand"    
"v")
-                             (match_operand:VI_HW_QHS 2 "register_operand"    
"v")
+       (unspec:<vec_double> [(match_operand:VI_HW_VXE3   1 "register_operand" 
"v")
+                             (match_operand:VI_HW_VXE3   2 "register_operand" 
"v")
                              (match_operand:<vec_double> 3 "register_operand" 
"v")]
                             UNSPEC_VEC_VMAO))]
   "TARGET_VX"
@@ -967,8 +967,8 @@
 ; vmalob; vmaloh, vmalof, vmalog
 (define_insn "vec_vmalo<mode>"
   [(set (match_operand:<vec_double> 0 "register_operand"                      
"=v")
-       (unspec:<vec_double> [(match_operand:VI_HW_QHS 1 "register_operand"    
"v")
-                             (match_operand:VI_HW_QHS 2 "register_operand"    
"v")
+       (unspec:<vec_double> [(match_operand:VI_HW_VXE3   1 "register_operand" 
"v")
+                             (match_operand:VI_HW_VXE3   2 "register_operand" 
"v")
                              (match_operand:<vec_double> 3 "register_operand" 
"v")]
                             UNSPEC_VEC_VMALO))]
   "TARGET_VX"
@@ -980,22 +980,22 @@
 
 ; vec_mulh -> vec_smulh/vec_umulh
 
-; vmhb, vmhh, vmhf
+; vmhb, vmhh, vmhf, vmhg, vmhq
 (define_insn "vec_smulh<mode>"
-  [(set (match_operand:VI_HW_QHS 0 "register_operand"                   "=v")
-       (unspec:VI_HW_QHS [(match_operand:VI_HW_QHS 1 "register_operand" "v")
-                          (match_operand:VI_HW_QHS 2 "register_operand" "v")]
-                         UNSPEC_VEC_SMULT_HI))]
+  [(set (match_operand:VIT_HW_VXE3_DT 0 "register_operand"                     
  "=v")
+       (unspec:VIT_HW_VXE3_DT [(match_operand:VIT_HW_VXE3_DT 1 
"register_operand" "v")
+                               (match_operand:VIT_HW_VXE3_DT 2 
"register_operand" "v")]
+                              UNSPEC_VEC_SMULT_HI))]
   "TARGET_VX"
   "vmh<bhfgq>\t%v0,%v1,%v2"
   [(set_attr "op_type" "VRR")])
 
-; vmlhb, vmlhh, vmlhf
+; vmlhb, vmlhh, vmlhf, vmlhg, vmlhq
 (define_insn "vec_umulh<mode>"
-  [(set (match_operand:VI_HW_QHS 0 "register_operand"                   "=v")
-       (unspec:VI_HW_QHS [(match_operand:VI_HW_QHS 1 "register_operand" "v")
-                          (match_operand:VI_HW_QHS 2 "register_operand" "v")]
-                         UNSPEC_VEC_UMULT_HI))]
+  [(set (match_operand:VIT_HW_VXE3_DT 0 "register_operand"                     
  "=v")
+       (unspec:VIT_HW_VXE3_DT [(match_operand:VIT_HW_VXE3_DT 1 
"register_operand" "v")
+                               (match_operand:VIT_HW_VXE3_DT 2 
"register_operand" "v")]
+                              UNSPEC_VEC_UMULT_HI))]
   "TARGET_VX"
   "vmlh<bhfgq>\t%v0,%v1,%v2"
   [(set_attr "op_type" "VRR")])

Reply via email to