aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-riscv.c
diff options
context:
space:
mode:
authorJiawei <jiawei@iscas.ac.cn>2024-06-11 21:59:00 +0800
committerNelson Chu <nelson@rivosinc.com>2024-06-12 08:47:19 +0800
commitb7641ae1afaa39e31e70114f0ee9a295820709aa (patch)
treee01560828128115c52b90614ef7cf0e60a34d446 /gas/config/tc-riscv.c
parenta3d147a45447c4431ea66dd37911ac9415cb4fd8 (diff)
downloadgdb-b7641ae1afaa39e31e70114f0ee9a295820709aa.zip
gdb-b7641ae1afaa39e31e70114f0ee9a295820709aa.tar.gz
gdb-b7641ae1afaa39e31e70114f0ee9a295820709aa.tar.bz2
RISC-V: Support S[sm]csrind extension csrs.
This patch supports RISC-V Smcsrind/Sscsrind privilege extension csrs. Reuse csr 'smselect/siselect', 'mireg/sireg' and 'vsiselect,vsireg' csrs in Smaia/Ssaia extension. bfd/ChangeLog: * elfxx-riscv.c: New extensions. gas/ChangeLog: * NEWS: Updated. * config/tc-riscv.c (enum riscv_csr_class): New extensions. (riscv_csr_address): Ditto. * testsuite/gas/riscv/csr-version-1p10.d: New csrs. * testsuite/gas/riscv/csr-version-1p10.l: Ditto. * testsuite/gas/riscv/csr-version-1p11.d: Ditto. * testsuite/gas/riscv/csr-version-1p11.l: Ditto. * testsuite/gas/riscv/csr-version-1p12.d: Ditto. * testsuite/gas/riscv/csr-version-1p12.l: Ditto. * testsuite/gas/riscv/csr.s: Ditto. * testsuite/gas/riscv/march-help.l: New extensions. include/ChangeLog: * opcode/riscv-opc.h (CSR_MIREG2): New csr. (CSR_MIREG3): Ditto. (CSR_MIREG4): Ditto. (CSR_MIREG5): Ditto. (CSR_MIREG6): Ditto. (CSR_SIREG2): Ditto. (CSR_SIREG3): Ditto. (CSR_SIREG4): Ditto. (CSR_SIREG5): Ditto. (CSR_SIREG6): Ditto. (CSR_VSIREG2): Ditto. (CSR_VSIREG3): Ditto. (CSR_VSIREG4): Ditto. (CSR_VSIREG5): Ditto. (CSR_VSIREG6): Ditto. (DECLARE_CSR): Ditto.
Diffstat (limited to 'gas/config/tc-riscv.c')
-rw-r--r--gas/config/tc-riscv.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
index ccc073a..e008370 100644
--- a/gas/config/tc-riscv.c
+++ b/gas/config/tc-riscv.c
@@ -77,6 +77,8 @@ enum riscv_csr_class
CSR_CLASS_H_32, /* hypervisor, rv32 only */
CSR_CLASS_SMAIA, /* Smaia */
CSR_CLASS_SMAIA_32, /* Smaia, rv32 only */
+ CSR_CLASS_SMAIA_OR_SMCSRIND, /* Smaia/Smcsrind */
+ CSR_CLASS_SMCSRIND, /* Smcsrind */
CSR_CLASS_SMCNTRPMF, /* Smcntrpmf */
CSR_CLASS_SMCNTRPMF_32, /* Smcntrpmf, rv32 only */
CSR_CLASS_SMSTATEEN, /* Smstateen only */
@@ -85,6 +87,10 @@ enum riscv_csr_class
CSR_CLASS_SSAIA_AND_H, /* Ssaia with H */
CSR_CLASS_SSAIA_32, /* Ssaia, rv32 only */
CSR_CLASS_SSAIA_AND_H_32, /* Ssaia with H, rv32 only */
+ CSR_CLASS_SSAIA_OR_SSCSRIND, /* Ssaia/Smcsrind */
+ CSR_CLASS_SSAIA_OR_SSCSRIND_AND_H, /* Ssaia/Smcsrind with H */
+ CSR_CLASS_SSCSRIND, /* Sscsrind */
+ CSR_CLASS_SSCSRIND_AND_H, /* Sscsrind with H */
CSR_CLASS_SSSTATEEN, /* S[ms]stateen only */
CSR_CLASS_SSSTATEEN_AND_H, /* S[ms]stateen only (with H) */
CSR_CLASS_SSSTATEEN_AND_H_32, /* S[ms]stateen RV32 only (with H) */
@@ -1059,6 +1065,12 @@ riscv_csr_address (const char *csr_name,
case CSR_CLASS_SMAIA:
extension = "smaia";
break;
+ case CSR_CLASS_SMAIA_OR_SMCSRIND:
+ extension = "smaia or smcsrind";
+ break;
+ case CSR_CLASS_SMCSRIND:
+ extension = "smcsrind";
+ break;
case CSR_CLASS_SMCNTRPMF_32:
is_rv32_only = true;
/* Fall through. */
@@ -1082,6 +1094,16 @@ riscv_csr_address (const char *csr_name,
|| csr_class == CSR_CLASS_SSAIA_AND_H_32);
extension = "ssaia";
break;
+ case CSR_CLASS_SSAIA_OR_SSCSRIND:
+ case CSR_CLASS_SSAIA_OR_SSCSRIND_AND_H:
+ is_h_required = (csr_class == CSR_CLASS_SSAIA_OR_SSCSRIND_AND_H);
+ extension = "ssaia or sscsrind";
+ break;
+ case CSR_CLASS_SSCSRIND:
+ case CSR_CLASS_SSCSRIND_AND_H:
+ is_h_required = (csr_class == CSR_CLASS_SSCSRIND_AND_H);
+ extension = "sscsrind";
+ break;
case CSR_CLASS_SSSTATEEN_AND_H_32:
is_rv32_only = true;
/* Fall through. */