diff options
author | Dongyan Chen <chendongyan@isrc.iscas.ac.cn> | 2025-05-12 17:19:24 +0800 |
---|---|---|
committer | Kito Cheng <kito.cheng@sifive.com> | 2025-05-12 21:31:14 +0800 |
commit | 7e5f5fd101f8686d34532f7afab9314f252e71cd (patch) | |
tree | 9ce1bb7b1a8bd91076592e805ea1dabb653328b8 /gcc/common | |
parent | d42f7244289ad8be1d3f7320528240bb849979e4 (diff) | |
download | gcc-7e5f5fd101f8686d34532f7afab9314f252e71cd.zip gcc-7e5f5fd101f8686d34532f7afab9314f252e71cd.tar.gz gcc-7e5f5fd101f8686d34532f7afab9314f252e71cd.tar.bz2 |
RISC-V: Minimal support for ssnpm, smnpm and smmpm extensions.
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-ss-1.c: New test.
* gcc.target/riscv/arch-ss-2.c: New test.
Diffstat (limited to 'gcc/common')
-rw-r--r-- | gcc/common/config/riscv/riscv-common.cc | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc index c89931aa..d3240f7 100644 --- a/gcc/common/config/riscv/riscv-common.cc +++ b/gcc/common/config/riscv/riscv-common.cc @@ -262,6 +262,10 @@ static const riscv_implied_info_t riscv_implied_info[] = {"ssstateen", "zicsr"}, {"sstc", "zicsr"}, + {"ssnpm", "zicsr"}, + {"smnpm", "zicsr"}, + {"smmpm", "zicsr"}, + {"xsfvcp", "zve32x"}, {NULL, NULL} @@ -457,6 +461,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}, @@ -1454,6 +1464,26 @@ riscv_subset_list::check_conflict_ext () error_at (m_loc, "%<-march=%s%>: zclsd 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 " @@ -1888,6 +1918,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), |