pushed to trunk, thanks :)

On Mon, May 12, 2025 at 5:20 PM Dongyan Chen
<chendong...@isrc.iscas.ac.cn> wrote:
>
> This patch support ssnpm, smnpm, smmpm, sspm and supm extensions[1].
> To enable GCC to recognize and process ssnpm, smnpm, smmpm, sspm and
> supm extensions correctly at compile time.
>
> [1]https://github.com/riscv/riscv-j-extension/blob/master/zjpm/instructions.adoc
>
> Changes for v5:
> - Fix the testsuite error in arch-50.c.
> Changes for v4:
> - Fix the code based on the commit id 
> 9b13bea07706a7cae0185f8a860d67209308c050.
> Changes for v3:
> - Fix the error messages in gcc/testsuite/gcc.target/riscv/arch-46.c
> Changes for v2:
> - Add the sspm and supm extensions.
> - Add the check_conflict_ext function to check the compatibility of ssnpm, 
> smnpm, smmpm, sspm and supm extensions.
> - Add the test cases for ssnpm, smnpm, smmpm, sspm and supm extensions.
>
> gcc/ChangeLog:
>
>       * common/config/riscv/riscv-common.cc
> (riscv_subset_list::check_conflict_ext): New extension.
>       * config/riscv/riscv.opt: Ditto.
>
> gcc/testsuite/ChangeLog:
>
>       * gcc.target/riscv/arch-49.c: New test.
>       * gcc.target/riscv/arch-50.c: New test.
>
> ---
>  gcc/common/config/riscv/riscv-common.cc  | 36 ++++++++++++++++++++++++
>  gcc/config/riscv/riscv.opt               | 19 +++++++++++++
>  gcc/testsuite/gcc.target/riscv/arch-49.c |  5 ++++
>  gcc/testsuite/gcc.target/riscv/arch-50.c | 10 +++++++
>  4 files changed, 70 insertions(+)
>  create mode 100644 gcc/testsuite/gcc.target/riscv/arch-49.c
>  create mode 100644 gcc/testsuite/gcc.target/riscv/arch-50.c
>
> diff --git a/gcc/common/config/riscv/riscv-common.cc 
> b/gcc/common/config/riscv/riscv-common.cc
> index ca14eb96b253..0039833ad3e4 100644
> --- a/gcc/common/config/riscv/riscv-common.cc
> +++ b/gcc/common/config/riscv/riscv-common.cc
> @@ -259,6 +259,10 @@ static const riscv_implied_info_t riscv_implied_info[] =
>    {"ssstateen", "zicsr"},
>    {"sstc", "zicsr"},
>
> +  {"ssnpm", "zicsr"},
> +  {"smnpm", "zicsr"},
> +  {"smmpm", "zicsr"},
> +
>    {"xsfvcp", "zve32x"},
>
>    {NULL, NULL}
> @@ -445,6 +449,12 @@ static const struct riscv_ext_version 
> riscv_ext_version_table[] =
>    {"sstc",      ISA_SPEC_CLASS_NONE, 1, 0},
>    {"ssstrict",  ISA_SPEC_CLASS_NONE, 1, 0},
>
> +  {"ssnpm",     ISA_SPEC_CLASS_NONE, 1, 0},
> +  {"smnpm",     ISA_SPEC_CLASS_NONE, 1, 0},
> +  {"smmpm",     ISA_SPEC_CLASS_NONE, 1, 0},
> +  {"sspm",      ISA_SPEC_CLASS_NONE, 1, 0},
> +  {"supm",      ISA_SPEC_CLASS_NONE, 1, 0},
> +
>    {"svade",   ISA_SPEC_CLASS_NONE, 1, 0},
>    {"svadu",   ISA_SPEC_CLASS_NONE, 1, 0},
>    {"svinval", ISA_SPEC_CLASS_NONE, 1, 0},
> @@ -1347,6 +1357,26 @@ riscv_subset_list::check_conflict_ext ()
>      error_at (m_loc, "%<-march=%s%>: zcf extension supports in rv32 only",
>               m_arch);
>
> +  if (lookup ("ssnpm") && m_xlen == 32)
> +    error_at (m_loc, "%<-march=%s%>: ssnpm extension supports in rv64 only",
> +             m_arch);
> +
> +  if (lookup ("smnpm") && m_xlen == 32)
> +    error_at (m_loc, "%<-march=%s%>: smnpm extension supports in rv64 only",
> +             m_arch);
> +
> +  if (lookup ("smmpm") && m_xlen == 32)
> +    error_at (m_loc, "%<-march=%s%>: smmpm extension supports in rv64 only",
> +             m_arch);
> +
> +  if (lookup ("sspm") && m_xlen == 32)
> +    error_at (m_loc, "%<-march=%s%>: sspm extension supports in rv64 only",
> +             m_arch);
> +
> +  if (lookup ("supm") && m_xlen == 32)
> +    error_at (m_loc, "%<-march=%s%>: supm extension supports in rv64 only",
> +             m_arch);
> +
>    if (lookup ("zfinx") && lookup ("f"))
>      error_at (m_loc,
>               "%<-march=%s%>: z*inx conflicts with floating-point "
> @@ -1777,6 +1807,12 @@ static const riscv_ext_flag_table_t 
> riscv_ext_flag_table[] =
>    RISCV_EXT_FLAG_ENTRY ("svnapot",     x_riscv_sv_subext, MASK_SVNAPOT),
>    RISCV_EXT_FLAG_ENTRY ("svvptc",      x_riscv_sv_subext, MASK_SVVPTC),
>
> +  RISCV_EXT_FLAG_ENTRY ("ssnpm", x_riscv_ss_subext, MASK_SSNPM),
> +  RISCV_EXT_FLAG_ENTRY ("smnpm", x_riscv_sm_subext, MASK_SMNPM),
> +  RISCV_EXT_FLAG_ENTRY ("smmpm", x_riscv_sm_subext, MASK_SMMPM),
> +  RISCV_EXT_FLAG_ENTRY ("sspm", x_riscv_ss_subext, MASK_SSPM),
> +  RISCV_EXT_FLAG_ENTRY ("supm", x_riscv_su_subext, MASK_SUPM),
> +
>    RISCV_EXT_FLAG_ENTRY ("ztso", x_riscv_ztso_subext, MASK_ZTSO),
>
>    RISCV_EXT_FLAG_ENTRY ("xcvmac",  x_riscv_xcv_subext, MASK_XCVMAC),
> diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt
> index 80593ee139c1..3db9408c2387 100644
> --- a/gcc/config/riscv/riscv.opt
> +++ b/gcc/config/riscv/riscv.opt
> @@ -478,6 +478,25 @@ Mask(SVNAPOT) Var(riscv_sv_subext)
>
>  Mask(SVVPTC) Var(riscv_sv_subext)
>
> +TargetVariable
> +int riscv_ss_subext
> +
> +Mask(SSNPM) Var(riscv_ss_subext)
> +
> +Mask(SSPM) Var(riscv_ss_subext)
> +
> +TargetVariable
> +int riscv_sm_subext
> +
> +Mask(SMNPM) Var(riscv_sm_subext)
> +
> +Mask(SMMPM) Var(riscv_sm_subext)
> +
> +TargetVariable
> +int riscv_su_subext
> +
> +Mask(SUPM) Var(riscv_su_subext)
> +
>  TargetVariable
>  int riscv_ztso_subext
>
> diff --git a/gcc/testsuite/gcc.target/riscv/arch-49.c 
> b/gcc/testsuite/gcc.target/riscv/arch-49.c
> new file mode 100644
> index 000000000000..8f95737b248f
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/arch-49.c
> @@ -0,0 +1,5 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_ssnpm_smnpm_smmpm_sspm_supm -mabi=lp64" } */
> +int foo()
> +{
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/arch-50.c 
> b/gcc/testsuite/gcc.target/riscv/arch-50.c
> new file mode 100644
> index 000000000000..37027c1b3241
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/arch-50.c
> @@ -0,0 +1,15 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_ssnpm_smnpm_smmpm_sspm_supm -mabi=ilp32d" } */
> +int foo()
> +{
> +}
> +/* { dg-error "'-march=rv32gc_ssnpm_smnpm_smmpm_sspm_supm': ssnpm extension 
> supports in rv64 only" "" { target *-*-* } 0 } */
> +/* { dg-error "'-march=rv32gc_ssnpm_smnpm_smmpm_sspm_supm': smnpm extension 
> supports in rv64 only" "" { target *-*-* } 0 } */
> +/* { dg-error "'-march=rv32gc_ssnpm_smnpm_smmpm_sspm_supm': smmpm extension 
> supports in rv64 only" "" { target *-*-* } 0 } */
> +/* { dg-error "'-march=rv32gc_ssnpm_smnpm_smmpm_sspm_supm': sspm extension 
> supports in rv64 only" "" { target *-*-* } 0 } */
> +/* { dg-error "'-march=rv32gc_ssnpm_smnpm_smmpm_sspm_supm': supm extension 
> supports in rv64 only" "" { target *-*-* } 0 } */
> +/* { dg-error 
> "'-march=rv32imafdc_zicsr_zifencei_zmmul_zaamo_zalrsc_zca_zcd_zcf_smmpm_smnpm_ssnpm_sspm_supm':
>  ssnpm extension supports in rv64 only" "" { target *-*-* } 0 } */
> +/* { dg-error 
> "'-march=rv32imafdc_zicsr_zifencei_zmmul_zaamo_zalrsc_zca_zcd_zcf_smmpm_smnpm_ssnpm_sspm_supm':
>  smnpm extension supports in rv64 only" "" { target *-*-* } 0 } */
> +/* { dg-error 
> "'-march=rv32imafdc_zicsr_zifencei_zmmul_zaamo_zalrsc_zca_zcd_zcf_smmpm_smnpm_ssnpm_sspm_supm':
>  smmpm extension supports in rv64 only" "" { target *-*-* } 0 } */
> +/* { dg-error 
> "'-march=rv32imafdc_zicsr_zifencei_zmmul_zaamo_zalrsc_zca_zcd_zcf_smmpm_smnpm_ssnpm_sspm_supm':
>  sspm extension supports in rv64 only" "" { target *-*-* } 0 } */
> +/* { dg-error 
> "'-march=rv32imafdc_zicsr_zifencei_zmmul_zaamo_zalrsc_zca_zcd_zcf_smmpm_smnpm_ssnpm_sspm_supm':
>  supm extension supports in rv64 only" "" { target *-*-* } 0 } */
> --
> 2.43.0
>

Reply via email to