|
@@ -115,7 +115,7 @@ const RISCVIsaExtData isa_edata_arr[] = {
|
|
ISA_EXT_DATA_ENTRY(zihpm, PRIV_VERSION_1_12_0, ext_zihpm),
|
|
ISA_EXT_DATA_ENTRY(zihpm, PRIV_VERSION_1_12_0, ext_zihpm),
|
|
ISA_EXT_DATA_ENTRY(zimop, PRIV_VERSION_1_13_0, ext_zimop),
|
|
ISA_EXT_DATA_ENTRY(zimop, PRIV_VERSION_1_13_0, ext_zimop),
|
|
ISA_EXT_DATA_ENTRY(zmmul, PRIV_VERSION_1_12_0, ext_zmmul),
|
|
ISA_EXT_DATA_ENTRY(zmmul, PRIV_VERSION_1_12_0, ext_zmmul),
|
|
- ISA_EXT_DATA_ENTRY(za64rs, PRIV_VERSION_1_12_0, has_priv_1_11),
|
|
|
|
|
|
+ ISA_EXT_DATA_ENTRY(za64rs, PRIV_VERSION_1_12_0, has_priv_1_12),
|
|
ISA_EXT_DATA_ENTRY(zaamo, PRIV_VERSION_1_12_0, ext_zaamo),
|
|
ISA_EXT_DATA_ENTRY(zaamo, PRIV_VERSION_1_12_0, ext_zaamo),
|
|
ISA_EXT_DATA_ENTRY(zabha, PRIV_VERSION_1_13_0, ext_zabha),
|
|
ISA_EXT_DATA_ENTRY(zabha, PRIV_VERSION_1_13_0, ext_zabha),
|
|
ISA_EXT_DATA_ENTRY(zacas, PRIV_VERSION_1_12_0, ext_zacas),
|
|
ISA_EXT_DATA_ENTRY(zacas, PRIV_VERSION_1_12_0, ext_zacas),
|
|
@@ -197,6 +197,7 @@ const RISCVIsaExtData isa_edata_arr[] = {
|
|
ISA_EXT_DATA_ENTRY(svinval, PRIV_VERSION_1_12_0, ext_svinval),
|
|
ISA_EXT_DATA_ENTRY(svinval, PRIV_VERSION_1_12_0, ext_svinval),
|
|
ISA_EXT_DATA_ENTRY(svnapot, PRIV_VERSION_1_12_0, ext_svnapot),
|
|
ISA_EXT_DATA_ENTRY(svnapot, PRIV_VERSION_1_12_0, ext_svnapot),
|
|
ISA_EXT_DATA_ENTRY(svpbmt, PRIV_VERSION_1_12_0, ext_svpbmt),
|
|
ISA_EXT_DATA_ENTRY(svpbmt, PRIV_VERSION_1_12_0, ext_svpbmt),
|
|
|
|
+ ISA_EXT_DATA_ENTRY(svvptc, PRIV_VERSION_1_13_0, ext_svvptc),
|
|
ISA_EXT_DATA_ENTRY(xtheadba, PRIV_VERSION_1_11_0, ext_xtheadba),
|
|
ISA_EXT_DATA_ENTRY(xtheadba, PRIV_VERSION_1_11_0, ext_xtheadba),
|
|
ISA_EXT_DATA_ENTRY(xtheadbb, PRIV_VERSION_1_11_0, ext_xtheadbb),
|
|
ISA_EXT_DATA_ENTRY(xtheadbb, PRIV_VERSION_1_11_0, ext_xtheadbb),
|
|
ISA_EXT_DATA_ENTRY(xtheadbs, PRIV_VERSION_1_11_0, ext_xtheadbs),
|
|
ISA_EXT_DATA_ENTRY(xtheadbs, PRIV_VERSION_1_11_0, ext_xtheadbs),
|
|
@@ -680,6 +681,11 @@ static void rv32_ibex_cpu_init(Object *obj)
|
|
cpu->cfg.ext_zicsr = true;
|
|
cpu->cfg.ext_zicsr = true;
|
|
cpu->cfg.pmp = true;
|
|
cpu->cfg.pmp = true;
|
|
cpu->cfg.ext_smepmp = true;
|
|
cpu->cfg.ext_smepmp = true;
|
|
|
|
+
|
|
|
|
+ cpu->cfg.ext_zba = true;
|
|
|
|
+ cpu->cfg.ext_zbb = true;
|
|
|
|
+ cpu->cfg.ext_zbc = true;
|
|
|
|
+ cpu->cfg.ext_zbs = true;
|
|
}
|
|
}
|
|
|
|
|
|
static void rv32_imafcu_nommu_cpu_init(Object *obj)
|
|
static void rv32_imafcu_nommu_cpu_init(Object *obj)
|
|
@@ -818,6 +824,12 @@ static void riscv_cpu_dump_state(CPUState *cs, FILE *f, int flags)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flags & CPU_DUMP_FPU) {
|
|
if (flags & CPU_DUMP_FPU) {
|
|
|
|
+ target_ulong val = 0;
|
|
|
|
+ RISCVException res = riscv_csrrw_debug(env, CSR_FCSR, &val, 0, 0);
|
|
|
|
+ if (res == RISCV_EXCP_NONE) {
|
|
|
|
+ qemu_fprintf(f, " %-8s " TARGET_FMT_lx "\n",
|
|
|
|
+ csr_ops[CSR_FCSR].name, val);
|
|
|
|
+ }
|
|
for (i = 0; i < 32; i++) {
|
|
for (i = 0; i < 32; i++) {
|
|
qemu_fprintf(f, " %-8s %016" PRIx64,
|
|
qemu_fprintf(f, " %-8s %016" PRIx64,
|
|
riscv_fpr_regnames[i], env->fpr[i]);
|
|
riscv_fpr_regnames[i], env->fpr[i]);
|
|
@@ -1483,6 +1495,7 @@ const RISCVCPUMultiExtConfig riscv_cpu_extensions[] = {
|
|
MULTI_EXT_CFG_BOOL("svinval", ext_svinval, false),
|
|
MULTI_EXT_CFG_BOOL("svinval", ext_svinval, false),
|
|
MULTI_EXT_CFG_BOOL("svnapot", ext_svnapot, false),
|
|
MULTI_EXT_CFG_BOOL("svnapot", ext_svnapot, false),
|
|
MULTI_EXT_CFG_BOOL("svpbmt", ext_svpbmt, false),
|
|
MULTI_EXT_CFG_BOOL("svpbmt", ext_svpbmt, false),
|
|
|
|
+ MULTI_EXT_CFG_BOOL("svvptc", ext_svvptc, true),
|
|
|
|
|
|
MULTI_EXT_CFG_BOOL("zicntr", ext_zicntr, true),
|
|
MULTI_EXT_CFG_BOOL("zicntr", ext_zicntr, true),
|
|
MULTI_EXT_CFG_BOOL("zihpm", ext_zihpm, true),
|
|
MULTI_EXT_CFG_BOOL("zihpm", ext_zihpm, true),
|
|
@@ -2661,6 +2674,7 @@ static Property riscv_cpu_properties[] = {
|
|
|
|
|
|
DEFINE_PROP_BOOL("rvv_ta_all_1s", RISCVCPU, cfg.rvv_ta_all_1s, false),
|
|
DEFINE_PROP_BOOL("rvv_ta_all_1s", RISCVCPU, cfg.rvv_ta_all_1s, false),
|
|
DEFINE_PROP_BOOL("rvv_ma_all_1s", RISCVCPU, cfg.rvv_ma_all_1s, false),
|
|
DEFINE_PROP_BOOL("rvv_ma_all_1s", RISCVCPU, cfg.rvv_ma_all_1s, false),
|
|
|
|
+ DEFINE_PROP_BOOL("rvv_vl_half_avl", RISCVCPU, cfg.rvv_vl_half_avl, false),
|
|
|
|
|
|
/*
|
|
/*
|
|
* write_misa() is marked as experimental for now so mark
|
|
* write_misa() is marked as experimental for now so mark
|