Browse Source

Add prev_prv to processor state

This adds the prev_prv field to track the previous privilege. It will
be used in a forthcoming patch for trigger matching.
pull/1350/head
Atul Khare 3 years ago
parent
commit
ddae0f25a8
  1. 3
      riscv/processor.cc
  2. 1
      riscv/processor.h

3
riscv/processor.cc

@ -196,7 +196,7 @@ void state_t::reset(processor_t* const proc, reg_t max_isa)
// mstatus_csr_t::unlogged_write()): // mstatus_csr_t::unlogged_write()):
auto xlen = proc->get_isa().get_max_xlen(); auto xlen = proc->get_isa().get_max_xlen();
prv = PRV_M; prv = prev_prv = PRV_M;
v = prev_v = false; v = prev_v = false;
csrmap[CSR_MISA] = misa = std::make_shared<misa_csr_t>(proc, CSR_MISA, max_isa); csrmap[CSR_MISA] = misa = std::make_shared<misa_csr_t>(proc, CSR_MISA, max_isa);
mstatus = std::make_shared<mstatus_csr_t>(proc, CSR_MSTATUS); mstatus = std::make_shared<mstatus_csr_t>(proc, CSR_MSTATUS);
@ -717,6 +717,7 @@ reg_t processor_t::legalize_privilege(reg_t prv)
void processor_t::set_privilege(reg_t prv) void processor_t::set_privilege(reg_t prv)
{ {
mmu->flush_tlb(); mmu->flush_tlb();
state.prev_prv = state.prv;
state.prv = legalize_privilege(prv); state.prv = legalize_privilege(prv);
} }

1
riscv/processor.h

@ -83,6 +83,7 @@ struct state_t
// control and status registers // control and status registers
std::unordered_map<reg_t, csr_t_p> csrmap; std::unordered_map<reg_t, csr_t_p> csrmap;
reg_t prv; // TODO: Can this be an enum instead? reg_t prv; // TODO: Can this be an enum instead?
reg_t prev_prv;
bool v; bool v;
bool prev_v; bool prev_v;
misa_csr_t_p misa; misa_csr_t_p misa;

Loading…
Cancel
Save