Since there is no straight forward way to introduce an overload with
different return types where we would expand differently depending on an
immediate operand, lets drop this patch.

On Fri, Mar 01, 2024 at 04:18:31PM +0100, Stefan Schulze Frielinghaus wrote:
> At the moment there are no extended mnemonics for vclfn(h,l) and vcrnf
> defined in the Principles of Operation.  Thus, remove the suffix "s"
> from the builtins and expanders and introduce a further operand for the
> data type.
> 
> gcc/ChangeLog:
> 
>       * config/s390/s390-builtin-types.def: Update to reflect latest
>       changes.
>       * config/s390/s390-builtins.def: Remove suffix s from
>       s390_vclfn(h,l)s and s390_vcrnfs.
>       * config/s390/s390.md: Similar, remove suffix s from unspec
>       definitions.
>       * config/s390/vecintrin.h (vec_extend_to_fp32_hi): Redefine.
>       (vec_extend_to_fp32_lo): Redefine.
>       (vec_round_from_fp32): Redefine.
>       * config/s390/vx-builtins.md (vclfnhs_v8hi): Remove suffix s.
>       (vclfnh_v8hi): Add with extra operand.
>       (vclfnls_v8hi): Remove suffix s.
>       (vclfnl_v8hi): Add with extra operand.
>       (vcrnfs_v8hi): Remove suffix s.
>       (vcrnf_v8hi): Add with extra operand.
> ---
> OK for mainline?
> 
>  gcc/config/s390/s390-builtin-types.def |  4 ++--
>  gcc/config/s390/s390-builtins.def      |  6 +++---
>  gcc/config/s390/s390.md                |  6 +++---
>  gcc/config/s390/vecintrin.h            |  6 +++---
>  gcc/config/s390/vx-builtins.md         | 27 ++++++++++++++------------
>  5 files changed, 26 insertions(+), 23 deletions(-)
> 
> diff --git a/gcc/config/s390/s390-builtin-types.def 
> b/gcc/config/s390/s390-builtin-types.def
> index ce51ae8cd3f..c3d09b42835 100644
> --- a/gcc/config/s390/s390-builtin-types.def
> +++ b/gcc/config/s390/s390-builtin-types.def
> @@ -273,7 +273,6 @@ DEF_FN_TYPE_2 (BT_FN_V2DI_V2DF_V2DF, BT_V2DI, BT_V2DF, 
> BT_V2DF)
>  DEF_FN_TYPE_2 (BT_FN_V2DI_V2DI_V2DI, BT_V2DI, BT_V2DI, BT_V2DI)
>  DEF_FN_TYPE_2 (BT_FN_V2DI_V4SI_V4SI, BT_V2DI, BT_V4SI, BT_V4SI)
>  DEF_FN_TYPE_2 (BT_FN_V4SF_FLT_INT, BT_V4SF, BT_FLT, BT_INT)
> -DEF_FN_TYPE_2 (BT_FN_V4SF_UV8HI_UINT, BT_V4SF, BT_UV8HI, BT_UINT)
>  DEF_FN_TYPE_2 (BT_FN_V4SF_V4SF_UCHAR, BT_V4SF, BT_V4SF, BT_UCHAR)
>  DEF_FN_TYPE_2 (BT_FN_V4SF_V4SF_V4SF, BT_V4SF, BT_V4SF, BT_V4SF)
>  DEF_FN_TYPE_2 (BT_FN_V4SI_BV4SI_V4SI, BT_V4SI, BT_BV4SI, BT_V4SI)
> @@ -324,7 +323,6 @@ 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_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)
>  DEF_FN_TYPE_3 (BT_FN_V16QI_V16QI_V16QI_V16QI, BT_V16QI, BT_V16QI, BT_V16QI, 
> BT_V16QI)
> @@ -340,6 +338,7 @@ 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_V4SI_V4SI_V2DI, BT_V2DI, BT_V4SI, BT_V4SI, BT_V2DI)
> +DEF_FN_TYPE_3 (BT_FN_V4SF_UV8HI_UINT_UINT, BT_V4SF, BT_UV8HI, BT_UINT, 
> BT_UINT)
>  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)
>  DEF_FN_TYPE_3 (BT_FN_V4SF_V4SF_UCHAR_UCHAR, BT_V4SF, BT_V4SF, BT_UCHAR, 
> BT_UCHAR)
> @@ -377,6 +376,7 @@ DEF_FN_TYPE_4 
> (BT_FN_UV4SI_UV4SI_UV4SI_UINTCONSTPTR_UCHAR, BT_UV4SI, BT_UV4SI, B
>  DEF_FN_TYPE_4 (BT_FN_UV4SI_UV4SI_UV4SI_UV4SI_INT, BT_UV4SI, BT_UV4SI, 
> BT_UV4SI, BT_UV4SI, BT_INT)
>  DEF_FN_TYPE_4 (BT_FN_UV8HI_UV8HI_UV8HI_INT_INTPTR, BT_UV8HI, BT_UV8HI, 
> BT_UV8HI, BT_INT, BT_INTPTR)
>  DEF_FN_TYPE_4 (BT_FN_UV8HI_UV8HI_UV8HI_UV8HI_INT, BT_UV8HI, BT_UV8HI, 
> BT_UV8HI, BT_UV8HI, BT_INT)
> +DEF_FN_TYPE_4 (BT_FN_UV8HI_V4SF_V4SF_UINT_UINT, BT_UV8HI, BT_V4SF, BT_V4SF, 
> BT_UINT, BT_UINT)
>  DEF_FN_TYPE_4 (BT_FN_VOID_UV2DI_UV2DI_ULONGLONGPTR_ULONGLONG, BT_VOID, 
> BT_UV2DI, BT_UV2DI, BT_ULONGLONGPTR, BT_ULONGLONG)
>  DEF_FN_TYPE_4 (BT_FN_VOID_UV4SI_UV4SI_UINTPTR_ULONGLONG, BT_VOID, BT_UV4SI, 
> BT_UV4SI, BT_UINTPTR, BT_ULONGLONG)
>  DEF_FN_TYPE_4 (BT_FN_VOID_V4SI_V4SI_INTPTR_ULONGLONG, BT_VOID, BT_V4SI, 
> BT_V4SI, BT_INTPTR, BT_ULONGLONG)
> diff --git a/gcc/config/s390/s390-builtins.def 
> b/gcc/config/s390/s390-builtins.def
> index 02ff516c677..0d4e20ea425 100644
> --- a/gcc/config/s390/s390-builtins.def
> +++ b/gcc/config/s390/s390-builtins.def
> @@ -3025,10 +3025,10 @@ B_DEF      (s390_vstrszf,                vstrszv4si,  
>       0,
>  
>  /* arch 14 builtins */
>  
> -B_DEF      (s390_vclfnhs,                vclfnhs_v8hi,      0,               
>    B_NNPA,             O2_U4,              BT_FN_V4SF_UV8HI_UINT)
> -B_DEF      (s390_vclfnls,                vclfnls_v8hi,      0,               
>    B_NNPA,             O2_U4,              BT_FN_V4SF_UV8HI_UINT)
> +B_DEF      (s390_vclfnh,                 vclfnh_v8hi,       0,               
>    B_NNPA,             O2_U4 | O3_U4,      BT_FN_V4SF_UV8HI_UINT_UINT)
> +B_DEF      (s390_vclfnl,                 vclfnl_v8hi,       0,               
>    B_NNPA,             O2_U4 | O3_U4,      BT_FN_V4SF_UV8HI_UINT_UINT)
>  
> -B_DEF      (s390_vcrnfs,                 vcrnfs_v8hi,       0,               
>    B_NNPA,             O3_U4,              BT_FN_UV8HI_V4SF_V4SF_UINT)
> +B_DEF      (s390_vcrnf,                  vcrnf_v8hi,        0,               
>    B_NNPA,             O3_U4 | O4_U4,      BT_FN_UV8HI_V4SF_V4SF_UINT_UINT)
>  
>  B_DEF      (s390_vcfn,                   vcfn_v8hi,         0,               
>    B_NNPA,             O2_U4,              BT_FN_UV8HI_UV8HI_UINT)
>  B_DEF      (s390_vcnf,                   vcnf_v8hi,         0,               
>    B_NNPA,             O2_U4,              BT_FN_UV8HI_UV8HI_UINT)
> diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
> index 8aa40ba5b7f..65d98163193 100644
> --- a/gcc/config/s390/s390.md
> +++ b/gcc/config/s390/s390.md
> @@ -241,9 +241,9 @@
>     UNSPEC_VEC_VFMIN
>     UNSPEC_VEC_VFMAX
>  
> -   UNSPEC_NNPA_VCLFNHS_V8HI
> -   UNSPEC_NNPA_VCLFNLS_V8HI
> -   UNSPEC_NNPA_VCRNFS_V8HI
> +   UNSPEC_NNPA_VCLFNH_V8HI
> +   UNSPEC_NNPA_VCLFNL_V8HI
> +   UNSPEC_NNPA_VCRNF_V8HI
>  
>     UNSPEC_NNPA_VCFN_V8HI
>     UNSPEC_NNPA_VCNF_V8HI
> diff --git a/gcc/config/s390/vecintrin.h b/gcc/config/s390/vecintrin.h
> index 9abbd761067..c690c41d8e4 100644
> --- a/gcc/config/s390/vecintrin.h
> +++ b/gcc/config/s390/vecintrin.h
> @@ -174,9 +174,9 @@ __lcbb(const void *ptr, int bndry)
>  #define vec_vsterf_flt vec_vlerf_flt
>  #define vec_vsterg_dbl vec_vlerg_dbl
>  
> -#define vec_extend_to_fp32_hi __builtin_s390_vclfnhs
> -#define vec_extend_to_fp32_lo __builtin_s390_vclfnls
> -#define vec_round_from_fp32 __builtin_s390_vcrnfs
> +#define vec_extend_to_fp32_hi(X, Y) __builtin_s390_vclfnh((X), 2, (Y))
> +#define vec_extend_to_fp32_lo(X, Y) __builtin_s390_vclfnl((X), 2, (Y))
> +#define vec_round_from_fp32(X, Y, Z) __builtin_s390_vcrnf((X), (Y), (Z), 2)
>  #define vec_convert_to_fp16 __builtin_s390_vcfn
>  #define vec_convert_from_fp16 __builtin_s390_vcnf
>  #define vec_gather_element __builtin_s390_vec_gather_element
> diff --git a/gcc/config/s390/vx-builtins.md b/gcc/config/s390/vx-builtins.md
> index 432d81a719f..322756f6d36 100644
> --- a/gcc/config/s390/vx-builtins.md
> +++ b/gcc/config/s390/vx-builtins.md
> @@ -2220,36 +2220,39 @@
>  ;; NNPA Facility
>  ;;
>  
> -(define_insn "vclfnhs_v8hi"
> +(define_insn "vclfnh_v8hi"
>    [(set (match_operand:V4SF                0 "register_operand"  "=v")
>       (unspec:V4SF [(vec_select:V4HI
>                      (match_operand:V8HI 1 "register_operand"   "v")
>                      (parallel [(const_int 0) (const_int 1) (const_int 2) 
> (const_int 3)]))
> -                   (match_operand:QI    2 "const_mask_operand" "C")]
> -                  UNSPEC_NNPA_VCLFNHS_V8HI))]
> +                   (match_operand:QI    2 "const_mask_operand" "C")
> +                   (match_operand:QI    3 "const_mask_operand" "C")]
> +                  UNSPEC_NNPA_VCLFNH_V8HI))]
>    "TARGET_NNPA"
> -  "vclfnh\t%v0,%v1,2,%2"
> +  "vclfnh\t%v0,%v1,%2,%3"
>    [(set_attr "op_type" "VRR")])
>  
> -(define_insn "vclfnls_v8hi"
> +(define_insn "vclfnl_v8hi"
>    [(set (match_operand:V4SF                0 "register_operand"   "=v")
>       (unspec:V4SF [(vec_select:V4HI
>                      (match_operand:V8HI 1 "register_operand"   "v")
>                      (parallel [(const_int 4) (const_int 5) (const_int 6) 
> (const_int 7)]))
> -                   (match_operand:QI    2 "const_mask_operand"  "C")]
> -                  UNSPEC_NNPA_VCLFNLS_V8HI))]
> +                   (match_operand:QI    2 "const_mask_operand"  "C")
> +                   (match_operand:QI    3 "const_mask_operand"  "C")]
> +                  UNSPEC_NNPA_VCLFNL_V8HI))]
>    "TARGET_NNPA"
> -  "vclfnl\t%v0,%v1,2,%2"
> +  "vclfnl\t%v0,%v1,%2,%3"
>    [(set_attr "op_type" "VRR")])
>  
> -(define_insn "vcrnfs_v8hi"
> +(define_insn "vcrnf_v8hi"
>    [(set (match_operand:V8HI               0 "register_operand"   "=v")
>       (unspec:V8HI [(match_operand:V4SF 1 "register_operand"    "v")
>                     (match_operand:V4SF 2 "register_operand"    "v")
> -                   (match_operand:QI   3 "const_mask_operand"  "C")]
> -                  UNSPEC_NNPA_VCRNFS_V8HI))]
> +                   (match_operand:QI   3 "const_mask_operand"  "C")
> +                   (match_operand:QI   4 "const_mask_operand"  "C")]
> +                  UNSPEC_NNPA_VCRNF_V8HI))]
>    "TARGET_NNPA"
> -  "vcrnf\t%v0,%v1,%v2,%3,2"
> +  "vcrnf\t%v0,%v1,%v2,%3,%4"
>    [(set_attr "op_type" "VRR")])
>  
>  (define_insn "vcfn_v8hi"
> -- 
> 2.43.0
> 

Reply via email to