This patch support svrsw60t59b extension[1].
To enable GCC to recognize and process svrsw60t59b extension correctly at 
compile time.

[1] https://github.com/riscv/Svrsw60t59b

gcc/ChangeLog:

        * common/config/riscv/riscv-common.cc:
        (riscv_ext_version_table) New extension.
        (riscv_ext_flag_table) Ditto.
        * config/riscv/riscv-opts.h: New mask.

gcc/testsuite/ChangeLog:

        * gcc.target/riscv/arch-45.c: New test.

gcc/doc:

        * doc/invoke.texi(RISC-V Options): New extension

Signed-off-by: Mingzhu Yan <yanming...@iscas.ac.cn>
---
 gcc/common/config/riscv/riscv-common.cc  | 16 +++++++++-------
 gcc/config/riscv/riscv.opt               |  2 ++
 gcc/doc/invoke.texi                      |  4 ++++
 gcc/testsuite/gcc.target/riscv/arch-45.c |  5 +++++
 4 files changed, 20 insertions(+), 7 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/riscv/arch-45.c

diff --git a/gcc/common/config/riscv/riscv-common.cc 
b/gcc/common/config/riscv/riscv-common.cc
index b34409adf..c104cc335 100644
--- a/gcc/common/config/riscv/riscv-common.cc
+++ b/gcc/common/config/riscv/riscv-common.cc
@@ -409,10 +409,11 @@ static const struct riscv_ext_version 
riscv_ext_version_table[] =
   {"ssstateen", ISA_SPEC_CLASS_NONE, 1, 0},
   {"sstc",      ISA_SPEC_CLASS_NONE, 1, 0},
 
-  {"svinval", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"svnapot", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"svpbmt",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"svvptc",  ISA_SPEC_CLASS_NONE, 1, 0},
+  {"svinval",     ISA_SPEC_CLASS_NONE, 1, 0},
+  {"svnapot",     ISA_SPEC_CLASS_NONE, 1, 0},
+  {"svpbmt",      ISA_SPEC_CLASS_NONE, 1, 0},
+  {"svvptc",      ISA_SPEC_CLASS_NONE, 1, 0},
+  {"svrsw60t59b", ISA_SPEC_CLASS_NONE, 1, 0},
 
   {"xcvmac", ISA_SPEC_CLASS_NONE, 1, 0},
   {"xcvalu", ISA_SPEC_CLASS_NONE, 1, 0},
@@ -1732,9 +1733,10 @@ static const riscv_ext_flag_table_t 
riscv_ext_flag_table[] =
   RISCV_EXT_FLAG_ENTRY ("zcmp", x_riscv_zc_subext, MASK_ZCMP),
   RISCV_EXT_FLAG_ENTRY ("zcmt", x_riscv_zc_subext, MASK_ZCMT),
 
-  RISCV_EXT_FLAG_ENTRY ("svinval", x_riscv_sv_subext, MASK_SVINVAL),
-  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 ("svinval",     x_riscv_sv_subext, MASK_SVINVAL),
+  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 ("svrsw60t59b", x_riscv_sv_subext, MASK_SVRSW60T59B),
 
   RISCV_EXT_FLAG_ENTRY ("ztso", x_riscv_ztso_subext, MASK_ZTSO),
 
diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt
index 7515c8ea1..4c6387ab7 100644
--- a/gcc/config/riscv/riscv.opt
+++ b/gcc/config/riscv/riscv.opt
@@ -472,6 +472,8 @@ Mask(SVNAPOT) Var(riscv_sv_subext)
 
 Mask(SVVPTC) Var(riscv_sv_subext)
 
+Mask(SVRSW60T59B) Var(riscv_sv_subext)
+
 TargetVariable
 int riscv_ztso_subext
 
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 1819bcdcd..7e61106c5 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -31234,6 +31234,10 @@ to @samp{zvks} and @samp{zvkg}.
 @tab 1.0
 @tab Page-based memory types extension.
 
+@item svrsw60t59b
+@tab 1.0
+@tab PTE Reserved-for-Software Bits 60-59 extension.
+
 @item xcvmac
 @tab 1.0
 @tab Core-V multiply-accumulate extension.
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 000000000..fe3ee441d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-45.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_svrsw60t59b -mabi=lp64" } */
+int foo()
+{
+}
-- 
2.43.0

Reply via email to