mirror of https://github.com/xemu-project/xemu.git
target/riscv: misa to ISA string conversion fix
Some bits in RISC-V `misa' CSR should not be reflected in the ISA string. For instance, `S' and `U' (represents existence of supervisor and user mode, respectively) in `misa' CSR must not be copied since neither `S' nor `U' are valid single-letter extensions. This commit also removes all reserved/dropped single-letter "extensions" from the list. - "B": Not going to be a single-letter extension (misa.B is reserved). - "J": Not going to be a single-letter extension (misa.J is reserved). - "K": Not going to be a single-letter extension (misa.K is reserved). - "L": Dropped. - "N": Dropped. - "T": Dropped. It also clarifies that the variable `riscv_single_letter_exts' is a single-letter extension order list. Signed-off-by: Tsukasa OI <research_trasio@irq.a4lg.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-Id: <4a4c11213a161a7eedabe46abe58b351bb0e2ef2.1648473008.git.research_trasio@irq.a4lg.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
f32d82f6c3
commit
0e2c377023
|
@ -34,7 +34,7 @@
|
|||
|
||||
/* RISC-V CPU definitions */
|
||||
|
||||
static const char riscv_exts[26] = "IEMAFDQCLBJTPVNSUHKORWXYZG";
|
||||
static const char riscv_single_letter_exts[] = "IEMAFDQCPVH";
|
||||
|
||||
const char * const riscv_int_regnames[] = {
|
||||
"x0/zero", "x1/ra", "x2/sp", "x3/gp", "x4/tp", "x5/t0", "x6/t1",
|
||||
|
@ -911,12 +911,12 @@ static void riscv_cpu_class_init(ObjectClass *c, void *data)
|
|||
char *riscv_isa_string(RISCVCPU *cpu)
|
||||
{
|
||||
int i;
|
||||
const size_t maxlen = sizeof("rv128") + sizeof(riscv_exts) + 1;
|
||||
const size_t maxlen = sizeof("rv128") + sizeof(riscv_single_letter_exts);
|
||||
char *isa_str = g_new(char, maxlen);
|
||||
char *p = isa_str + snprintf(isa_str, maxlen, "rv%d", TARGET_LONG_BITS);
|
||||
for (i = 0; i < sizeof(riscv_exts); i++) {
|
||||
if (cpu->env.misa_ext & RV(riscv_exts[i])) {
|
||||
*p++ = qemu_tolower(riscv_exts[i]);
|
||||
for (i = 0; i < sizeof(riscv_single_letter_exts) - 1; i++) {
|
||||
if (cpu->env.misa_ext & RV(riscv_single_letter_exts[i])) {
|
||||
*p++ = qemu_tolower(riscv_single_letter_exts[i]);
|
||||
}
|
||||
}
|
||||
*p = '\0';
|
||||
|
|
Loading…
Reference in New Issue