Browse Source

Convert hvip to csr_t family

pull/796/head
Scott Johnson 5 years ago
committed by Andrew Waterman
parent
commit
edf69ba85a
  1. 16
      riscv/csrs.cc
  2. 9
      riscv/csrs.h
  3. 7
      riscv/processor.cc

16
riscv/csrs.cc

@ -584,3 +584,19 @@ void sip_csr_t::write(const reg_t val) noexcept {
else
state->mip->write_with_mask(state->mideleg & MIP_SSIP, val);
}
// implement class hvip_csr_t
hvip_csr_t::hvip_csr_t(processor_t* const proc, const reg_t addr):
csr_t(proc, addr) {
}
reg_t hvip_csr_t::read() const noexcept {
state_t* const state = proc->get_state();
return state->mip->read() & MIP_VS_MASK;
}
void hvip_csr_t::write(const reg_t val) noexcept {
state_t* const state = proc->get_state();
const reg_t mask = MIP_VS_MASK;
state->mip->write_with_mask(mask, val);
}

9
riscv/csrs.h

@ -285,4 +285,13 @@ class sip_csr_t: public csr_t {
};
class hvip_csr_t: public csr_t {
public:
hvip_csr_t(processor_t* const proc, const reg_t addr);
virtual reg_t read() const noexcept override;
virtual void write(const reg_t val) noexcept override;
};
#endif

7
riscv/processor.cc

@ -348,6 +348,7 @@ void state_t::reset(processor_t* const proc, reg_t max_isa)
mie = 0;
csrmap[CSR_MIP] = mip = std::make_shared<mip_csr_t>(proc, CSR_MIP);
csrmap[CSR_SIP] = std::make_shared<sip_csr_t>(proc, CSR_SIP);
csrmap[CSR_HVIP] = std::make_shared<hvip_csr_t>(proc, CSR_HVIP);
medeleg = 0;
mideleg = 0;
mcounteren = 0;
@ -1058,11 +1059,6 @@ void processor_t::set_csr(int which, reg_t val)
state.mip->write_with_mask(mask, val);
return;
}
case CSR_HVIP: {
reg_t mask = MIP_VS_MASK;
state.mip->write_with_mask(mask, val);
return;
}
case CSR_HTINST:
state.htinst = val;
break;
@ -1409,7 +1405,6 @@ reg_t processor_t::get_csr(int which, insn_t insn, bool write, bool peek)
case CSR_HGEIE: ret(0);
case CSR_HTVAL: ret(state.htval);
case CSR_HIP: ret(state.mip->read() & MIP_HS_MASK);
case CSR_HVIP: ret(state.mip->read() & MIP_VS_MASK);
case CSR_HTINST: ret(state.htinst);
case CSR_HGATP: {
if (!state.v && get_field(state.mstatus->read(), MSTATUS_TVM))

Loading…
Cancel
Save