@samitouri / QOSamiQemu / commits / 613bb1949f

target/riscv: Update MISA.X for non-standard extensions

MISA.X is set if there are any non-standard extensions. We should set MISA.X when any of the vendor extensions is enabled. Signed-off-by: Frank Chang <frank.chang@sifive.com> Reviewed-by: Max Chou <max.chou@sifive.com> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20260424050509.3935180-3-frank.chang@sifive.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>

Frank Chang committed Apr 24, 2026 at 13:05 UTC 613bb1949fffc4aeb9e554e35fecc7d6f7ddd27b
2 files changed +16
target/riscv/cpu.h
+1
@@ -69,6 +69,7 @@ typedef struct CPUArchState CPURISCVState;
69 #define RVH RV('H')
70 #define RVG RV('G')
71 #define RVB RV('B')
72 +#define RVX RV('X')
73
74 extern const uint32_t misa_bits[];
75 const char *riscv_get_misa_ext_name(uint32_t bit);
target/riscv/tcg/tcg-cpu.c
+15
@@ -1201,6 +1201,20 @@ static void riscv_cpu_update_misa_c(RISCVCPU *cpu)
1201 }
1202 }
1203
1204 +/* MISA.X is set when any of the non-standard extensions is enabled. */
1205 +static void riscv_cpu_update_misa_x(RISCVCPU *cpu)
1206 +{
1207 + CPURISCVState *env = &cpu->env;
1208 + const RISCVCPUMultiExtConfig *arr = riscv_cpu_vendor_exts;
1209 +
1210 + for (int i = 0; arr[i].name != NULL; i++) {
1211 + if (isa_ext_is_enabled(cpu, arr[i].offset)) {
1212 + riscv_cpu_set_misa_ext(env, env->misa_ext | RVX);
1213 + break;
1214 + }
1215 + }
1216 +}
1217 +
1218 void riscv_tcg_cpu_finalize_features(RISCVCPU *cpu, Error **errp)
1219 {
1220 CPURISCVState *env = &cpu->env;
@@ -1209,6 +1223,7 @@ void riscv_tcg_cpu_finalize_features(RISCVCPU *cpu, Error **errp)
1223 riscv_cpu_init_implied_exts_rules();
1224 riscv_cpu_enable_implied_rules(cpu);
1225 riscv_cpu_update_misa_c(cpu);
1226 + riscv_cpu_update_misa_x(cpu);
1227
1228 riscv_cpu_validate_misa_priv(env, &local_err);
1229 if (local_err != NULL) {