Seems like you don't really add new intrinsics for those two new
extensions? Also our policy is only to add extensions when they are
ratified.

I am happy to review the patch anyway, but just remind you we won't
accept that until it is ratified :)

On Mon, Apr 14, 2025 at 4:25 PM Dongyan Chen
<chendong...@isrc.iscas.ac.cn> wrote:
>
> This patch add zvfbfa and zvfofp8min intrinsic[1].
> To enable GCC to recognize and process zvfbfa and zvfofp8min extensions 
> correctly at compile time.
>
> [1]https://github.com/aswaterman/riscv-misc/blob/e515758c24504cf3c16145bc763a76c59425ed1b/isa/zvfbfa.adoc
>
> gcc/ChangeLog:
>
>         * common/config/riscv/riscv-common.cc: New intrinsic.
>         * config/riscv/riscv-vector-builtins.cc 
> (validate_instance_type_required_extensions): Add required_ext checking for 
> 'zvfbfa' and 'zvfofp8min'.
>         * config/riscv/riscv-vector-builtins.h (RVV_REQUIRE_ELEN_OFP_8): New 
> bit value for OFP8.
>         (enum required_ext): Add required_ext declaration for 'zvfbfa' and 
> 'zvfofp8min'.
>         (required_ext_to_isa_name): Ditto.
>         (required_extensions_specified): Ditto.
>         (struct function_group_info): Add match case for 'zvfbfa' and 
> 'zvfofp8min'.
>         * config/riscv/riscv.opt: New mask for 'zvfbfa' and 'zvfofp8min'.
>
> gcc/testsuite/ChangeLog:
>
>         * gcc.target/riscv/arch-45.c: New test.
>         * gcc.target/riscv/arch-46.c: New test.
>
> ---
>  gcc/common/config/riscv/riscv-common.cc   |  9 +++++++++
>  gcc/config/riscv/riscv-vector-builtins.cc | 20 ++++++++++++++++++++
>  gcc/config/riscv/riscv-vector-builtins.h  | 15 +++++++++++++++
>  gcc/config/riscv/riscv.opt                |  6 ++++++
>  gcc/testsuite/gcc.target/riscv/arch-45.c  |  5 +++++
>  gcc/testsuite/gcc.target/riscv/arch-46.c  |  5 +++++
>  6 files changed, 60 insertions(+)
>  create mode 100644 gcc/testsuite/gcc.target/riscv/arch-45.c
>  create mode 100644 gcc/testsuite/gcc.target/riscv/arch-46.c
>
> diff --git a/gcc/common/config/riscv/riscv-common.cc 
> b/gcc/common/config/riscv/riscv-common.cc
> index b34409adf39c..7aaa9d92455b 100644
> --- a/gcc/common/config/riscv/riscv-common.cc
> +++ b/gcc/common/config/riscv/riscv-common.cc
> @@ -193,12 +193,15 @@ static const riscv_implied_info_t riscv_implied_info[] =
>
>    {"zfa", "f"},
>
> +  {"zvfbfa", "zve32f"},
> +  {"zvfbfa", "zfbfmin"},
>    {"zvfbfmin", "zve32f"},
>    {"zvfbfwma", "zvfbfmin"},
>    {"zvfbfwma", "zfbfmin"},
>    {"zvfhmin", "zve32f"},
>    {"zvfh", "zve32f"},
>    {"zvfh", "zfhmin"},
> +  {"zvfofp8min", "zve32f"},
>
>    {"zhinx", "zhinxmin"},
>    {"zhinxmin", "zfinx"},
> @@ -383,10 +386,12 @@ static const struct riscv_ext_version 
> riscv_ext_version_table[] =
>    {"zfbfmin",   ISA_SPEC_CLASS_NONE, 1, 0},
>    {"zfh",       ISA_SPEC_CLASS_NONE, 1, 0},
>    {"zfhmin",    ISA_SPEC_CLASS_NONE, 1, 0},
> +  {"zvfbfa",    ISA_SPEC_CLASS_NONE, 0, 1},
>    {"zvfbfmin",  ISA_SPEC_CLASS_NONE, 1, 0},
>    {"zvfbfwma",  ISA_SPEC_CLASS_NONE, 1, 0},
>    {"zvfhmin",   ISA_SPEC_CLASS_NONE, 1, 0},
>    {"zvfh",      ISA_SPEC_CLASS_NONE, 1, 0},
> +  {"zvfofp8min",ISA_SPEC_CLASS_NONE, 0, 2},
>
>    {"zfa",     ISA_SPEC_CLASS_NONE, 1, 0},
>
> @@ -1676,10 +1681,12 @@ static const riscv_ext_flag_table_t 
> riscv_ext_flag_table[] =
>    RISCV_EXT_FLAG_ENTRY ("zve64x",   x_riscv_vector_elen_flags, 
> MASK_VECTOR_ELEN_64),
>    RISCV_EXT_FLAG_ENTRY ("zve64f",   x_riscv_vector_elen_flags, 
> MASK_VECTOR_ELEN_FP_32),
>    RISCV_EXT_FLAG_ENTRY ("zve64d",   x_riscv_vector_elen_flags, 
> MASK_VECTOR_ELEN_FP_64),
> +  RISCV_EXT_FLAG_ENTRY ("zvfbfa",   x_riscv_vector_elen_flags, 
> MASK_VECTOR_ELEN_BF_16),
>    RISCV_EXT_FLAG_ENTRY ("zvfbfmin", x_riscv_vector_elen_flags, 
> MASK_VECTOR_ELEN_BF_16),
>    RISCV_EXT_FLAG_ENTRY ("zvfbfwma", x_riscv_vector_elen_flags, 
> MASK_VECTOR_ELEN_BF_16),
>    RISCV_EXT_FLAG_ENTRY ("zvfhmin",  x_riscv_vector_elen_flags, 
> MASK_VECTOR_ELEN_FP_16),
>    RISCV_EXT_FLAG_ENTRY ("zvfh",     x_riscv_vector_elen_flags, 
> MASK_VECTOR_ELEN_FP_16),
> +  RISCV_EXT_FLAG_ENTRY ("zvfofp8min",   x_riscv_vector_elen_flags, 
> MASK_VECTOR_ELEN_OFP_8),
>
>    RISCV_EXT_FLAG_ENTRY ("zvbb",   x_riscv_zvb_subext, MASK_ZVBB),
>    RISCV_EXT_FLAG_ENTRY ("zvbc",   x_riscv_zvb_subext, MASK_ZVBC),
> @@ -1714,10 +1721,12 @@ static const riscv_ext_flag_table_t 
> riscv_ext_flag_table[] =
>    RISCV_EXT_FLAG_ENTRY ("zfbfmin",  x_riscv_zf_subext, MASK_ZFBFMIN),
>    RISCV_EXT_FLAG_ENTRY ("zfhmin",   x_riscv_zf_subext, MASK_ZFHMIN),
>    RISCV_EXT_FLAG_ENTRY ("zfh",      x_riscv_zf_subext, MASK_ZFH),
> +  RISCV_EXT_FLAG_ENTRY ("zvfbfa",   x_riscv_zf_subext, MASK_ZVFBFA),
>    RISCV_EXT_FLAG_ENTRY ("zvfbfmin", x_riscv_zf_subext, MASK_ZVFBFMIN),
>    RISCV_EXT_FLAG_ENTRY ("zvfbfwma", x_riscv_zf_subext, MASK_ZVFBFWMA),
>    RISCV_EXT_FLAG_ENTRY ("zvfhmin",  x_riscv_zf_subext, MASK_ZVFHMIN),
>    RISCV_EXT_FLAG_ENTRY ("zvfh",     x_riscv_zf_subext, MASK_ZVFH),
> +  RISCV_EXT_FLAG_ENTRY ("zvfofp8min",   x_riscv_zf_subext, MASK_ZVFOFP8MIN),
>
>    RISCV_EXT_FLAG_ENTRY ("zfa", x_riscv_zfa_subext, MASK_ZFA),
>
> diff --git a/gcc/config/riscv/riscv-vector-builtins.cc 
> b/gcc/config/riscv/riscv-vector-builtins.cc
> index 61dcdabbb403..290b342abc56 100644
> --- a/gcc/config/riscv/riscv-vector-builtins.cc
> +++ b/gcc/config/riscv/riscv-vector-builtins.cc
> @@ -4915,6 +4915,26 @@ validate_instance_type_required_extensions (const 
> rvv_type_info type,
>  {
>    uint64_t exts = type.required_extensions;
>
> +  if ((exts & RVV_REQUIRE_ELEN_BF_16)
> +      && !TARGET_VECTOR_ELEN_BF_16_P (riscv_vector_elen_flags))
> +    {
> +      error_at (EXPR_LOCATION (exp),
> +               "built-in function %qE requires the "
> +               "zvfbfa ISA extension",
> +               exp);
> +      return false;
> +    }
> +
> +  if ((exts & RVV_REQUIRE_ELEN_OFP_8)
> +      && !TARGET_VECTOR_ELEN_OFP_8_P (riscv_vector_elen_flags))
> +    {
> +      error_at (EXPR_LOCATION (exp),
> +               "built-in function %qE requires the "
> +               "zvfofp8min ISA extension",
> +               exp);
> +      return false;
> +    }
> +
>    if ((exts & RVV_REQUIRE_ELEN_BF_16)
>        && !TARGET_VECTOR_ELEN_BF_16_P (riscv_vector_elen_flags))
>      {
> diff --git a/gcc/config/riscv/riscv-vector-builtins.h 
> b/gcc/config/riscv/riscv-vector-builtins.h
> index 42ba90577079..f3ca912bf725 100644
> --- a/gcc/config/riscv/riscv-vector-builtins.h
> +++ b/gcc/config/riscv/riscv-vector-builtins.h
> @@ -110,6 +110,7 @@ static const unsigned int CP_WRITE_CSR = 1U << 5;
>  #define RVV_REQUIRE_MIN_VLEN_64 (1 << 5)       /* Require TARGET_MIN_VLEN >= 
> 64.  */
>  #define RVV_REQUIRE_ELEN_FP_16 (1 << 6) /* Require FP ELEN >= 32.  */
>  #define RVV_REQUIRE_ELEN_BF_16 (1 << 7) /* Require BF16.  */
> +#define RVV_REQUIRE_ELEN_OFP_8 (1 << 8) /* Require OFP8.  */
>
>  /* Enumerates the required extensions.  */
>  enum required_ext
> @@ -125,8 +126,10 @@ enum required_ext
>    ZVKSED_EXT,          /* Crypto vector Zvksed sub-ext */
>    ZVKSH_EXT,           /* Crypto vector Zvksh sub-ext */
>    XTHEADVECTOR_EXT,    /* XTheadVector extension */
> +  ZVFBFA_EXT,          /* Zvfbfa extension */
>    ZVFBFMIN_EXT,                /* Zvfbfmin extension */
>    ZVFBFWMA_EXT,                /* Zvfbfwma extension */
> +  ZVFOFP8MIN_EXT,              /* Zvfofp8min extension */
>    XSFVQMACCQOQ_EXT,    /* XSFVQMACCQOQ extension */
>    XSFVQMACCDOD_EXT,    /* XSFVQMACCDOD extension */
>    XSFVFNRCLIPXFQF_EXT, /* XSFVFNRCLIPXFQF extension */
> @@ -159,10 +162,14 @@ static inline const char * required_ext_to_isa_name 
> (enum required_ext required)
>        return "zvksh";
>      case XTHEADVECTOR_EXT:
>        return "xtheadvector";
> +    case ZVFBFA_EXT:
> +      return "zvfbfa";
>      case ZVFBFMIN_EXT:
>        return "zvfbfmin";
>      case ZVFBFWMA_EXT:
>        return "zvfbfwma";
> +    case ZVFOFP8MIN_EXT:
> +      return "zvfofp8min";
>      case XSFVQMACCQOQ_EXT:
>        return "xsfvqmaccqoq";
>      case XSFVQMACCDOD_EXT:
> @@ -202,10 +209,14 @@ static inline bool required_extensions_specified (enum 
> required_ext required)
>        return TARGET_ZVKSH;
>      case XTHEADVECTOR_EXT:
>        return TARGET_XTHEADVECTOR;
> +    case ZVFBFA_EXT:
> +      return TARGET_ZVFBFA;
>      case ZVFBFMIN_EXT:
>        return TARGET_ZVFBFMIN;
>      case ZVFBFWMA_EXT:
>        return TARGET_ZVFBFWMA;
> +    case ZVFOFP8MIN_EXT:
> +      return TARGET_ZVFOFP8MIN;
>      case XSFVQMACCQOQ_EXT:
>        return TARGET_XSFVQMACCQOQ;
>      case XSFVQMACCDOD_EXT:
> @@ -349,10 +360,14 @@ struct function_group_info
>          return TARGET_ZVKSH;
>        case XTHEADVECTOR_EXT:
>         return TARGET_XTHEADVECTOR;
> +      case ZVFBFA_EXT:
> +       return TARGET_ZVFBFA;
>        case ZVFBFMIN_EXT:
>         return TARGET_ZVFBFMIN;
>        case ZVFBFWMA_EXT:
>         return TARGET_ZVFBFWMA;
> +      case ZVFOFP8MIN_EXT:
> +       return TARGET_ZVFOFP8MIN;
>        case XSFVQMACCQOQ_EXT:
>         return TARGET_XSFVQMACCQOQ;
>        case XSFVQMACCDOD_EXT:
> diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt
> index 7515c8ea13dd..800c0776f357 100644
> --- a/gcc/config/riscv/riscv.opt
> +++ b/gcc/config/riscv/riscv.opt
> @@ -334,6 +334,8 @@ Mask(VECTOR_ELEN_FP_16) Var(riscv_vector_elen_flags)
>
>  Mask(VECTOR_ELEN_BF_16) Var(riscv_vector_elen_flags)
>
> +Mask(VECTOR_ELEN_OFP_8) Var(riscv_vector_elen_flags)
> +
>  TargetVariable
>  int riscv_zvl_flags
>
> @@ -426,6 +428,8 @@ Mask(ZFHMIN)  Var(riscv_zf_subext)
>
>  Mask(ZFH)     Var(riscv_zf_subext)
>
> +Mask(ZVFBFA) Var(riscv_zf_subext)
> +
>  Mask(ZVFBFMIN) Var(riscv_zf_subext)
>
>  Mask(ZVFBFWMA) Var(riscv_zf_subext)
> @@ -434,6 +438,8 @@ Mask(ZVFHMIN) Var(riscv_zf_subext)
>
>  Mask(ZVFH)    Var(riscv_zf_subext)
>
> +Mask(ZVFOFP8MIN) Var(riscv_zf_subext)
> +
>  TargetVariable
>  int riscv_zfa_subext
>
> diff --git a/gcc/testsuite/gcc.target/riscv/arch-45.c 
> b/gcc/testsuite/gcc.target/riscv/arch-45.c
> new file mode 100644
> index 000000000000..e7f3d35ba332
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/arch-45.c
> @@ -0,0 +1,5 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zvfbfa -mabi=lp64" } */
> +int foo()
> +{
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/arch-46.c 
> b/gcc/testsuite/gcc.target/riscv/arch-46.c
> new file mode 100644
> index 000000000000..797b2af011ba
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/arch-46.c
> @@ -0,0 +1,5 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zvfofp8min -mabi=lp64" } */
> +int foo()
> +{
> +}
> --
> 2.43.0
>

Reply via email to