diff options
author | Stefan Schulze Frielinghaus <stefansf@gcc.gnu.org> | 2025-01-20 10:01:08 +0100 |
---|---|---|
committer | Stefan Schulze Frielinghaus <stefansf@gcc.gnu.org> | 2025-01-20 10:01:08 +0100 |
commit | 447b917e98ee34e2eae455b43784ab6a86b604f2 (patch) | |
tree | d1ff88af20f8d271da8221ee53f1a97f9756984f /gcc/config/s390 | |
parent | b963174abfb601bc39504d09ac6b86c53660e170 (diff) | |
download | gcc-447b917e98ee34e2eae455b43784ab6a86b604f2.zip gcc-447b917e98ee34e2eae455b43784ab6a86b604f2.tar.gz gcc-447b917e98ee34e2eae455b43784ab6a86b604f2.tar.bz2 |
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.
Diffstat (limited to 'gcc/config/s390')
-rw-r--r-- | gcc/config/s390/s390-builtin-types.def | 58 | ||||
-rw-r--r-- | gcc/config/s390/s390-builtins.def | 182 | ||||
-rw-r--r-- | gcc/config/s390/vecintrin.h | 7 | ||||
-rw-r--r-- | gcc/config/s390/vector.md | 60 | ||||
-rw-r--r-- | 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 2993aea..f995fe4 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 1700016..b8e8b64 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 ce422c7..e162169 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 66ce159..b5941a8 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 89cd520..abdc583 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")]) |