Browse Source

#2082 Reorder hstateen0 check for smcdeleg

pull/2182/head
Muhammad Moiz Hussain 5 months ago
committed by Andrew Waterman
parent
commit
eef599cc19
  1. 8
      riscv/csrs.cc

8
riscv/csrs.cc

@ -1854,17 +1854,15 @@ void sscsrind_reg_csr_t::verify_permissions(insn_t insn, bool write) const {
if (proc->extension_enabled(EXT_SMSTATEEN)) { if (proc->extension_enabled(EXT_SMSTATEEN)) {
if ((state->prv < PRV_M) && !(state->mstateen[0]->read() & MSTATEEN0_CSRIND)) if ((state->prv < PRV_M) && !(state->mstateen[0]->read() & MSTATEEN0_CSRIND))
throw trap_illegal_instruction(insn.bits()); throw trap_illegal_instruction(insn.bits());
if (state->v && !(state->hstateen[0]->read() & HSTATEEN0_CSRIND))
throw trap_virtual_instruction(insn.bits());
} }
// Don't call base verify_permission for VS registers remapped to S-mode // Don't call base verify_permission for VS registers remapped to S-mode
if (insn.csr() == address) if (insn.csr() == address)
csr_t::verify_permissions(insn, write); csr_t::verify_permissions(insn, write);
if (proc->extension_enabled(EXT_SMSTATEEN)) {
if (state->v && !(state->hstateen[0]->read() & HSTATEEN0_CSRIND))
throw trap_virtual_instruction(insn.bits());
}
if (proc->extension_enabled(EXT_SMCDELEG)) { if (proc->extension_enabled(EXT_SMCDELEG)) {
if (address >= CSR_VSIREG && address <= CSR_VSIREG6) { if (address >= CSR_VSIREG && address <= CSR_VSIREG6) {
if (!state->v) { if (!state->v) {

Loading…
Cancel
Save