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 >