diff options
author | Stefan Schulze Frielinghaus <stefansf@gcc.gnu.org> | 2025-01-20 10:01:09 +0100 |
---|---|---|
committer | Stefan Schulze Frielinghaus <stefansf@gcc.gnu.org> | 2025-01-20 10:01:09 +0100 |
commit | adeb6ecc5d906ce2389400085f3262b4a248c71c (patch) | |
tree | 7827f072c91c3d79691a2678cb221e26c542d83e /gcc | |
parent | d71e20b889ac82c3ca14a1c5c420765a11b06df9 (diff) | |
download | gcc-adeb6ecc5d906ce2389400085f3262b4a248c71c.zip gcc-adeb6ecc5d906ce2389400085f3262b4a248c71c.tar.gz gcc-adeb6ecc5d906ce2389400085f3262b4a248c71c.tar.bz2 |
s390: arch15: Vector blend
Add instruction vblend and builtin vec_blend.
gcc/ChangeLog:
* config/s390/s390-builtins.def (s390_vec_blend): Add.
(s390_vblendb): Add.
(s390_vblendh): Add.
(s390_vblendf): Add.
(s390_vblendg): Add.
(s390_vblendq): Add.
* config/s390/s390-builtin-types.def: Update accordingly.
* config/s390/s390.md (UNSPEC_VEC_VBLEND): Add.
* config/s390/vecintrin.h (vec_blend): Define.
* config/s390/vx-builtins.md (vblend<mode>): Add.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/s390/s390-builtin-types.def | 17 | ||||
-rw-r--r-- | gcc/config/s390/s390-builtins.def | 25 | ||||
-rw-r--r-- | gcc/config/s390/s390.md | 2 | ||||
-rw-r--r-- | gcc/config/s390/vecintrin.h | 1 | ||||
-rw-r--r-- | gcc/config/s390/vx-builtins.md | 11 |
5 files changed, 56 insertions, 0 deletions
diff --git a/gcc/config/s390/s390-builtin-types.def b/gcc/config/s390/s390-builtin-types.def index 913bd032..14f4e92 100644 --- a/gcc/config/s390/s390-builtin-types.def +++ b/gcc/config/s390/s390-builtin-types.def @@ -309,24 +309,28 @@ DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_OV4SI_OV4SI, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_O DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_OV4SI_UCHAR, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_UCHAR) DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_OV4SI_UINT, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_UINT) DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_OV4SI_ULONGLONG, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_ULONGLONG) +DEF_FN_TYPE_3 (BT_FN_UINT128_UINT128_UINT128_INT128, BT_UINT128, BT_UINT128, BT_UINT128, BT_INT128) DEF_FN_TYPE_3 (BT_FN_UINT128_UINT128_UINT128_UINT128, BT_UINT128, BT_UINT128, BT_UINT128, BT_UINT128) DEF_FN_TYPE_3 (BT_FN_UINT128_UV2DI_UV2DI_UINT128, BT_UINT128, BT_UV2DI, BT_UV2DI, BT_UINT128) DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UCHAR_INT, BT_UV16QI, BT_UV16QI, BT_UCHAR, BT_INT) DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UV16QI_INT, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INT) DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UV16QI_INTPTR, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INTPTR) 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_UV16QI_UV16QI_V16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_V16QI) 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) +DEF_FN_TYPE_3 (BT_FN_UV2DI_UV2DI_UV2DI_V2DI, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_V2DI) DEF_FN_TYPE_3 (BT_FN_UV2DI_UV4SI_UV4SI_UV2DI, BT_UV2DI, BT_UV4SI, BT_UV4SI, BT_UV2DI) DEF_FN_TYPE_3 (BT_FN_UV4SI_UV2DI_UV2DI_INTPTR, BT_UV4SI, BT_UV2DI, BT_UV2DI, BT_INTPTR) DEF_FN_TYPE_3 (BT_FN_UV4SI_UV4SI_UINT_INT, BT_UV4SI, BT_UV4SI, BT_UINT, BT_INT) DEF_FN_TYPE_3 (BT_FN_UV4SI_UV4SI_UV4SI_INT, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_INT) DEF_FN_TYPE_3 (BT_FN_UV4SI_UV4SI_UV4SI_INTPTR, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_INTPTR) DEF_FN_TYPE_3 (BT_FN_UV4SI_UV4SI_UV4SI_UV4SI, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_UV4SI) +DEF_FN_TYPE_3 (BT_FN_UV4SI_UV4SI_UV4SI_V4SI, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_V4SI) DEF_FN_TYPE_3 (BT_FN_UV4SI_UV8HI_UV8HI_UV4SI, BT_UV4SI, BT_UV8HI, BT_UV8HI, BT_UV4SI) DEF_FN_TYPE_3 (BT_FN_UV8HI_UV16QI_UV16QI_UV8HI, BT_UV8HI, BT_UV16QI, BT_UV16QI, BT_UV8HI) DEF_FN_TYPE_3 (BT_FN_UV8HI_UV4SI_UV4SI_INTPTR, BT_UV8HI, BT_UV4SI, BT_UV4SI, BT_INTPTR) @@ -334,6 +338,7 @@ DEF_FN_TYPE_3 (BT_FN_UV8HI_UV8HI_USHORT_INT, BT_UV8HI, BT_UV8HI, BT_USHORT, BT_I DEF_FN_TYPE_3 (BT_FN_UV8HI_UV8HI_UV8HI_INT, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INT) DEF_FN_TYPE_3 (BT_FN_UV8HI_UV8HI_UV8HI_INTPTR, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INTPTR) DEF_FN_TYPE_3 (BT_FN_UV8HI_UV8HI_UV8HI_UV8HI, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_UV8HI) +DEF_FN_TYPE_3 (BT_FN_UV8HI_UV8HI_UV8HI_V8HI, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_V8HI) DEF_FN_TYPE_3 (BT_FN_UV8HI_V4SF_V4SF_UINT, BT_UV8HI, BT_V4SF, BT_V4SF, BT_UINT) DEF_FN_TYPE_3 (BT_FN_V16QI_UV16QI_UV16QI_INTPTR, BT_V16QI, BT_UV16QI, BT_UV16QI, BT_INTPTR) DEF_FN_TYPE_3 (BT_FN_V16QI_V16QI_V16QI_INTPTR, BT_V16QI, BT_V16QI, BT_V16QI, BT_INTPTR) @@ -401,6 +406,7 @@ DEF_OV_TYPE (BT_OV_BV16QI_BV16QI_BV16QI_BV16QI, BT_BV16QI, BT_BV16QI, BT_BV16QI, DEF_OV_TYPE (BT_OV_BV16QI_BV16QI_BV16QI_INTPTR, BT_BV16QI, BT_BV16QI, BT_BV16QI, BT_INTPTR) DEF_OV_TYPE (BT_OV_BV16QI_BV16QI_BV16QI_ULONGLONG, BT_BV16QI, BT_BV16QI, BT_BV16QI, BT_ULONGLONG) DEF_OV_TYPE (BT_OV_BV16QI_BV16QI_BV16QI_UV16QI, BT_BV16QI, BT_BV16QI, BT_BV16QI, BT_UV16QI) +DEF_OV_TYPE (BT_OV_BV16QI_BV16QI_BV16QI_V16QI, BT_BV16QI, BT_BV16QI, BT_BV16QI, BT_V16QI) DEF_OV_TYPE (BT_OV_BV16QI_BV16QI_INTPTR, BT_BV16QI, BT_BV16QI, BT_INTPTR) DEF_OV_TYPE (BT_OV_BV16QI_BV16QI_UCHAR, BT_BV16QI, BT_BV16QI, BT_UCHAR) DEF_OV_TYPE (BT_OV_BV16QI_BV16QI_UV16QI, BT_BV16QI, BT_BV16QI, BT_UV16QI) @@ -417,6 +423,7 @@ 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_BV1TI_BV1TI_V1TI, BT_BV1TI, BT_BV1TI, BT_BV1TI, BT_V1TI) DEF_OV_TYPE (BT_OV_BV1TI_BV2DI, BT_BV1TI, BT_BV2DI) DEF_OV_TYPE (BT_OV_BV2DI_BV1TI_BV1TI, BT_BV2DI, BT_BV1TI, BT_BV1TI) DEF_OV_TYPE (BT_OV_BV2DI_BV2DI, BT_BV2DI, BT_BV2DI) @@ -426,6 +433,7 @@ DEF_OV_TYPE (BT_OV_BV2DI_BV2DI_BV2DI_INT, BT_BV2DI, BT_BV2DI, BT_BV2DI, BT_INT) DEF_OV_TYPE (BT_OV_BV2DI_BV2DI_BV2DI_ULONGLONG, BT_BV2DI, BT_BV2DI, BT_BV2DI, BT_ULONGLONG) DEF_OV_TYPE (BT_OV_BV2DI_BV2DI_BV2DI_UV16QI, BT_BV2DI, BT_BV2DI, BT_BV2DI, BT_UV16QI) DEF_OV_TYPE (BT_OV_BV2DI_BV2DI_BV2DI_UV2DI, BT_BV2DI, BT_BV2DI, BT_BV2DI, BT_UV2DI) +DEF_OV_TYPE (BT_OV_BV2DI_BV2DI_BV2DI_V2DI, BT_BV2DI, BT_BV2DI, BT_BV2DI, BT_V2DI) DEF_OV_TYPE (BT_OV_BV2DI_BV2DI_UCHAR, BT_BV2DI, BT_BV2DI, BT_UCHAR) DEF_OV_TYPE (BT_OV_BV2DI_BV2DI_UV16QI, BT_BV2DI, BT_BV2DI, BT_UV16QI) DEF_OV_TYPE (BT_OV_BV2DI_BV2DI_UV2DI_ULONGLONGCONSTPTR_UCHAR, BT_BV2DI, BT_BV2DI, BT_UV2DI, BT_ULONGLONGCONSTPTR, BT_UCHAR) @@ -444,6 +452,7 @@ DEF_OV_TYPE (BT_OV_BV4SI_BV4SI_BV4SI_INTPTR, BT_BV4SI, BT_BV4SI, BT_BV4SI, BT_IN DEF_OV_TYPE (BT_OV_BV4SI_BV4SI_BV4SI_ULONGLONG, BT_BV4SI, BT_BV4SI, BT_BV4SI, BT_ULONGLONG) DEF_OV_TYPE (BT_OV_BV4SI_BV4SI_BV4SI_UV16QI, BT_BV4SI, BT_BV4SI, BT_BV4SI, BT_UV16QI) DEF_OV_TYPE (BT_OV_BV4SI_BV4SI_BV4SI_UV4SI, BT_BV4SI, BT_BV4SI, BT_BV4SI, BT_UV4SI) +DEF_OV_TYPE (BT_OV_BV4SI_BV4SI_BV4SI_V4SI, BT_BV4SI, BT_BV4SI, BT_BV4SI, BT_V4SI) DEF_OV_TYPE (BT_OV_BV4SI_BV4SI_INTPTR, BT_BV4SI, BT_BV4SI, BT_INTPTR) DEF_OV_TYPE (BT_OV_BV4SI_BV4SI_UCHAR, BT_BV4SI, BT_BV4SI, BT_UCHAR) DEF_OV_TYPE (BT_OV_BV4SI_BV4SI_UV16QI, BT_BV4SI, BT_BV4SI, BT_UV16QI) @@ -468,6 +477,7 @@ DEF_OV_TYPE (BT_OV_BV8HI_BV8HI_BV8HI_INTPTR, BT_BV8HI, BT_BV8HI, BT_BV8HI, BT_IN DEF_OV_TYPE (BT_OV_BV8HI_BV8HI_BV8HI_ULONGLONG, BT_BV8HI, BT_BV8HI, BT_BV8HI, BT_ULONGLONG) DEF_OV_TYPE (BT_OV_BV8HI_BV8HI_BV8HI_UV16QI, BT_BV8HI, BT_BV8HI, BT_BV8HI, BT_UV16QI) DEF_OV_TYPE (BT_OV_BV8HI_BV8HI_BV8HI_UV8HI, BT_BV8HI, BT_BV8HI, BT_BV8HI, BT_UV8HI) +DEF_OV_TYPE (BT_OV_BV8HI_BV8HI_BV8HI_V8HI, BT_BV8HI, BT_BV8HI, BT_BV8HI, BT_V8HI) DEF_OV_TYPE (BT_OV_BV8HI_BV8HI_INTPTR, BT_BV8HI, BT_BV8HI, BT_INTPTR) DEF_OV_TYPE (BT_OV_BV8HI_BV8HI_UCHAR, BT_BV8HI, BT_BV8HI, BT_UCHAR) DEF_OV_TYPE (BT_OV_BV8HI_BV8HI_UV16QI, BT_BV8HI, BT_BV8HI, BT_UV16QI) @@ -559,6 +569,7 @@ DEF_OV_TYPE (BT_OV_UV16QI_UV16QI_UV16QI_UINT, BT_UV16QI, BT_UV16QI, BT_UV16QI, B DEF_OV_TYPE (BT_OV_UV16QI_UV16QI_UV16QI_ULONGLONG, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_ULONGLONG) DEF_OV_TYPE (BT_OV_UV16QI_UV16QI_UV16QI_UV16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI) DEF_OV_TYPE (BT_OV_UV16QI_UV16QI_UV16QI_UV16QI_INTPTR, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INTPTR) +DEF_OV_TYPE (BT_OV_UV16QI_UV16QI_UV16QI_V16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_V16QI) DEF_OV_TYPE (BT_OV_UV16QI_UV16QI_UV4SI, BT_UV16QI, BT_UV16QI, BT_UV4SI) DEF_OV_TYPE (BT_OV_UV16QI_UV16QI_UV8HI, BT_UV16QI, BT_UV16QI, BT_UV8HI) DEF_OV_TYPE (BT_OV_UV16QI_UV16QI_V16QI, BT_UV16QI, BT_UV16QI, BT_V16QI) @@ -581,6 +592,7 @@ 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_UV1TI_UV1TI_V1TI, BT_UV1TI, BT_UV1TI, BT_UV1TI, BT_V1TI) 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) @@ -610,6 +622,7 @@ DEF_OV_TYPE (BT_OV_UV2DI_UV2DI_UV2DI_ULONGLONG, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT DEF_OV_TYPE (BT_OV_UV2DI_UV2DI_UV2DI_ULONGLONGCONSTPTR_UCHAR, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_ULONGLONGCONSTPTR, BT_UCHAR) DEF_OV_TYPE (BT_OV_UV2DI_UV2DI_UV2DI_UV16QI, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_UV16QI) DEF_OV_TYPE (BT_OV_UV2DI_UV2DI_UV2DI_UV2DI, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_UV2DI) +DEF_OV_TYPE (BT_OV_UV2DI_UV2DI_UV2DI_V2DI, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_V2DI) DEF_OV_TYPE (BT_OV_UV2DI_UV2DI_UV4SI, BT_UV2DI, BT_UV2DI, BT_UV4SI) DEF_OV_TYPE (BT_OV_UV2DI_UV2DI_UV8HI, BT_UV2DI, BT_UV2DI, BT_UV8HI) DEF_OV_TYPE (BT_OV_UV2DI_UV2DI_V2DI, BT_UV2DI, BT_UV2DI, BT_V2DI) @@ -650,6 +663,7 @@ DEF_OV_TYPE (BT_OV_UV4SI_UV4SI_UV4SI_ULONGLONG, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT DEF_OV_TYPE (BT_OV_UV4SI_UV4SI_UV4SI_UV16QI, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_UV16QI) DEF_OV_TYPE (BT_OV_UV4SI_UV4SI_UV4SI_UV4SI, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_UV4SI) DEF_OV_TYPE (BT_OV_UV4SI_UV4SI_UV4SI_UV4SI_INTPTR, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_INTPTR) +DEF_OV_TYPE (BT_OV_UV4SI_UV4SI_UV4SI_V4SI, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_V4SI) DEF_OV_TYPE (BT_OV_UV4SI_UV4SI_UV8HI, BT_UV4SI, BT_UV4SI, BT_UV8HI) DEF_OV_TYPE (BT_OV_UV4SI_UV4SI_V4SI, BT_UV4SI, BT_UV4SI, BT_V4SI) DEF_OV_TYPE (BT_OV_UV4SI_UV8HI, BT_UV4SI, BT_UV8HI) @@ -691,6 +705,7 @@ DEF_OV_TYPE (BT_OV_UV8HI_UV8HI_UV8HI_ULONGLONG, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT DEF_OV_TYPE (BT_OV_UV8HI_UV8HI_UV8HI_UV16QI, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_UV16QI) DEF_OV_TYPE (BT_OV_UV8HI_UV8HI_UV8HI_UV8HI, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_UV8HI) DEF_OV_TYPE (BT_OV_UV8HI_UV8HI_UV8HI_UV8HI_INTPTR, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INTPTR) +DEF_OV_TYPE (BT_OV_UV8HI_UV8HI_UV8HI_V8HI, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_V8HI) DEF_OV_TYPE (BT_OV_UV8HI_UV8HI_V8HI, BT_UV8HI, BT_UV8HI, BT_V8HI) DEF_OV_TYPE (BT_OV_UV8HI_V4SI_V4SI, BT_UV8HI, BT_V4SI, BT_V4SI) DEF_OV_TYPE (BT_OV_UV8HI_V8HI, BT_UV8HI, BT_V8HI) @@ -761,6 +776,7 @@ DEF_OV_TYPE (BT_OV_V2DF_V2DF_V2DF_ULONGLONG, BT_V2DF, BT_V2DF, BT_V2DF, BT_ULONG DEF_OV_TYPE (BT_OV_V2DF_V2DF_V2DF_UV16QI, BT_V2DF, BT_V2DF, BT_V2DF, BT_UV16QI) DEF_OV_TYPE (BT_OV_V2DF_V2DF_V2DF_UV2DI, BT_V2DF, BT_V2DF, BT_V2DF, BT_UV2DI) DEF_OV_TYPE (BT_OV_V2DF_V2DF_V2DF_V2DF, BT_V2DF, BT_V2DF, BT_V2DF, BT_V2DF) +DEF_OV_TYPE (BT_OV_V2DF_V2DF_V2DF_V2DI, BT_V2DF, BT_V2DF, BT_V2DF, BT_V2DI) DEF_OV_TYPE (BT_OV_V2DF_V2DF_V2DI, BT_V2DF, BT_V2DF, BT_V2DI) DEF_OV_TYPE (BT_OV_V2DF_V2DI, BT_V2DF, BT_V2DI) DEF_OV_TYPE (BT_OV_V2DF_V2DI_INT, BT_V2DF, BT_V2DI, BT_INT) @@ -822,6 +838,7 @@ DEF_OV_TYPE (BT_OV_V4SF_V4SF_V4SF_ULONGLONG, BT_V4SF, BT_V4SF, BT_V4SF, BT_ULONG DEF_OV_TYPE (BT_OV_V4SF_V4SF_V4SF_UV16QI, BT_V4SF, BT_V4SF, BT_V4SF, BT_UV16QI) DEF_OV_TYPE (BT_OV_V4SF_V4SF_V4SF_UV4SI, BT_V4SF, BT_V4SF, BT_V4SF, BT_UV4SI) DEF_OV_TYPE (BT_OV_V4SF_V4SF_V4SF_V4SF, BT_V4SF, BT_V4SF, BT_V4SF, BT_V4SF) +DEF_OV_TYPE (BT_OV_V4SF_V4SF_V4SF_V4SI, BT_V4SF, BT_V4SF, BT_V4SF, BT_V4SI) DEF_OV_TYPE (BT_OV_V4SF_V4SF_V4SI, BT_V4SF, BT_V4SF, BT_V4SI) DEF_OV_TYPE (BT_OV_V4SF_V4SI, BT_V4SF, BT_V4SI) DEF_OV_TYPE (BT_OV_V4SI_BV4SI_V4SI, BT_V4SI, BT_BV4SI, BT_V4SI) diff --git a/gcc/config/s390/s390-builtins.def b/gcc/config/s390/s390-builtins.def index a3515dc..4764c43 100644 --- a/gcc/config/s390/s390-builtins.def +++ b/gcc/config/s390/s390-builtins.def @@ -3169,3 +3169,28 @@ B_DEF (s390_vcnf, vcnf_v8hi, 0, B_DEF (s390_bdepg, bdepg, 0, B_ARCH15, 0, BT_FN_ULONG_ULONG_ULONG) B_DEF (s390_bextg, bextg, 0, B_ARCH15, 0, BT_FN_ULONG_ULONG_ULONG) + +OB_DEF (s390_vec_blend, s390_vec_blend_s8, s390_vec_blend_dbl, B_VXE3, BT_FN_OV4SI_OV4SI_OV4SI_OV4SI) +OB_DEF_VAR (s390_vec_blend_s8, s390_vblendb, 0, 0, BT_OV_V16QI_V16QI_V16QI_V16QI) +OB_DEF_VAR (s390_vec_blend_b8, s390_vblendb, 0, 0, BT_OV_BV16QI_BV16QI_BV16QI_V16QI) +OB_DEF_VAR (s390_vec_blend_u8, s390_vblendb, 0, 0, BT_OV_UV16QI_UV16QI_UV16QI_V16QI) +OB_DEF_VAR (s390_vec_blend_s16, s390_vblendh, 0, 0, BT_OV_V8HI_V8HI_V8HI_V8HI) +OB_DEF_VAR (s390_vec_blend_b16, s390_vblendh, 0, 0, BT_OV_BV8HI_BV8HI_BV8HI_V8HI) +OB_DEF_VAR (s390_vec_blend_u16, s390_vblendh, 0, 0, BT_OV_UV8HI_UV8HI_UV8HI_V8HI) +OB_DEF_VAR (s390_vec_blend_s32, s390_vblendf, 0, 0, BT_OV_V4SI_V4SI_V4SI_V4SI) +OB_DEF_VAR (s390_vec_blend_b32, s390_vblendf, 0, 0, BT_OV_BV4SI_BV4SI_BV4SI_V4SI) +OB_DEF_VAR (s390_vec_blend_u32, s390_vblendf, 0, 0, BT_OV_UV4SI_UV4SI_UV4SI_V4SI) +OB_DEF_VAR (s390_vec_blend_s64, s390_vblendg, 0, 0, BT_OV_V2DI_V2DI_V2DI_V2DI) +OB_DEF_VAR (s390_vec_blend_b64, s390_vblendg, 0, 0, BT_OV_BV2DI_BV2DI_BV2DI_V2DI) +OB_DEF_VAR (s390_vec_blend_u64, s390_vblendg, 0, 0, BT_OV_UV2DI_UV2DI_UV2DI_V2DI) +OB_DEF_VAR (s390_vec_blend_s128, s390_vblendq, 0, 0, BT_OV_V1TI_V1TI_V1TI_V1TI) +OB_DEF_VAR (s390_vec_blend_b128, s390_vblendq, 0, 0, BT_OV_BV1TI_BV1TI_BV1TI_V1TI) +OB_DEF_VAR (s390_vec_blend_u128, s390_vblendq, 0, 0, BT_OV_UV1TI_UV1TI_UV1TI_V1TI) +OB_DEF_VAR (s390_vec_blend_flt, s390_vblendf, 0, 0, BT_OV_V4SF_V4SF_V4SF_V4SI) +OB_DEF_VAR (s390_vec_blend_dbl, s390_vblendg, 0, 0, BT_OV_V2DF_V2DF_V2DF_V2DI) + +B_DEF (s390_vblendb, vblendv16qi, 0, B_VXE3, 0, BT_FN_UV16QI_UV16QI_UV16QI_V16QI) +B_DEF (s390_vblendh, vblendv8hi, 0, B_VXE3, 0, BT_FN_UV8HI_UV8HI_UV8HI_V8HI) +B_DEF (s390_vblendf, vblendv4si, 0, B_VXE3, 0, BT_FN_UV4SI_UV4SI_UV4SI_V4SI) +B_DEF (s390_vblendg, vblendv2di, 0, B_VXE3, 0, BT_FN_UV2DI_UV2DI_UV2DI_V2DI) +B_DEF (s390_vblendq, vblendti, 0, B_VXE3, 0, BT_FN_UINT128_UINT128_UINT128_INT128) diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index 1230de0..dbfc67f 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -244,6 +244,8 @@ UNSPEC_VEC_VFMIN UNSPEC_VEC_VFMAX + UNSPEC_VEC_VBLEND + UNSPEC_TF_TO_FPRX2 UNSPEC_NNPA_VCLFNHS_V8HI diff --git a/gcc/config/s390/vecintrin.h b/gcc/config/s390/vecintrin.h index e162169..3f95797 100644 --- a/gcc/config/s390/vecintrin.h +++ b/gcc/config/s390/vecintrin.h @@ -195,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_blend __builtin_s390_vec_blend #define vec_bperm __builtin_s390_vec_bperm #define vec_bperm_u128 __builtin_s390_vec_bperm_u128 #define vec_cmpeq __builtin_s390_vec_cmpeq diff --git a/gcc/config/s390/vx-builtins.md b/gcc/config/s390/vx-builtins.md index abdc583..9b0ebd3 100644 --- a/gcc/config/s390/vx-builtins.md +++ b/gcc/config/s390/vx-builtins.md @@ -2269,3 +2269,14 @@ "TARGET_NNPA" "vcnf\t%v0,%v1,%2,1" [(set_attr "op_type" "VRR")]) + +; vblendb, vblendh, vblendf, vblendg, vblendq +(define_insn "vblend<mode>" + [(set (match_operand:VT_HW 0 "register_operand" "=v") + (unspec:VT_HW [(match_operand:VT_HW 1 "register_operand" "v") + (match_operand:VT_HW 2 "register_operand" "v") + (match_operand:<VT_HW:TOINTVEC> 3 "register_operand" "v")] + UNSPEC_VEC_VBLEND))] + "TARGET_VXE3" + "vblend<bhfgq>\t%v0,%v1,%v2,%v3" + [(set_attr "op_type" "VRR")]) |