diff --git a/riscv/csr_init.cc b/riscv/csr_init.cc index 4a05a9c7..612a8e3f 100644 --- a/riscv/csr_init.cc +++ b/riscv/csr_init.cc @@ -12,7 +12,7 @@ void state_t::add_csr(reg_t addr, const csr_t_p& csr) #define add_supervisor_csr(addr, csr) add_const_ext_csr('S', addr, csr) #define add_hypervisor_csr(addr, csr) add_ext_csr('H', addr, csr) -void state_t::add_ireg_proxy(processor_t* const proc, sscsrind_reg_csr_t::sscsrind_reg_csr_t_p ireg) +void state_t::add_iprio_proxy(processor_t* const proc, sscsrind_reg_csr_t::sscsrind_reg_csr_t_p ireg) { // This assumes xlen is always max_xlen, which is true today (see // mstatus_csr_t::unlogged_write()): @@ -421,7 +421,8 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa) sscsrind_reg_csr_t::sscsrind_reg_csr_t_p mireg; add_csr(CSR_MIREG, mireg = std::make_shared(proc, CSR_MIREG, miselect)); - add_ireg_proxy(proc, mireg); + if (proc->extension_enabled_const(EXT_SMAIA)) + add_iprio_proxy(proc, mireg); const reg_t mireg_csrs[] = { CSR_MIREG2, CSR_MIREG3, CSR_MIREG4, CSR_MIREG5, CSR_MIREG6 }; for (auto csr : mireg_csrs) add_csr(csr, std::make_shared(proc, csr, miselect)); @@ -438,7 +439,8 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa) add_hypervisor_csr(CSR_VSIREG, vsireg); auto sireg = std::make_shared(proc, CSR_SIREG, siselect); - add_ireg_proxy(proc, sireg); + if (proc->extension_enabled_const(EXT_SSAIA)) + add_iprio_proxy(proc, sireg); add_supervisor_csr(CSR_SIREG, std::make_shared(proc, sireg, vsireg)); if (proc->extension_enabled(EXT_SSCCFG) || proc->extension_enabled(EXT_SMCDELEG)) { // case CSR_SIREG diff --git a/riscv/processor.h b/riscv/processor.h index 18ac08f0..6eb9e063 100644 --- a/riscv/processor.h +++ b/riscv/processor.h @@ -77,7 +77,7 @@ typedef std::vector> commit_log_mem_t; // architectural state of a RISC-V hart struct state_t { - void add_ireg_proxy(processor_t* const proc, sscsrind_reg_csr_t::sscsrind_reg_csr_t_p ireg); + void add_iprio_proxy(processor_t* const proc, sscsrind_reg_csr_t::sscsrind_reg_csr_t_p ireg); void reset(processor_t* const proc, reg_t max_isa); void add_csr(reg_t addr, const csr_t_p& csr);