Browse Source

Fix a bug caused by moving misa into state_t. (#180)

* Fix misa losing its value in processor constructor due to state:reset() following state.misa initialization.
Make state:reset() preserve misa.

* Set state.misa to max_isa on reset().

* Idiomatic fix for earlier commit.
pull/181/head
Prashanth Mundkur 9 years ago
committed by Andrew Waterman
parent
commit
7e35a2a62f
  1. 5
      riscv/processor.cc
  2. 2
      riscv/processor.h

5
riscv/processor.cc

@ -115,9 +115,10 @@ void processor_t::parse_isa_string(const char* str)
max_isa = state.misa;
}
void state_t::reset()
void state_t::reset(reg_t max_isa)
{
memset(this, 0, sizeof(*this));
misa = max_isa;
prv = PRV_M;
pc = DEFAULT_RSTVEC;
load_reservation = -1;
@ -146,7 +147,7 @@ void processor_t::set_histogram(bool value)
void processor_t::reset()
{
state.reset();
state.reset(max_isa);
state.dcsr.halt = halt_on_reset;
halt_on_reset = false;
set_csr(CSR_MSTATUS, state.mstatus);

2
riscv/processor.h

@ -86,7 +86,7 @@ typedef struct
// architectural state of a RISC-V hart
struct state_t
{
void reset();
void reset(reg_t max_isa);
static const int num_triggers = 4;

Loading…
Cancel
Save