diff --git a/incl/iss/arch/riscv_hart_m_p.h b/incl/iss/arch/riscv_hart_m_p.h index 6c9a099..8b0b594 100644 --- a/incl/iss/arch/riscv_hart_m_p.h +++ b/incl/iss/arch/riscv_hart_m_p.h @@ -309,8 +309,6 @@ public: T satp; - static constexpr T get_misa() { return (1UL << 30) | ISA_I | ISA_M | ISA_A | ISA_U | ISA_S | ISA_M; } - static constexpr uint32_t get_mask() { return 0x807ff9ddUL; // 0b1000 0000 0111 1111 1111 1001 1011 1011 // only machine mode is supported } @@ -434,10 +432,8 @@ riscv_hart_m_p::riscv_hart_m_p() : state() , cycle_offset(0) , instr_if(*this) { - csr[misa] = hart_state::get_misa(); + csr[misa] = traits::MISA_VAL; uart_buf.str(""); - // read-only registers - csr_wr_cb[misa] = nullptr; for (unsigned addr = mcycle; addr <= hpmcounter31; ++addr) csr_wr_cb[addr] = nullptr; for (unsigned addr = mcycleh; addr <= hpmcounter31h; ++addr) csr_wr_cb[addr] = nullptr; // special handling @@ -462,6 +458,9 @@ riscv_hart_m_p::riscv_hart_m_p() csr_rd_cb[addr] = &riscv_hart_m_p::read_reg; csr_wr_cb[addr] = &riscv_hart_m_p::write_reg; } + // read-only registers + csr_rd_cb[misa] = &riscv_hart_m_p::read_reg; + csr_wr_cb[misa] = nullptr; } template std::pair riscv_hart_m_p::load_file(std::string name, int type) {