aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--riscv/csrs.cc3
-rw-r--r--riscv/processor.cc2
2 files changed, 4 insertions, 1 deletions
diff --git a/riscv/csrs.cc b/riscv/csrs.cc
index de9381c..678a738 100644
--- a/riscv/csrs.cc
+++ b/riscv/csrs.cc
@@ -1509,6 +1509,9 @@ jvt_csr_t::jvt_csr_t(processor_t* const proc, const reg_t addr, const reg_t init
void jvt_csr_t::verify_permissions(insn_t insn, bool write) const {
basic_csr_t::verify_permissions(insn, write);
+ if (!proc->extension_enabled(EXT_ZCMT))
+ throw trap_illegal_instruction(insn.bits());
+
if (proc->extension_enabled(EXT_SMSTATEEN)) {
if ((state->prv < PRV_M) && !(state->mstateen[0]->read() & SSTATEEN0_JVT))
throw trap_illegal_instruction(insn.bits());
diff --git a/riscv/processor.cc b/riscv/processor.cc
index d6bc170..f8e8a08 100644
--- a/riscv/processor.cc
+++ b/riscv/processor.cc
@@ -508,7 +508,7 @@ void state_t::reset(processor_t* const proc, reg_t max_isa)
}
}
- if (proc->extension_enabled_const(EXT_ZCMT))
+ if (proc->extension_enabled(EXT_ZCMT))
csrmap[CSR_JVT] = jvt = std::make_shared<jvt_csr_t>(proc, CSR_JVT, 0);
serialized = false;