@@ -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)
@@ -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)
@@ -246,6 +246,7 @@
UNSPEC_VEC_VBLEND
UNSPEC_VEC_VEVAL
+ UNSPEC_VEC_VGEM
UNSPEC_TF_TO_FPRX2
@@ -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
@@ -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")])