Add instruction vgem and vector builtins vec_gen_element_masks_{8,16,32,64,128}.
gcc/ChangeLog: * config/s390/s390-builtins.def (s390_vec_gen_element_masks_128): Add. (s390_vgemb): Add. (s390_vgemh): Add. (s390_vgemf): Add. (s390_vgemg): Add. (s390_vgemq): Add. * config/s390/s390-builtin-types.def: Update accordingly. * config/s390/s390.md (UNSPEC_VEC_VGEM): Add. * config/s390/vecintrin.h (vec_gen_element_masks_8): Define. (vec_gen_element_masks_16): Define. (vec_gen_element_masks_32): Define. (vec_gen_element_masks_64): Define. (vec_gen_element_masks_128): Define. * config/s390/vx-builtins.md (vgemv16qi): Add. (vgem<mode>): Add. --- gcc/config/s390/s390-builtin-types.def | 5 +++++ gcc/config/s390/s390-builtins.def | 8 ++++++++ gcc/config/s390/s390.md | 1 + gcc/config/s390/vecintrin.h | 6 ++++++ gcc/config/s390/vx-builtins.md | 18 ++++++++++++++++++ 5 files changed, 38 insertions(+) diff --git a/gcc/config/s390/s390-builtin-types.def b/gcc/config/s390/s390-builtin-types.def index 1d361c27f63..f0561839309 100644 --- a/gcc/config/s390/s390-builtin-types.def +++ b/gcc/config/s390/s390-builtin-types.def @@ -143,20 +143,25 @@ 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_UV16QI, BT_UINT128, BT_UV16QI) 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) DEF_FN_TYPE_1 (BT_FN_UV16QI_UV16QI, BT_UV16QI, BT_UV16QI) +DEF_FN_TYPE_1 (BT_FN_UV16QI_UV8HI, BT_UV16QI, BT_UV8HI) +DEF_FN_TYPE_1 (BT_FN_UV1TI_UV16QI, BT_UV1TI, BT_UV16QI) DEF_FN_TYPE_1 (BT_FN_UV2DI_ULONGLONG, BT_UV2DI, BT_ULONGLONG) DEF_FN_TYPE_1 (BT_FN_UV2DI_ULONGLONGCONSTPTR, BT_UV2DI, BT_ULONGLONGCONSTPTR) DEF_FN_TYPE_1 (BT_FN_UV2DI_USHORT, BT_UV2DI, BT_USHORT) +DEF_FN_TYPE_1 (BT_FN_UV2DI_UV16QI, BT_UV2DI, BT_UV16QI) DEF_FN_TYPE_1 (BT_FN_UV2DI_UV2DI, BT_UV2DI, BT_UV2DI) DEF_FN_TYPE_1 (BT_FN_UV2DI_UV4SI, BT_UV2DI, BT_UV4SI) DEF_FN_TYPE_1 (BT_FN_UV2DI_V2DF, BT_UV2DI, BT_V2DF) DEF_FN_TYPE_1 (BT_FN_UV4SI_UINT, BT_UV4SI, BT_UINT) DEF_FN_TYPE_1 (BT_FN_UV4SI_UINTCONSTPTR, BT_UV4SI, BT_UINTCONSTPTR) DEF_FN_TYPE_1 (BT_FN_UV4SI_USHORT, BT_UV4SI, BT_USHORT) +DEF_FN_TYPE_1 (BT_FN_UV4SI_UV16QI, BT_UV4SI, BT_UV16QI) DEF_FN_TYPE_1 (BT_FN_UV4SI_UV4SI, BT_UV4SI, BT_UV4SI) DEF_FN_TYPE_1 (BT_FN_UV4SI_UV8HI, BT_UV4SI, BT_UV8HI) DEF_FN_TYPE_1 (BT_FN_UV4SI_V4SF, BT_UV4SI, BT_V4SF) diff --git a/gcc/config/s390/s390-builtins.def b/gcc/config/s390/s390-builtins.def index 9e861b122f3..2cf443f6cdb 100644 --- a/gcc/config/s390/s390-builtins.def +++ b/gcc/config/s390/s390-builtins.def @@ -3213,3 +3213,11 @@ OB_DEF_VAR (s390_vec_evaluate_b128, s390_veval, 0, OB_DEF_VAR (s390_vec_evaluate_u128, s390_veval, 0, O4_U8, BT_OV_UV1TI_UV1TI_UV1TI_UV1TI_INT) /* veval */ B_DEF (s390_veval, vevalv16qi, 0, B_VXE3, O4_U8, BT_FN_UV16QI_UV16QI_UV16QI_UV16QI_INT) + +B_DEF (s390_vec_gen_element_masks_128,vgemti, 0, B_VXE3, 0, BT_FN_UV1TI_UV16QI) + +B_DEF (s390_vgemb, vgemv16qi, 0, B_VXE3, 0, BT_FN_UV16QI_UV8HI) +B_DEF (s390_vgemh, vgemv8hi, 0, B_VXE3, 0, BT_FN_UV8HI_UV16QI) +B_DEF (s390_vgemf, vgemv4si, 0, B_VXE3, 0, BT_FN_UV4SI_UV16QI) +B_DEF (s390_vgemg, vgemv2di, 0, B_VXE3, 0, BT_FN_UV2DI_UV16QI) +B_DEF (s390_vgemq, vgemti, 0, B_VXE3, 0, BT_FN_UINT128_UV16QI) diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index 53c4170ee46..7b5b9709f56 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -246,6 +246,7 @@ UNSPEC_VEC_VBLEND UNSPEC_VEC_VEVAL + UNSPEC_VEC_VGEM UNSPEC_TF_TO_FPRX2 diff --git a/gcc/config/s390/vecintrin.h b/gcc/config/s390/vecintrin.h index 01aedc6f082..b804eeddba6 100644 --- a/gcc/config/s390/vecintrin.h +++ b/gcc/config/s390/vecintrin.h @@ -170,6 +170,12 @@ __lcbb(const void *ptr, int bndry) #define vec_convert_to_fp16 __builtin_s390_vcfn #define vec_convert_from_fp16 __builtin_s390_vcnf +#define vec_gen_element_masks_8 __builtin_s390_vgemb +#define vec_gen_element_masks_16 __builtin_s390_vgemh +#define vec_gen_element_masks_32 __builtin_s390_vgemf +#define vec_gen_element_masks_64 __builtin_s390_vgemg +#define vec_gen_element_masks_128 __builtin_s390_vec_gen_element_masks_128 + #define vec_abs __builtin_s390_vec_abs #define vec_add_u128 __builtin_s390_vec_add_u128 #define vec_addc __builtin_s390_vec_addc diff --git a/gcc/config/s390/vx-builtins.md b/gcc/config/s390/vx-builtins.md index 9b0ebd31eaa..c332e025b2a 100644 --- a/gcc/config/s390/vx-builtins.md +++ b/gcc/config/s390/vx-builtins.md @@ -2280,3 +2280,21 @@ "TARGET_VXE3" "vblend<bhfgq>\t%v0,%v1,%v2,%v3" [(set_attr "op_type" "VRR")]) + +; vgemb +(define_insn "vgemv16qi" + [(set (match_operand:V16QI 0 "register_operand" "=v") + (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v")] + UNSPEC_VEC_VGEM))] + "TARGET_VXE3" + "vgemb\t%v0,%v1" + [(set_attr "op_type" "VRR")]) + +; vgemh, vgemf, vgemg, vgemq +(define_insn "vgem<mode>" + [(set (match_operand:VI_HW_HSDT 0 "register_operand" "=v") + (unspec:VI_HW_HSDT [(match_operand:V16QI 1 "register_operand" "v")] + UNSPEC_VEC_VGEM))] + "TARGET_VXE3" + "vgem<bhfgq>\t%v0,%v1" + [(set_attr "op_type" "VRR")]) -- 2.47.0