diff options
-rw-r--r-- | riscv/csrs.cc | 3 | ||||
-rw-r--r-- | riscv/processor.cc | 2 |
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; |