RISC-V: Support the ISA-dependent CSR checking.

According to the riscv privilege spec, some CSR are only valid when rv32 or
the specific extension is set.  We extend the DECLARE_CSR and DECLARE_CSR_ALIAS
to record more informaton we need, and then check whether the CSR is valid
according to these information.  We report warning message when the CSR is
invalid, so we have a choice between error and warning by --fatal-warnings
option.  Also, a --no-warn/-W option is used to turn the warnings off, if
people don't want the warnings.

	gas/
	* config/tc-riscv.c (enum riscv_csr_class): New enum.  Used to decide
	whether or not this CSR is legal in the current ISA string.
	(struct riscv_csr_extra): New structure to hold all extra information
	of CSR.
	(riscv_init_csr_hash): New function.  According to the DECLARE_CSR and
	DECLARE_CSR_ALIAS, insert CSR extra information into csr_extra_hash.
	Call hash_reg_name to insert CSR address into reg_names_hash.
	(md_begin): Call riscv_init_csr_hashes for each DECLARE_CSR.
	(reg_csr_lookup_internal, riscv_csr_class_check): New functions.
	Decide whether the CSR is valid according to the csr_extra_hash.
	(init_opcode_hash): Update 'if (hash_error != NULL)' as hash_error is
	not a boolean.  This is same as riscv_init_csr_hash, so keep the
	consistent usage.

	* testsuite/gas/riscv/csr-dw-regnums.d: Add -march=rv32if option.
	* testsuite/gas/riscv/priv-reg.d: Add f-ext by -march option.
	* testsuite/gas/riscv/priv-reg-fail-fext.d: New testcase.  The source
	file is `priv-reg.s`, and the ISA is rv32i without f-ext, so the
	f-ext CSR are not allowed.
	* testsuite/gas/riscv/priv-reg-fail-fext.l: Likewise.
	* testsuite/gas/riscv/priv-reg-fail-rv32-only.d: New testcase.  The
	source file is `priv-reg.s`, and the ISA is rv64if, so the
	rv32-only CSR are not allowed.
	* testsuite/gas/riscv/priv-reg-fail-rv32-only.l: Likewise.

	include/
	* opcode/riscv-opc.h: Extend DECLARE_CSR and DECLARE_CSR_ALIAS to
	record riscv_csr_class.

	opcodes/
	* riscv-dis.c (print_insn_args): Updated since the DECLARE_CSR is changed.

	gdb/
	* riscv-tdep.c: Updated since the DECLARE_CSR is changed.
	* riscv-tdep.h: Likewise.
	* features/riscv/rebuild-csr-xml.sh: Generate the 64bit-csr.xml without
	rv32-only CSR.
	* features/riscv/64bit-csr.xml: Regernated.

	binutils/
	* dwarf.c: Updated since the DECLARE_CSR is changed.
This commit is contained in:
Nelson Chu 2020-02-12 02:18:49 -08:00 committed by Jim Wilson
parent 10a95fcc1f
commit bd0cf5a6ba
19 changed files with 480 additions and 325 deletions

View File

@ -1,3 +1,8 @@
2020-02-20 Nelson Chu <nelson.chu@sifive.com>
* dwarf.c (regname_internal_riscv): Updated since the DECLARE_CSR
is changed.
2020-02-19 Jordan Rupprecht <rupprecht@google.com>
* objdump.c (show_line): call bfd_demangle when using do_demangle.

View File

@ -7381,7 +7381,7 @@ regname_internal_riscv (unsigned int regno)
document. */
switch (regno)
{
#define DECLARE_CSR(NAME,VALUE) case VALUE + 4096: name = #NAME; break;
#define DECLARE_CSR(NAME,VALUE,CLASS) case VALUE + 4096: name = #NAME; break;
#include "opcode/riscv-opc.h"
#undef DECLARE_CSR

View File

@ -1,3 +1,31 @@
2020-02-20 Nelson Chu <nelson.chu@sifive.com>
* config/tc-riscv.c (csr_extra_hash): New.
(enum riscv_csr_class): New enum. Used to decide
whether or not this CSR is legal in the current ISA string.
(struct riscv_csr_extra): New structure to hold all extra information
of CSR.
(riscv_init_csr_hashes): New. According to the DECLARE_CSR and
DECLARE_CSR_ALIAS, insert CSR extra information into csr_extra_hash.
Call hash_reg_name to insert CSR address into reg_names_hash.
(reg_csr_lookup_internal, riscv_csr_class_check): New functions.
Decide whether the CSR is valid according to the csr_extra_hash.
(reg_lookup_internal): Call reg_csr_lookup_internal for CSRs.
(init_opcode_hash): Update 'if (hash_error != NULL)' as hash_error is
not a boolean. This is same as riscv_init_csr_hash, so keep the
consistent usage.
(md_begin): Call riscv_init_csr_hashes for each DECLARE_CSR.
* testsuite/gas/riscv/csr-dw-regnums.d: Add -march=rv32if option.
* testsuite/gas/riscv/priv-reg.d: Add f-ext by -march option.
* testsuite/gas/riscv/priv-reg-fail-fext.d: New testcase. The source
file is `priv-reg.s`, and the ISA is rv32i without f-ext, so the
f-ext CSR are not allowed.
* testsuite/gas/riscv/priv-reg-fail-fext.l: Likewise.
* testsuite/gas/riscv/priv-reg-fail-rv32-only.d: New testcase. The
source file is `priv-reg.s`, and the ISA is rv64if, so the
rv32-only CSR are not allowed.
* testsuite/gas/riscv/priv-reg-fail-rv32-only.l: Likewise.
2020-02-21 Alan Modra <amodra@gmail.com>
* config/tc-pdp11.c (md_apply_fix): Handle BFD_RELOC_32.

View File

@ -455,6 +455,7 @@ enum reg_class
};
static struct hash_control *reg_names_hash = NULL;
static struct hash_control *csr_extra_hash = NULL;
#define ENCODE_REG_HASH(cls, n) \
((void *)(uintptr_t)((n) * RCLASS_MAX + (cls) + 1))
@ -480,6 +481,86 @@ hash_reg_names (enum reg_class class, const char * const names[], unsigned n)
hash_reg_name (class, names[i], i);
}
/* All RISC-V CSRs belong to one of these classes. */
enum riscv_csr_class
{
CSR_CLASS_NONE,
CSR_CLASS_I,
CSR_CLASS_I_32, /* rv32 only */
CSR_CLASS_F, /* f-ext only */
};
/* This structure holds all restricted conditions for a CSR. */
struct riscv_csr_extra
{
/* Class to which this CSR belongs. Used to decide whether or
not this CSR is legal in the current -march context. */
enum riscv_csr_class csr_class;
};
/* Init two hashes, csr_extra_hash and reg_names_hash, for CSR. */
static void
riscv_init_csr_hashes (const char *name,
unsigned address,
enum riscv_csr_class class)
{
struct riscv_csr_extra *entry = XNEW (struct riscv_csr_extra);
entry->csr_class = class;
const char *hash_error =
hash_insert (csr_extra_hash, name, (void *) entry);
if (hash_error != NULL)
{
fprintf (stderr, _("internal error: can't hash `%s': %s\n"),
name, hash_error);
/* Probably a memory allocation problem? Give up now. */
as_fatal (_("Broken assembler. No assembly attempted."));
}
hash_reg_name (RCLASS_CSR, name, address);
}
/* Check wether the CSR is valid according to the ISA. */
static bfd_boolean
riscv_csr_class_check (enum riscv_csr_class csr_class)
{
switch (csr_class)
{
case CSR_CLASS_I: return riscv_subset_supports ("i");
case CSR_CLASS_F: return riscv_subset_supports ("f");
case CSR_CLASS_I_32:
return (xlen == 32 && riscv_subset_supports ("i"));
default:
return FALSE;
}
}
/* If the CSR is defined, then we call `riscv_csr_class_check` to do the
further checking. Return FALSE if the CSR is not defined. Otherwise,
return TRUE. */
static bfd_boolean
reg_csr_lookup_internal (const char *s)
{
struct riscv_csr_extra *r =
(struct riscv_csr_extra *) hash_find (csr_extra_hash, s);
if (r == NULL)
return FALSE;
/* We just report the warning when the CSR is invalid. */
if (!riscv_csr_class_check (r->csr_class))
as_warn (_("Invalid CSR `%s' for the current ISA"), s);
return TRUE;
}
static unsigned int
reg_lookup_internal (const char *s, enum reg_class class)
{
@ -491,6 +572,9 @@ reg_lookup_internal (const char *s, enum reg_class class)
if (riscv_opts.rve && class == RCLASS_GPR && DECODE_REG_NUM (r) > 15)
return -1;
if (class == RCLASS_CSR && !reg_csr_lookup_internal (s))
return -1;
return DECODE_REG_NUM (r);
}
@ -721,7 +805,7 @@ init_opcode_hash (const struct riscv_opcode *opcodes,
const char *hash_error =
hash_insert (hash, name, (void *) &opcodes[i]);
if (hash_error)
if (hash_error != NULL)
{
fprintf (stderr, _("internal error: can't hash `%s': %s\n"),
opcodes[i].name, hash_error);
@ -769,18 +853,19 @@ md_begin (void)
hash_reg_names (RCLASS_GPR, riscv_gpr_names_abi, NGPR);
hash_reg_names (RCLASS_FPR, riscv_fpr_names_numeric, NFPR);
hash_reg_names (RCLASS_FPR, riscv_fpr_names_abi, NFPR);
/* Add "fp" as an alias for "s0". */
hash_reg_name (RCLASS_GPR, "fp", 8);
opcode_names_hash = hash_new ();
init_opcode_names_hash ();
#define DECLARE_CSR(name, num) hash_reg_name (RCLASS_CSR, #name, num);
#define DECLARE_CSR_ALIAS(name, num) DECLARE_CSR(name, num);
/* Create and insert CSR hash tables. */
csr_extra_hash = hash_new ();
#define DECLARE_CSR(name, num, class) riscv_init_csr_hashes (#name, num, class);
#define DECLARE_CSR_ALIAS(name, num, class) DECLARE_CSR(name, num, class);
#include "opcode/riscv-opc.h"
#undef DECLARE_CSR
opcode_names_hash = hash_new ();
init_opcode_names_hash ();
/* Set the default alignment for the text section. */
record_alignment (text_section, riscv_opts.rvc ? 1 : 2);
}

View File

@ -1,4 +1,4 @@
#as:
#as: -march=rv32if
#objdump: --dwarf=frames

View File

@ -0,0 +1,3 @@
#as: -march=rv32i
#source: priv-reg.s
#warning_output: priv-reg-fail-fext.l

View File

@ -0,0 +1,4 @@
.*Assembler messages:
.*Warning: Invalid CSR `fflags' for the current ISA
.*Warning: Invalid CSR `frm' for the current ISA
.*Warning: Invalid CSR `fcsr' for the current ISA

View File

@ -0,0 +1,3 @@
#as: -march=rv64if
#source: priv-reg.s
#warning_output: priv-reg-fail-rv32-only.l

View File

@ -0,0 +1,66 @@
.*Assembler messages:
.*Warning: Invalid CSR `cycleh' for the current ISA
.*Warning: Invalid CSR `timeh' for the current ISA
.*Warning: Invalid CSR `instreth' for the current ISA
.*Warning: Invalid CSR `hpmcounter3h' for the current ISA
.*Warning: Invalid CSR `hpmcounter4h' for the current ISA
.*Warning: Invalid CSR `hpmcounter5h' for the current ISA
.*Warning: Invalid CSR `hpmcounter6h' for the current ISA
.*Warning: Invalid CSR `hpmcounter7h' for the current ISA
.*Warning: Invalid CSR `hpmcounter8h' for the current ISA
.*Warning: Invalid CSR `hpmcounter9h' for the current ISA
.*Warning: Invalid CSR `hpmcounter10h' for the current ISA
.*Warning: Invalid CSR `hpmcounter11h' for the current ISA
.*Warning: Invalid CSR `hpmcounter12h' for the current ISA
.*Warning: Invalid CSR `hpmcounter13h' for the current ISA
.*Warning: Invalid CSR `hpmcounter14h' for the current ISA
.*Warning: Invalid CSR `hpmcounter15h' for the current ISA
.*Warning: Invalid CSR `hpmcounter16h' for the current ISA
.*Warning: Invalid CSR `hpmcounter17h' for the current ISA
.*Warning: Invalid CSR `hpmcounter18h' for the current ISA
.*Warning: Invalid CSR `hpmcounter19h' for the current ISA
.*Warning: Invalid CSR `hpmcounter20h' for the current ISA
.*Warning: Invalid CSR `hpmcounter21h' for the current ISA
.*Warning: Invalid CSR `hpmcounter22h' for the current ISA
.*Warning: Invalid CSR `hpmcounter23h' for the current ISA
.*Warning: Invalid CSR `hpmcounter24h' for the current ISA
.*Warning: Invalid CSR `hpmcounter25h' for the current ISA
.*Warning: Invalid CSR `hpmcounter26h' for the current ISA
.*Warning: Invalid CSR `hpmcounter27h' for the current ISA
.*Warning: Invalid CSR `hpmcounter28h' for the current ISA
.*Warning: Invalid CSR `hpmcounter29h' for the current ISA
.*Warning: Invalid CSR `hpmcounter30h' for the current ISA
.*Warning: Invalid CSR `hpmcounter31h' for the current ISA
.*Warning: Invalid CSR `mcycleh' for the current ISA
.*Warning: Invalid CSR `minstreth' for the current ISA
.*Warning: Invalid CSR `mhpmcounter3h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter4h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter5h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter6h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter7h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter8h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter9h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter10h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter11h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter12h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter13h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter14h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter15h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter16h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter17h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter18h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter19h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter20h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter21h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter22h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter23h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter24h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter25h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter26h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter27h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter28h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter29h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter30h' for the current ISA
.*Warning: Invalid CSR `mhpmcounter31h' for the current ISA
.*Warning: Invalid CSR `pmpcfg1' for the current ISA
.*Warning: Invalid CSR `pmpcfg3' for the current ISA

View File

@ -1,4 +1,4 @@
#as: -march=rv32i
#as: -march=rv32if
#objdump: -dr
.*:[ ]+file format .*

View File

@ -1,3 +1,11 @@
2020-02-20 Nelson Chu <nelson.chu@sifive.com>
* riscv-tdep.c: Updated since the DECLARE_CSR is changed.
* riscv-tdep.h: Likewise.
* features/riscv/rebuild-csr-xml.sh: Generate the 64bit-csr.xml without
rv32-only CSR.
* features/riscv/64bit-csr.xml: Regenerated.
2020-02-20 Sergio Durigan Junior <sergiodj@redhat.com>
Tom Tromey <tom@tromey.com>

View File

@ -50,38 +50,6 @@
<reg name="hpmcounter29" bitsize="64"/>
<reg name="hpmcounter30" bitsize="64"/>
<reg name="hpmcounter31" bitsize="64"/>
<reg name="cycleh" bitsize="64"/>
<reg name="timeh" bitsize="64"/>
<reg name="instreth" bitsize="64"/>
<reg name="hpmcounter3h" bitsize="64"/>
<reg name="hpmcounter4h" bitsize="64"/>
<reg name="hpmcounter5h" bitsize="64"/>
<reg name="hpmcounter6h" bitsize="64"/>
<reg name="hpmcounter7h" bitsize="64"/>
<reg name="hpmcounter8h" bitsize="64"/>
<reg name="hpmcounter9h" bitsize="64"/>
<reg name="hpmcounter10h" bitsize="64"/>
<reg name="hpmcounter11h" bitsize="64"/>
<reg name="hpmcounter12h" bitsize="64"/>
<reg name="hpmcounter13h" bitsize="64"/>
<reg name="hpmcounter14h" bitsize="64"/>
<reg name="hpmcounter15h" bitsize="64"/>
<reg name="hpmcounter16h" bitsize="64"/>
<reg name="hpmcounter17h" bitsize="64"/>
<reg name="hpmcounter18h" bitsize="64"/>
<reg name="hpmcounter19h" bitsize="64"/>
<reg name="hpmcounter20h" bitsize="64"/>
<reg name="hpmcounter21h" bitsize="64"/>
<reg name="hpmcounter22h" bitsize="64"/>
<reg name="hpmcounter23h" bitsize="64"/>
<reg name="hpmcounter24h" bitsize="64"/>
<reg name="hpmcounter25h" bitsize="64"/>
<reg name="hpmcounter26h" bitsize="64"/>
<reg name="hpmcounter27h" bitsize="64"/>
<reg name="hpmcounter28h" bitsize="64"/>
<reg name="hpmcounter29h" bitsize="64"/>
<reg name="hpmcounter30h" bitsize="64"/>
<reg name="hpmcounter31h" bitsize="64"/>
<reg name="sstatus" bitsize="64"/>
<reg name="sedeleg" bitsize="64"/>
<reg name="sideleg" bitsize="64"/>
@ -111,9 +79,7 @@
<reg name="mtval" bitsize="64"/>
<reg name="mip" bitsize="64"/>
<reg name="pmpcfg0" bitsize="64"/>
<reg name="pmpcfg1" bitsize="64"/>
<reg name="pmpcfg2" bitsize="64"/>
<reg name="pmpcfg3" bitsize="64"/>
<reg name="pmpaddr0" bitsize="64"/>
<reg name="pmpaddr1" bitsize="64"/>
<reg name="pmpaddr2" bitsize="64"/>
@ -161,37 +127,6 @@
<reg name="mhpmcounter29" bitsize="64"/>
<reg name="mhpmcounter30" bitsize="64"/>
<reg name="mhpmcounter31" bitsize="64"/>
<reg name="mcycleh" bitsize="64"/>
<reg name="minstreth" bitsize="64"/>
<reg name="mhpmcounter3h" bitsize="64"/>
<reg name="mhpmcounter4h" bitsize="64"/>
<reg name="mhpmcounter5h" bitsize="64"/>
<reg name="mhpmcounter6h" bitsize="64"/>
<reg name="mhpmcounter7h" bitsize="64"/>
<reg name="mhpmcounter8h" bitsize="64"/>
<reg name="mhpmcounter9h" bitsize="64"/>
<reg name="mhpmcounter10h" bitsize="64"/>
<reg name="mhpmcounter11h" bitsize="64"/>
<reg name="mhpmcounter12h" bitsize="64"/>
<reg name="mhpmcounter13h" bitsize="64"/>
<reg name="mhpmcounter14h" bitsize="64"/>
<reg name="mhpmcounter15h" bitsize="64"/>
<reg name="mhpmcounter16h" bitsize="64"/>
<reg name="mhpmcounter17h" bitsize="64"/>
<reg name="mhpmcounter18h" bitsize="64"/>
<reg name="mhpmcounter19h" bitsize="64"/>
<reg name="mhpmcounter20h" bitsize="64"/>
<reg name="mhpmcounter21h" bitsize="64"/>
<reg name="mhpmcounter22h" bitsize="64"/>
<reg name="mhpmcounter23h" bitsize="64"/>
<reg name="mhpmcounter24h" bitsize="64"/>
<reg name="mhpmcounter25h" bitsize="64"/>
<reg name="mhpmcounter26h" bitsize="64"/>
<reg name="mhpmcounter27h" bitsize="64"/>
<reg name="mhpmcounter28h" bitsize="64"/>
<reg name="mhpmcounter29h" bitsize="64"/>
<reg name="mhpmcounter30h" bitsize="64"/>
<reg name="mhpmcounter31h" bitsize="64"/>
<reg name="mhpmevent3" bitsize="64"/>
<reg name="mhpmevent4" bitsize="64"/>
<reg name="mhpmevent5" bitsize="64"/>

View File

@ -19,10 +19,18 @@ function gen_csr_xml ()
<feature name="org.gnu.gdb.riscv.csr">
EOF
if [ "$bitsize" = "64" ]; then
grep "^DECLARE_CSR(" ${RISCV_OPC_FILE} \
| sed -e "s!DECLARE_CSR(\(.*\), .*! <reg name=\"\1\" bitsize=\"$bitsize\"/>!"
| sed /CSR_CLASS_.*_32/d \
| sed -e "s!DECLARE_CSR(\(.*\), .*, .*! <reg name=\"\1\" bitsize=\"$bitsize\"/>!"
echo "</feature>"
else
grep "^DECLARE_CSR(" ${RISCV_OPC_FILE} \
| sed -e "s!DECLARE_CSR(\(.*\), .*, .*! <reg name=\"\1\" bitsize=\"$bitsize\"/>!"
echo "</feature>"
fi
}
gen_csr_xml 32 > ${RISCV_FEATURE_DIR}/32bit-csr.xml

View File

@ -240,7 +240,7 @@ static struct riscv_register_feature riscv_csr_feature =
{
"org.gnu.gdb.riscv.csr",
{
#define DECLARE_CSR(NAME,VALUE) \
#define DECLARE_CSR(NAME,VALUE,CLASS) \
{ RISCV_ ## VALUE ## _REGNUM, { # NAME }, false },
#include "opcode/riscv-opc.h"
#undef DECLARE_CSR
@ -534,7 +534,7 @@ riscv_register_name (struct gdbarch *gdbarch, int regnum)
if (regnum >= RISCV_FIRST_CSR_REGNUM && regnum <= RISCV_LAST_CSR_REGNUM)
{
#define DECLARE_CSR(NAME,VALUE) \
#define DECLARE_CSR(NAME,VALUE,CLASS) \
case RISCV_ ## VALUE ## _REGNUM: return # NAME;
switch (regnum)
@ -870,7 +870,7 @@ riscv_is_regnum_a_named_csr (int regnum)
switch (regnum)
{
#define DECLARE_CSR(name, num) case RISCV_ ## num ## _REGNUM:
#define DECLARE_CSR(name, num, class) case RISCV_ ## num ## _REGNUM:
#include "opcode/riscv-opc.h"
#undef DECLARE_CSR
return true;

View File

@ -44,7 +44,7 @@ enum
RISCV_LAST_FP_REGNUM = 64, /* Last Floating Point Register */
RISCV_FIRST_CSR_REGNUM = 65, /* First CSR */
#define DECLARE_CSR(name, num) \
#define DECLARE_CSR(name, num, class) \
RISCV_ ## num ## _REGNUM = RISCV_FIRST_CSR_REGNUM + num,
#include "opcode/riscv-opc.h"
#undef DECLARE_CSR

View File

@ -1,3 +1,8 @@
2020-02-20 Nelson Chu <nelson.chu@sifive.com>
* opcode/riscv-opc.h: Extend DECLARE_CSR and DECLARE_CSR_ALIAS to
record riscv_csr_class.
2020-02-10 Stam Markianos-Wright <stam.markianos-wright@arm.com>
Matthew Malcomson <matthew.malcomson@arm.com>

View File

@ -1116,257 +1116,257 @@ DECLARE_INSN(custom3_rd_rs1, MATCH_CUSTOM3_RD_RS1, MASK_CUSTOM3_RD_RS1)
DECLARE_INSN(custom3_rd_rs1_rs2, MATCH_CUSTOM3_RD_RS1_RS2, MASK_CUSTOM3_RD_RS1_RS2)
#endif
#ifdef DECLARE_CSR
DECLARE_CSR(ustatus, CSR_USTATUS)
DECLARE_CSR(uie, CSR_UIE)
DECLARE_CSR(utvec, CSR_UTVEC)
DECLARE_CSR(uscratch, CSR_USCRATCH)
DECLARE_CSR(uepc, CSR_UEPC)
DECLARE_CSR(ucause, CSR_UCAUSE)
DECLARE_CSR(utval, CSR_UTVAL)
DECLARE_CSR(uip, CSR_UIP)
DECLARE_CSR(fflags, CSR_FFLAGS)
DECLARE_CSR(frm, CSR_FRM)
DECLARE_CSR(fcsr, CSR_FCSR)
DECLARE_CSR(cycle, CSR_CYCLE)
DECLARE_CSR(time, CSR_TIME)
DECLARE_CSR(instret, CSR_INSTRET)
DECLARE_CSR(hpmcounter3, CSR_HPMCOUNTER3)
DECLARE_CSR(hpmcounter4, CSR_HPMCOUNTER4)
DECLARE_CSR(hpmcounter5, CSR_HPMCOUNTER5)
DECLARE_CSR(hpmcounter6, CSR_HPMCOUNTER6)
DECLARE_CSR(hpmcounter7, CSR_HPMCOUNTER7)
DECLARE_CSR(hpmcounter8, CSR_HPMCOUNTER8)
DECLARE_CSR(hpmcounter9, CSR_HPMCOUNTER9)
DECLARE_CSR(hpmcounter10, CSR_HPMCOUNTER10)
DECLARE_CSR(hpmcounter11, CSR_HPMCOUNTER11)
DECLARE_CSR(hpmcounter12, CSR_HPMCOUNTER12)
DECLARE_CSR(hpmcounter13, CSR_HPMCOUNTER13)
DECLARE_CSR(hpmcounter14, CSR_HPMCOUNTER14)
DECLARE_CSR(hpmcounter15, CSR_HPMCOUNTER15)
DECLARE_CSR(hpmcounter16, CSR_HPMCOUNTER16)
DECLARE_CSR(hpmcounter17, CSR_HPMCOUNTER17)
DECLARE_CSR(hpmcounter18, CSR_HPMCOUNTER18)
DECLARE_CSR(hpmcounter19, CSR_HPMCOUNTER19)
DECLARE_CSR(hpmcounter20, CSR_HPMCOUNTER20)
DECLARE_CSR(hpmcounter21, CSR_HPMCOUNTER21)
DECLARE_CSR(hpmcounter22, CSR_HPMCOUNTER22)
DECLARE_CSR(hpmcounter23, CSR_HPMCOUNTER23)
DECLARE_CSR(hpmcounter24, CSR_HPMCOUNTER24)
DECLARE_CSR(hpmcounter25, CSR_HPMCOUNTER25)
DECLARE_CSR(hpmcounter26, CSR_HPMCOUNTER26)
DECLARE_CSR(hpmcounter27, CSR_HPMCOUNTER27)
DECLARE_CSR(hpmcounter28, CSR_HPMCOUNTER28)
DECLARE_CSR(hpmcounter29, CSR_HPMCOUNTER29)
DECLARE_CSR(hpmcounter30, CSR_HPMCOUNTER30)
DECLARE_CSR(hpmcounter31, CSR_HPMCOUNTER31)
DECLARE_CSR(cycleh, CSR_CYCLEH)
DECLARE_CSR(timeh, CSR_TIMEH)
DECLARE_CSR(instreth, CSR_INSTRETH)
DECLARE_CSR(hpmcounter3h, CSR_HPMCOUNTER3H)
DECLARE_CSR(hpmcounter4h, CSR_HPMCOUNTER4H)
DECLARE_CSR(hpmcounter5h, CSR_HPMCOUNTER5H)
DECLARE_CSR(hpmcounter6h, CSR_HPMCOUNTER6H)
DECLARE_CSR(hpmcounter7h, CSR_HPMCOUNTER7H)
DECLARE_CSR(hpmcounter8h, CSR_HPMCOUNTER8H)
DECLARE_CSR(hpmcounter9h, CSR_HPMCOUNTER9H)
DECLARE_CSR(hpmcounter10h, CSR_HPMCOUNTER10H)
DECLARE_CSR(hpmcounter11h, CSR_HPMCOUNTER11H)
DECLARE_CSR(hpmcounter12h, CSR_HPMCOUNTER12H)
DECLARE_CSR(hpmcounter13h, CSR_HPMCOUNTER13H)
DECLARE_CSR(hpmcounter14h, CSR_HPMCOUNTER14H)
DECLARE_CSR(hpmcounter15h, CSR_HPMCOUNTER15H)
DECLARE_CSR(hpmcounter16h, CSR_HPMCOUNTER16H)
DECLARE_CSR(hpmcounter17h, CSR_HPMCOUNTER17H)
DECLARE_CSR(hpmcounter18h, CSR_HPMCOUNTER18H)
DECLARE_CSR(hpmcounter19h, CSR_HPMCOUNTER19H)
DECLARE_CSR(hpmcounter20h, CSR_HPMCOUNTER20H)
DECLARE_CSR(hpmcounter21h, CSR_HPMCOUNTER21H)
DECLARE_CSR(hpmcounter22h, CSR_HPMCOUNTER22H)
DECLARE_CSR(hpmcounter23h, CSR_HPMCOUNTER23H)
DECLARE_CSR(hpmcounter24h, CSR_HPMCOUNTER24H)
DECLARE_CSR(hpmcounter25h, CSR_HPMCOUNTER25H)
DECLARE_CSR(hpmcounter26h, CSR_HPMCOUNTER26H)
DECLARE_CSR(hpmcounter27h, CSR_HPMCOUNTER27H)
DECLARE_CSR(hpmcounter28h, CSR_HPMCOUNTER28H)
DECLARE_CSR(hpmcounter29h, CSR_HPMCOUNTER29H)
DECLARE_CSR(hpmcounter30h, CSR_HPMCOUNTER30H)
DECLARE_CSR(hpmcounter31h, CSR_HPMCOUNTER31H)
DECLARE_CSR(sstatus, CSR_SSTATUS)
DECLARE_CSR(sedeleg, CSR_SEDELEG)
DECLARE_CSR(sideleg, CSR_SIDELEG)
DECLARE_CSR(sie, CSR_SIE)
DECLARE_CSR(stvec, CSR_STVEC)
DECLARE_CSR(scounteren, CSR_SCOUNTEREN)
DECLARE_CSR(sscratch, CSR_SSCRATCH)
DECLARE_CSR(sepc, CSR_SEPC)
DECLARE_CSR(scause, CSR_SCAUSE)
DECLARE_CSR(stval, CSR_STVAL)
DECLARE_CSR(sip, CSR_SIP)
DECLARE_CSR(satp, CSR_SATP)
DECLARE_CSR(mvendorid, CSR_MVENDORID)
DECLARE_CSR(marchid, CSR_MARCHID)
DECLARE_CSR(mimpid, CSR_MIMPID)
DECLARE_CSR(mhartid, CSR_MHARTID)
DECLARE_CSR(mstatus, CSR_MSTATUS)
DECLARE_CSR(misa, CSR_MISA)
DECLARE_CSR(medeleg, CSR_MEDELEG)
DECLARE_CSR(mideleg, CSR_MIDELEG)
DECLARE_CSR(mie, CSR_MIE)
DECLARE_CSR(mtvec, CSR_MTVEC)
DECLARE_CSR(mcounteren, CSR_MCOUNTEREN)
DECLARE_CSR(mscratch, CSR_MSCRATCH)
DECLARE_CSR(mepc, CSR_MEPC)
DECLARE_CSR(mcause, CSR_MCAUSE)
DECLARE_CSR(mtval, CSR_MTVAL)
DECLARE_CSR(mip, CSR_MIP)
DECLARE_CSR(pmpcfg0, CSR_PMPCFG0)
DECLARE_CSR(pmpcfg1, CSR_PMPCFG1)
DECLARE_CSR(pmpcfg2, CSR_PMPCFG2)
DECLARE_CSR(pmpcfg3, CSR_PMPCFG3)
DECLARE_CSR(pmpaddr0, CSR_PMPADDR0)
DECLARE_CSR(pmpaddr1, CSR_PMPADDR1)
DECLARE_CSR(pmpaddr2, CSR_PMPADDR2)
DECLARE_CSR(pmpaddr3, CSR_PMPADDR3)
DECLARE_CSR(pmpaddr4, CSR_PMPADDR4)
DECLARE_CSR(pmpaddr5, CSR_PMPADDR5)
DECLARE_CSR(pmpaddr6, CSR_PMPADDR6)
DECLARE_CSR(pmpaddr7, CSR_PMPADDR7)
DECLARE_CSR(pmpaddr8, CSR_PMPADDR8)
DECLARE_CSR(pmpaddr9, CSR_PMPADDR9)
DECLARE_CSR(pmpaddr10, CSR_PMPADDR10)
DECLARE_CSR(pmpaddr11, CSR_PMPADDR11)
DECLARE_CSR(pmpaddr12, CSR_PMPADDR12)
DECLARE_CSR(pmpaddr13, CSR_PMPADDR13)
DECLARE_CSR(pmpaddr14, CSR_PMPADDR14)
DECLARE_CSR(pmpaddr15, CSR_PMPADDR15)
DECLARE_CSR(mcycle, CSR_MCYCLE)
DECLARE_CSR(minstret, CSR_MINSTRET)
DECLARE_CSR(mhpmcounter3, CSR_MHPMCOUNTER3)
DECLARE_CSR(mhpmcounter4, CSR_MHPMCOUNTER4)
DECLARE_CSR(mhpmcounter5, CSR_MHPMCOUNTER5)
DECLARE_CSR(mhpmcounter6, CSR_MHPMCOUNTER6)
DECLARE_CSR(mhpmcounter7, CSR_MHPMCOUNTER7)
DECLARE_CSR(mhpmcounter8, CSR_MHPMCOUNTER8)
DECLARE_CSR(mhpmcounter9, CSR_MHPMCOUNTER9)
DECLARE_CSR(mhpmcounter10, CSR_MHPMCOUNTER10)
DECLARE_CSR(mhpmcounter11, CSR_MHPMCOUNTER11)
DECLARE_CSR(mhpmcounter12, CSR_MHPMCOUNTER12)
DECLARE_CSR(mhpmcounter13, CSR_MHPMCOUNTER13)
DECLARE_CSR(mhpmcounter14, CSR_MHPMCOUNTER14)
DECLARE_CSR(mhpmcounter15, CSR_MHPMCOUNTER15)
DECLARE_CSR(mhpmcounter16, CSR_MHPMCOUNTER16)
DECLARE_CSR(mhpmcounter17, CSR_MHPMCOUNTER17)
DECLARE_CSR(mhpmcounter18, CSR_MHPMCOUNTER18)
DECLARE_CSR(mhpmcounter19, CSR_MHPMCOUNTER19)
DECLARE_CSR(mhpmcounter20, CSR_MHPMCOUNTER20)
DECLARE_CSR(mhpmcounter21, CSR_MHPMCOUNTER21)
DECLARE_CSR(mhpmcounter22, CSR_MHPMCOUNTER22)
DECLARE_CSR(mhpmcounter23, CSR_MHPMCOUNTER23)
DECLARE_CSR(mhpmcounter24, CSR_MHPMCOUNTER24)
DECLARE_CSR(mhpmcounter25, CSR_MHPMCOUNTER25)
DECLARE_CSR(mhpmcounter26, CSR_MHPMCOUNTER26)
DECLARE_CSR(mhpmcounter27, CSR_MHPMCOUNTER27)
DECLARE_CSR(mhpmcounter28, CSR_MHPMCOUNTER28)
DECLARE_CSR(mhpmcounter29, CSR_MHPMCOUNTER29)
DECLARE_CSR(mhpmcounter30, CSR_MHPMCOUNTER30)
DECLARE_CSR(mhpmcounter31, CSR_MHPMCOUNTER31)
DECLARE_CSR(mcycleh, CSR_MCYCLEH)
DECLARE_CSR(minstreth, CSR_MINSTRETH)
DECLARE_CSR(mhpmcounter3h, CSR_MHPMCOUNTER3H)
DECLARE_CSR(mhpmcounter4h, CSR_MHPMCOUNTER4H)
DECLARE_CSR(mhpmcounter5h, CSR_MHPMCOUNTER5H)
DECLARE_CSR(mhpmcounter6h, CSR_MHPMCOUNTER6H)
DECLARE_CSR(mhpmcounter7h, CSR_MHPMCOUNTER7H)
DECLARE_CSR(mhpmcounter8h, CSR_MHPMCOUNTER8H)
DECLARE_CSR(mhpmcounter9h, CSR_MHPMCOUNTER9H)
DECLARE_CSR(mhpmcounter10h, CSR_MHPMCOUNTER10H)
DECLARE_CSR(mhpmcounter11h, CSR_MHPMCOUNTER11H)
DECLARE_CSR(mhpmcounter12h, CSR_MHPMCOUNTER12H)
DECLARE_CSR(mhpmcounter13h, CSR_MHPMCOUNTER13H)
DECLARE_CSR(mhpmcounter14h, CSR_MHPMCOUNTER14H)
DECLARE_CSR(mhpmcounter15h, CSR_MHPMCOUNTER15H)
DECLARE_CSR(mhpmcounter16h, CSR_MHPMCOUNTER16H)
DECLARE_CSR(mhpmcounter17h, CSR_MHPMCOUNTER17H)
DECLARE_CSR(mhpmcounter18h, CSR_MHPMCOUNTER18H)
DECLARE_CSR(mhpmcounter19h, CSR_MHPMCOUNTER19H)
DECLARE_CSR(mhpmcounter20h, CSR_MHPMCOUNTER20H)
DECLARE_CSR(mhpmcounter21h, CSR_MHPMCOUNTER21H)
DECLARE_CSR(mhpmcounter22h, CSR_MHPMCOUNTER22H)
DECLARE_CSR(mhpmcounter23h, CSR_MHPMCOUNTER23H)
DECLARE_CSR(mhpmcounter24h, CSR_MHPMCOUNTER24H)
DECLARE_CSR(mhpmcounter25h, CSR_MHPMCOUNTER25H)
DECLARE_CSR(mhpmcounter26h, CSR_MHPMCOUNTER26H)
DECLARE_CSR(mhpmcounter27h, CSR_MHPMCOUNTER27H)
DECLARE_CSR(mhpmcounter28h, CSR_MHPMCOUNTER28H)
DECLARE_CSR(mhpmcounter29h, CSR_MHPMCOUNTER29H)
DECLARE_CSR(mhpmcounter30h, CSR_MHPMCOUNTER30H)
DECLARE_CSR(mhpmcounter31h, CSR_MHPMCOUNTER31H)
DECLARE_CSR(mhpmevent3, CSR_MHPMEVENT3)
DECLARE_CSR(mhpmevent4, CSR_MHPMEVENT4)
DECLARE_CSR(mhpmevent5, CSR_MHPMEVENT5)
DECLARE_CSR(mhpmevent6, CSR_MHPMEVENT6)
DECLARE_CSR(mhpmevent7, CSR_MHPMEVENT7)
DECLARE_CSR(mhpmevent8, CSR_MHPMEVENT8)
DECLARE_CSR(mhpmevent9, CSR_MHPMEVENT9)
DECLARE_CSR(mhpmevent10, CSR_MHPMEVENT10)
DECLARE_CSR(mhpmevent11, CSR_MHPMEVENT11)
DECLARE_CSR(mhpmevent12, CSR_MHPMEVENT12)
DECLARE_CSR(mhpmevent13, CSR_MHPMEVENT13)
DECLARE_CSR(mhpmevent14, CSR_MHPMEVENT14)
DECLARE_CSR(mhpmevent15, CSR_MHPMEVENT15)
DECLARE_CSR(mhpmevent16, CSR_MHPMEVENT16)
DECLARE_CSR(mhpmevent17, CSR_MHPMEVENT17)
DECLARE_CSR(mhpmevent18, CSR_MHPMEVENT18)
DECLARE_CSR(mhpmevent19, CSR_MHPMEVENT19)
DECLARE_CSR(mhpmevent20, CSR_MHPMEVENT20)
DECLARE_CSR(mhpmevent21, CSR_MHPMEVENT21)
DECLARE_CSR(mhpmevent22, CSR_MHPMEVENT22)
DECLARE_CSR(mhpmevent23, CSR_MHPMEVENT23)
DECLARE_CSR(mhpmevent24, CSR_MHPMEVENT24)
DECLARE_CSR(mhpmevent25, CSR_MHPMEVENT25)
DECLARE_CSR(mhpmevent26, CSR_MHPMEVENT26)
DECLARE_CSR(mhpmevent27, CSR_MHPMEVENT27)
DECLARE_CSR(mhpmevent28, CSR_MHPMEVENT28)
DECLARE_CSR(mhpmevent29, CSR_MHPMEVENT29)
DECLARE_CSR(mhpmevent30, CSR_MHPMEVENT30)
DECLARE_CSR(mhpmevent31, CSR_MHPMEVENT31)
DECLARE_CSR(tselect, CSR_TSELECT)
DECLARE_CSR(tdata1, CSR_TDATA1)
DECLARE_CSR(tdata2, CSR_TDATA2)
DECLARE_CSR(tdata3, CSR_TDATA3)
DECLARE_CSR(dcsr, CSR_DCSR)
DECLARE_CSR(dpc, CSR_DPC)
DECLARE_CSR(dscratch, CSR_DSCRATCH)
DECLARE_CSR(ustatus, CSR_USTATUS, CSR_CLASS_I)
DECLARE_CSR(uie, CSR_UIE, CSR_CLASS_I)
DECLARE_CSR(utvec, CSR_UTVEC, CSR_CLASS_I)
DECLARE_CSR(uscratch, CSR_USCRATCH, CSR_CLASS_I)
DECLARE_CSR(uepc, CSR_UEPC, CSR_CLASS_I)
DECLARE_CSR(ucause, CSR_UCAUSE, CSR_CLASS_I)
DECLARE_CSR(utval, CSR_UTVAL, CSR_CLASS_I)
DECLARE_CSR(uip, CSR_UIP, CSR_CLASS_I)
DECLARE_CSR(fflags, CSR_FFLAGS, CSR_CLASS_F)
DECLARE_CSR(frm, CSR_FRM, CSR_CLASS_F)
DECLARE_CSR(fcsr, CSR_FCSR, CSR_CLASS_F)
DECLARE_CSR(cycle, CSR_CYCLE, CSR_CLASS_I)
DECLARE_CSR(time, CSR_TIME, CSR_CLASS_I)
DECLARE_CSR(instret, CSR_INSTRET, CSR_CLASS_I)
DECLARE_CSR(hpmcounter3, CSR_HPMCOUNTER3, CSR_CLASS_I)
DECLARE_CSR(hpmcounter4, CSR_HPMCOUNTER4, CSR_CLASS_I)
DECLARE_CSR(hpmcounter5, CSR_HPMCOUNTER5, CSR_CLASS_I)
DECLARE_CSR(hpmcounter6, CSR_HPMCOUNTER6, CSR_CLASS_I)
DECLARE_CSR(hpmcounter7, CSR_HPMCOUNTER7, CSR_CLASS_I)
DECLARE_CSR(hpmcounter8, CSR_HPMCOUNTER8, CSR_CLASS_I)
DECLARE_CSR(hpmcounter9, CSR_HPMCOUNTER9, CSR_CLASS_I)
DECLARE_CSR(hpmcounter10, CSR_HPMCOUNTER10, CSR_CLASS_I)
DECLARE_CSR(hpmcounter11, CSR_HPMCOUNTER11, CSR_CLASS_I)
DECLARE_CSR(hpmcounter12, CSR_HPMCOUNTER12, CSR_CLASS_I)
DECLARE_CSR(hpmcounter13, CSR_HPMCOUNTER13, CSR_CLASS_I)
DECLARE_CSR(hpmcounter14, CSR_HPMCOUNTER14, CSR_CLASS_I)
DECLARE_CSR(hpmcounter15, CSR_HPMCOUNTER15, CSR_CLASS_I)
DECLARE_CSR(hpmcounter16, CSR_HPMCOUNTER16, CSR_CLASS_I)
DECLARE_CSR(hpmcounter17, CSR_HPMCOUNTER17, CSR_CLASS_I)
DECLARE_CSR(hpmcounter18, CSR_HPMCOUNTER18, CSR_CLASS_I)
DECLARE_CSR(hpmcounter19, CSR_HPMCOUNTER19, CSR_CLASS_I)
DECLARE_CSR(hpmcounter20, CSR_HPMCOUNTER20, CSR_CLASS_I)
DECLARE_CSR(hpmcounter21, CSR_HPMCOUNTER21, CSR_CLASS_I)
DECLARE_CSR(hpmcounter22, CSR_HPMCOUNTER22, CSR_CLASS_I)
DECLARE_CSR(hpmcounter23, CSR_HPMCOUNTER23, CSR_CLASS_I)
DECLARE_CSR(hpmcounter24, CSR_HPMCOUNTER24, CSR_CLASS_I)
DECLARE_CSR(hpmcounter25, CSR_HPMCOUNTER25, CSR_CLASS_I)
DECLARE_CSR(hpmcounter26, CSR_HPMCOUNTER26, CSR_CLASS_I)
DECLARE_CSR(hpmcounter27, CSR_HPMCOUNTER27, CSR_CLASS_I)
DECLARE_CSR(hpmcounter28, CSR_HPMCOUNTER28, CSR_CLASS_I)
DECLARE_CSR(hpmcounter29, CSR_HPMCOUNTER29, CSR_CLASS_I)
DECLARE_CSR(hpmcounter30, CSR_HPMCOUNTER30, CSR_CLASS_I)
DECLARE_CSR(hpmcounter31, CSR_HPMCOUNTER31, CSR_CLASS_I)
DECLARE_CSR(cycleh, CSR_CYCLEH, CSR_CLASS_I_32)
DECLARE_CSR(timeh, CSR_TIMEH, CSR_CLASS_I_32)
DECLARE_CSR(instreth, CSR_INSTRETH, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter3h, CSR_HPMCOUNTER3H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter4h, CSR_HPMCOUNTER4H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter5h, CSR_HPMCOUNTER5H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter6h, CSR_HPMCOUNTER6H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter7h, CSR_HPMCOUNTER7H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter8h, CSR_HPMCOUNTER8H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter9h, CSR_HPMCOUNTER9H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter10h, CSR_HPMCOUNTER10H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter11h, CSR_HPMCOUNTER11H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter12h, CSR_HPMCOUNTER12H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter13h, CSR_HPMCOUNTER13H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter14h, CSR_HPMCOUNTER14H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter15h, CSR_HPMCOUNTER15H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter16h, CSR_HPMCOUNTER16H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter17h, CSR_HPMCOUNTER17H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter18h, CSR_HPMCOUNTER18H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter19h, CSR_HPMCOUNTER19H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter20h, CSR_HPMCOUNTER20H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter21h, CSR_HPMCOUNTER21H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter22h, CSR_HPMCOUNTER22H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter23h, CSR_HPMCOUNTER23H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter24h, CSR_HPMCOUNTER24H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter25h, CSR_HPMCOUNTER25H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter26h, CSR_HPMCOUNTER26H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter27h, CSR_HPMCOUNTER27H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter28h, CSR_HPMCOUNTER28H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter29h, CSR_HPMCOUNTER29H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter30h, CSR_HPMCOUNTER30H, CSR_CLASS_I_32)
DECLARE_CSR(hpmcounter31h, CSR_HPMCOUNTER31H, CSR_CLASS_I_32)
DECLARE_CSR(sstatus, CSR_SSTATUS, CSR_CLASS_I)
DECLARE_CSR(sedeleg, CSR_SEDELEG, CSR_CLASS_I)
DECLARE_CSR(sideleg, CSR_SIDELEG, CSR_CLASS_I)
DECLARE_CSR(sie, CSR_SIE, CSR_CLASS_I)
DECLARE_CSR(stvec, CSR_STVEC, CSR_CLASS_I)
DECLARE_CSR(scounteren, CSR_SCOUNTEREN, CSR_CLASS_I)
DECLARE_CSR(sscratch, CSR_SSCRATCH, CSR_CLASS_I)
DECLARE_CSR(sepc, CSR_SEPC, CSR_CLASS_I)
DECLARE_CSR(scause, CSR_SCAUSE, CSR_CLASS_I)
DECLARE_CSR(stval, CSR_STVAL, CSR_CLASS_I)
DECLARE_CSR(sip, CSR_SIP, CSR_CLASS_I)
DECLARE_CSR(satp, CSR_SATP, CSR_CLASS_I)
DECLARE_CSR(mvendorid, CSR_MVENDORID, CSR_CLASS_I)
DECLARE_CSR(marchid, CSR_MARCHID, CSR_CLASS_I)
DECLARE_CSR(mimpid, CSR_MIMPID, CSR_CLASS_I)
DECLARE_CSR(mhartid, CSR_MHARTID, CSR_CLASS_I)
DECLARE_CSR(mstatus, CSR_MSTATUS, CSR_CLASS_I)
DECLARE_CSR(misa, CSR_MISA, CSR_CLASS_I)
DECLARE_CSR(medeleg, CSR_MEDELEG, CSR_CLASS_I)
DECLARE_CSR(mideleg, CSR_MIDELEG, CSR_CLASS_I)
DECLARE_CSR(mie, CSR_MIE, CSR_CLASS_I)
DECLARE_CSR(mtvec, CSR_MTVEC, CSR_CLASS_I)
DECLARE_CSR(mcounteren, CSR_MCOUNTEREN, CSR_CLASS_I)
DECLARE_CSR(mscratch, CSR_MSCRATCH, CSR_CLASS_I)
DECLARE_CSR(mepc, CSR_MEPC, CSR_CLASS_I)
DECLARE_CSR(mcause, CSR_MCAUSE, CSR_CLASS_I)
DECLARE_CSR(mtval, CSR_MTVAL, CSR_CLASS_I)
DECLARE_CSR(mip, CSR_MIP, CSR_CLASS_I)
DECLARE_CSR(pmpcfg0, CSR_PMPCFG0, CSR_CLASS_I)
DECLARE_CSR(pmpcfg1, CSR_PMPCFG1, CSR_CLASS_I_32)
DECLARE_CSR(pmpcfg2, CSR_PMPCFG2, CSR_CLASS_I)
DECLARE_CSR(pmpcfg3, CSR_PMPCFG3, CSR_CLASS_I_32)
DECLARE_CSR(pmpaddr0, CSR_PMPADDR0, CSR_CLASS_I)
DECLARE_CSR(pmpaddr1, CSR_PMPADDR1, CSR_CLASS_I)
DECLARE_CSR(pmpaddr2, CSR_PMPADDR2, CSR_CLASS_I)
DECLARE_CSR(pmpaddr3, CSR_PMPADDR3, CSR_CLASS_I)
DECLARE_CSR(pmpaddr4, CSR_PMPADDR4, CSR_CLASS_I)
DECLARE_CSR(pmpaddr5, CSR_PMPADDR5, CSR_CLASS_I)
DECLARE_CSR(pmpaddr6, CSR_PMPADDR6, CSR_CLASS_I)
DECLARE_CSR(pmpaddr7, CSR_PMPADDR7, CSR_CLASS_I)
DECLARE_CSR(pmpaddr8, CSR_PMPADDR8, CSR_CLASS_I)
DECLARE_CSR(pmpaddr9, CSR_PMPADDR9, CSR_CLASS_I)
DECLARE_CSR(pmpaddr10, CSR_PMPADDR10, CSR_CLASS_I)
DECLARE_CSR(pmpaddr11, CSR_PMPADDR11, CSR_CLASS_I)
DECLARE_CSR(pmpaddr12, CSR_PMPADDR12, CSR_CLASS_I)
DECLARE_CSR(pmpaddr13, CSR_PMPADDR13, CSR_CLASS_I)
DECLARE_CSR(pmpaddr14, CSR_PMPADDR14, CSR_CLASS_I)
DECLARE_CSR(pmpaddr15, CSR_PMPADDR15, CSR_CLASS_I)
DECLARE_CSR(mcycle, CSR_MCYCLE, CSR_CLASS_I)
DECLARE_CSR(minstret, CSR_MINSTRET, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter3, CSR_MHPMCOUNTER3, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter4, CSR_MHPMCOUNTER4, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter5, CSR_MHPMCOUNTER5, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter6, CSR_MHPMCOUNTER6, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter7, CSR_MHPMCOUNTER7, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter8, CSR_MHPMCOUNTER8, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter9, CSR_MHPMCOUNTER9, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter10, CSR_MHPMCOUNTER10, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter11, CSR_MHPMCOUNTER11, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter12, CSR_MHPMCOUNTER12, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter13, CSR_MHPMCOUNTER13, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter14, CSR_MHPMCOUNTER14, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter15, CSR_MHPMCOUNTER15, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter16, CSR_MHPMCOUNTER16, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter17, CSR_MHPMCOUNTER17, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter18, CSR_MHPMCOUNTER18, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter19, CSR_MHPMCOUNTER19, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter20, CSR_MHPMCOUNTER20, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter21, CSR_MHPMCOUNTER21, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter22, CSR_MHPMCOUNTER22, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter23, CSR_MHPMCOUNTER23, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter24, CSR_MHPMCOUNTER24, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter25, CSR_MHPMCOUNTER25, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter26, CSR_MHPMCOUNTER26, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter27, CSR_MHPMCOUNTER27, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter28, CSR_MHPMCOUNTER28, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter29, CSR_MHPMCOUNTER29, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter30, CSR_MHPMCOUNTER30, CSR_CLASS_I)
DECLARE_CSR(mhpmcounter31, CSR_MHPMCOUNTER31, CSR_CLASS_I)
DECLARE_CSR(mcycleh, CSR_MCYCLEH, CSR_CLASS_I_32)
DECLARE_CSR(minstreth, CSR_MINSTRETH, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter3h, CSR_MHPMCOUNTER3H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter4h, CSR_MHPMCOUNTER4H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter5h, CSR_MHPMCOUNTER5H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter6h, CSR_MHPMCOUNTER6H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter7h, CSR_MHPMCOUNTER7H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter8h, CSR_MHPMCOUNTER8H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter9h, CSR_MHPMCOUNTER9H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter10h, CSR_MHPMCOUNTER10H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter11h, CSR_MHPMCOUNTER11H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter12h, CSR_MHPMCOUNTER12H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter13h, CSR_MHPMCOUNTER13H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter14h, CSR_MHPMCOUNTER14H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter15h, CSR_MHPMCOUNTER15H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter16h, CSR_MHPMCOUNTER16H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter17h, CSR_MHPMCOUNTER17H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter18h, CSR_MHPMCOUNTER18H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter19h, CSR_MHPMCOUNTER19H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter20h, CSR_MHPMCOUNTER20H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter21h, CSR_MHPMCOUNTER21H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter22h, CSR_MHPMCOUNTER22H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter23h, CSR_MHPMCOUNTER23H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter24h, CSR_MHPMCOUNTER24H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter25h, CSR_MHPMCOUNTER25H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter26h, CSR_MHPMCOUNTER26H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter27h, CSR_MHPMCOUNTER27H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter28h, CSR_MHPMCOUNTER28H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter29h, CSR_MHPMCOUNTER29H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter30h, CSR_MHPMCOUNTER30H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmcounter31h, CSR_MHPMCOUNTER31H, CSR_CLASS_I_32)
DECLARE_CSR(mhpmevent3, CSR_MHPMEVENT3, CSR_CLASS_I)
DECLARE_CSR(mhpmevent4, CSR_MHPMEVENT4, CSR_CLASS_I)
DECLARE_CSR(mhpmevent5, CSR_MHPMEVENT5, CSR_CLASS_I)
DECLARE_CSR(mhpmevent6, CSR_MHPMEVENT6, CSR_CLASS_I)
DECLARE_CSR(mhpmevent7, CSR_MHPMEVENT7, CSR_CLASS_I)
DECLARE_CSR(mhpmevent8, CSR_MHPMEVENT8, CSR_CLASS_I)
DECLARE_CSR(mhpmevent9, CSR_MHPMEVENT9, CSR_CLASS_I)
DECLARE_CSR(mhpmevent10, CSR_MHPMEVENT10, CSR_CLASS_I)
DECLARE_CSR(mhpmevent11, CSR_MHPMEVENT11, CSR_CLASS_I)
DECLARE_CSR(mhpmevent12, CSR_MHPMEVENT12, CSR_CLASS_I)
DECLARE_CSR(mhpmevent13, CSR_MHPMEVENT13, CSR_CLASS_I)
DECLARE_CSR(mhpmevent14, CSR_MHPMEVENT14, CSR_CLASS_I)
DECLARE_CSR(mhpmevent15, CSR_MHPMEVENT15, CSR_CLASS_I)
DECLARE_CSR(mhpmevent16, CSR_MHPMEVENT16, CSR_CLASS_I)
DECLARE_CSR(mhpmevent17, CSR_MHPMEVENT17, CSR_CLASS_I)
DECLARE_CSR(mhpmevent18, CSR_MHPMEVENT18, CSR_CLASS_I)
DECLARE_CSR(mhpmevent19, CSR_MHPMEVENT19, CSR_CLASS_I)
DECLARE_CSR(mhpmevent20, CSR_MHPMEVENT20, CSR_CLASS_I)
DECLARE_CSR(mhpmevent21, CSR_MHPMEVENT21, CSR_CLASS_I)
DECLARE_CSR(mhpmevent22, CSR_MHPMEVENT22, CSR_CLASS_I)
DECLARE_CSR(mhpmevent23, CSR_MHPMEVENT23, CSR_CLASS_I)
DECLARE_CSR(mhpmevent24, CSR_MHPMEVENT24, CSR_CLASS_I)
DECLARE_CSR(mhpmevent25, CSR_MHPMEVENT25, CSR_CLASS_I)
DECLARE_CSR(mhpmevent26, CSR_MHPMEVENT26, CSR_CLASS_I)
DECLARE_CSR(mhpmevent27, CSR_MHPMEVENT27, CSR_CLASS_I)
DECLARE_CSR(mhpmevent28, CSR_MHPMEVENT28, CSR_CLASS_I)
DECLARE_CSR(mhpmevent29, CSR_MHPMEVENT29, CSR_CLASS_I)
DECLARE_CSR(mhpmevent30, CSR_MHPMEVENT30, CSR_CLASS_I)
DECLARE_CSR(mhpmevent31, CSR_MHPMEVENT31, CSR_CLASS_I)
DECLARE_CSR(tselect, CSR_TSELECT, CSR_CLASS_I)
DECLARE_CSR(tdata1, CSR_TDATA1, CSR_CLASS_I)
DECLARE_CSR(tdata2, CSR_TDATA2, CSR_CLASS_I)
DECLARE_CSR(tdata3, CSR_TDATA3, CSR_CLASS_I)
DECLARE_CSR(dcsr, CSR_DCSR, CSR_CLASS_I)
DECLARE_CSR(dpc, CSR_DPC, CSR_CLASS_I)
DECLARE_CSR(dscratch, CSR_DSCRATCH, CSR_CLASS_I)
/* These registers are present in priv spec 1.9.1, dropped in 1.10. */
DECLARE_CSR(hstatus, CSR_HSTATUS)
DECLARE_CSR(hedeleg, CSR_HEDELEG)
DECLARE_CSR(hideleg, CSR_HIDELEG)
DECLARE_CSR(hie, CSR_HIE)
DECLARE_CSR(htvec, CSR_HTVEC)
DECLARE_CSR(hscratch, CSR_HSCRATCH)
DECLARE_CSR(hepc, CSR_HEPC)
DECLARE_CSR(hcause, CSR_HCAUSE)
DECLARE_CSR(hbadaddr, CSR_HBADADDR)
DECLARE_CSR(hip, CSR_HIP)
DECLARE_CSR(mbase, CSR_MBASE)
DECLARE_CSR(mbound, CSR_MBOUND)
DECLARE_CSR(mibase, CSR_MIBASE)
DECLARE_CSR(mibound, CSR_MIBOUND)
DECLARE_CSR(mdbase, CSR_MDBASE)
DECLARE_CSR(mdbound, CSR_MDBOUND)
DECLARE_CSR(mucounteren, CSR_MUCOUNTEREN)
DECLARE_CSR(mscounteren, CSR_MSCOUNTEREN)
DECLARE_CSR(mhcounteren, CSR_MHCOUNTEREN)
DECLARE_CSR(hstatus, CSR_HSTATUS, CSR_CLASS_I)
DECLARE_CSR(hedeleg, CSR_HEDELEG, CSR_CLASS_I)
DECLARE_CSR(hideleg, CSR_HIDELEG, CSR_CLASS_I)
DECLARE_CSR(hie, CSR_HIE, CSR_CLASS_I)
DECLARE_CSR(htvec, CSR_HTVEC, CSR_CLASS_I)
DECLARE_CSR(hscratch, CSR_HSCRATCH, CSR_CLASS_I)
DECLARE_CSR(hepc, CSR_HEPC, CSR_CLASS_I)
DECLARE_CSR(hcause, CSR_HCAUSE, CSR_CLASS_I)
DECLARE_CSR(hbadaddr, CSR_HBADADDR, CSR_CLASS_I)
DECLARE_CSR(hip, CSR_HIP, CSR_CLASS_I)
DECLARE_CSR(mbase, CSR_MBASE, CSR_CLASS_I)
DECLARE_CSR(mbound, CSR_MBOUND, CSR_CLASS_I)
DECLARE_CSR(mibase, CSR_MIBASE, CSR_CLASS_I)
DECLARE_CSR(mibound, CSR_MIBOUND, CSR_CLASS_I)
DECLARE_CSR(mdbase, CSR_MDBASE, CSR_CLASS_I)
DECLARE_CSR(mdbound, CSR_MDBOUND, CSR_CLASS_I)
DECLARE_CSR(mucounteren, CSR_MUCOUNTEREN, CSR_CLASS_I)
DECLARE_CSR(mscounteren, CSR_MSCOUNTEREN, CSR_CLASS_I)
DECLARE_CSR(mhcounteren, CSR_MHCOUNTEREN, CSR_CLASS_I)
#endif
#ifdef DECLARE_CSR_ALIAS
/* Ubadaddr is 0x043 in 1.9.1, but 0x043 is utval in 1.10. */
DECLARE_CSR_ALIAS(ubadaddr, CSR_UTVAL)
DECLARE_CSR_ALIAS(ubadaddr, CSR_UTVAL, CSR_CLASS_I)
/* Sbadaddr is 0x143 in 1.9.1, but 0x143 is stval in 1.10. */
DECLARE_CSR_ALIAS(sbadaddr, CSR_STVAL)
DECLARE_CSR_ALIAS(sbadaddr, CSR_STVAL, CSR_CLASS_I)
/* Sptbr is 0x180 in 1.9.1, but 0x180 is satp in 1.10. */
DECLARE_CSR_ALIAS(sptbr, CSR_SATP)
DECLARE_CSR_ALIAS(sptbr, CSR_SATP, CSR_CLASS_I)
/* Mbadaddr is 0x343 in 1.9.1, but 0x343 is mtval in 1.10. */
DECLARE_CSR_ALIAS(mbadaddr, CSR_MTVAL)
DECLARE_CSR_ALIAS(mbadaddr, CSR_MTVAL, CSR_CLASS_I)
#endif
#ifdef DECLARE_CAUSE
DECLARE_CAUSE("misaligned fetch", CAUSE_MISALIGNED_FETCH)

View File

@ -1,3 +1,8 @@
2020-02-20 Nelson Chu <nelson.chu@sifive.com>
* riscv-dis.c (print_insn_args): Updated since the DECLARE_CSR is
changed.
2020-02-19 Nelson Chu <nelson.chu@sifive.com>
* riscv-opc.c (riscv_opcodes): Convert add/addi to the compressed

View File

@ -326,7 +326,7 @@ print_insn_args (const char *d, insn_t l, bfd_vma pc, disassemble_info *info)
unsigned int csr = EXTRACT_OPERAND (CSR, l);
switch (csr)
{
#define DECLARE_CSR(name, num) case num: csr_name = #name; break;
#define DECLARE_CSR(name, num, class) case num: csr_name = #name; break;
#include "opcode/riscv-opc.h"
#undef DECLARE_CSR
}