@@ -12,22 +12,12 @@ void state_t::add_csr(reg_t addr, const csr_t_p& csr)
1212#define add_supervisor_csr (addr, csr ) add_const_ext_csr(' S' , addr, csr)
1313#define add_hypervisor_csr (addr, csr ) add_ext_csr(' H' , addr, csr)
1414
15- void state_t::add_ireg_proxy (processor_t * const proc, sscsrind_reg_csr_t ::sscsrind_reg_csr_t_p ireg)
15+ void state_t::add_ireg_proxy (sscsrind_reg_csr_t ::sscsrind_reg_csr_t_p ireg, aia_ireg_proxy_csr_t_p aia_proxy )
1616{
17- // This assumes xlen is always max_xlen, which is true today (see
18- // mstatus_csr_t::unlogged_write()):
19- auto xlen = proc->get_isa ().get_max_xlen ();
20-
21- const reg_t iprio0_addr = 0x30 ;
22- for (int i=0 ; i<16 ; i+=2 ) {
23- csr_t_p iprio = std::make_shared<aia_csr_t >(proc, iprio0_addr + i, 0 , 0 );
24- if (xlen == 32 ) {
25- ireg->add_ireg_proxy (iprio0_addr + i, std::make_shared<rv32_low_csr_t >(proc, iprio0_addr + i, iprio));
26- ireg->add_ireg_proxy (iprio0_addr + i + 1 , std::make_shared<rv32_high_csr_t >(proc, iprio0_addr + i + 1 , iprio));
27- } else {
28- ireg->add_ireg_proxy (iprio0_addr + i, iprio);
29- }
30- }
17+ // reserved range RAZ/WI
18+ ireg->add_ireg_proxy (0x71 , aia_proxy);
19+ for (int i = 0x73 ; i <= 0x7f ; i++)
20+ ireg->add_ireg_proxy (i, aia_proxy);
3121}
3222
3323void state_t::csr_init (processor_t * const proc, reg_t max_isa)
@@ -416,7 +406,6 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
416406
417407 sscsrind_reg_csr_t ::sscsrind_reg_csr_t_p mireg;
418408 add_csr (CSR_MIREG, mireg = std::make_shared<sscsrind_reg_csr_t >(proc, CSR_MIREG, miselect));
419- add_ireg_proxy (proc, mireg);
420409 const reg_t mireg_csrs[] = { CSR_MIREG2, CSR_MIREG3, CSR_MIREG4, CSR_MIREG5, CSR_MIREG6 };
421410 for (auto csr : mireg_csrs)
422411 add_csr (csr, std::make_shared<sscsrind_reg_csr_t >(proc, csr, miselect));
@@ -427,10 +416,7 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
427416 auto aia_mireg = std::make_shared<aia_ireg_proxy_csr_t >(proc, CSR_MIREG, miselect);
428417 for (auto &csr : *aia_mireg->get_csrmap ())
429418 mireg->add_ireg_proxy (csr.first , aia_mireg);
430- // reserved range RAZ/WI
431- mireg->add_ireg_proxy (0x71 , aia_mireg);
432- for (int i = 0x73 ; i <= 0x7f ; i++)
433- mireg->add_ireg_proxy (i, aia_mireg);
419+ add_ireg_proxy (mireg, aia_mireg);
434420 }
435421 }
436422
@@ -445,7 +431,6 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
445431 add_hypervisor_csr (CSR_VSIREG, vsireg);
446432
447433 auto sireg = std::make_shared<sscsrind_reg_csr_t >(proc, CSR_SIREG, siselect);
448- add_ireg_proxy (proc, sireg);
449434 add_supervisor_csr (CSR_SIREG, std::make_shared<virtualized_indirect_csr_t >(proc, sireg, vsireg));
450435
451436 const reg_t vsireg_csrs[] = { CSR_VSIREG2, CSR_VSIREG3, CSR_VSIREG4, CSR_VSIREG5, CSR_VSIREG6 };
@@ -515,18 +500,12 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
515500 // csrmaps of vs files are the same as vgein = 1
516501 for (auto &csr : *aia_vsireg->get_csrmap (1 ))
517502 vsireg->add_ireg_proxy (csr.first , aia_vsireg);
518- // reserved range RAZ/WI
519- vsireg->add_ireg_proxy (0x71 , aia_vsireg);
520- for (int i = 0x73 ; i <= 0x7f ; i++)
521- vsireg->add_ireg_proxy (i, aia_vsireg);
503+ add_ireg_proxy (vsireg, aia_vsireg);
522504
523505 auto aia_sireg = std::make_shared<aia_ireg_proxy_csr_t >(proc, CSR_SIREG, siselect);
524506 for (auto &csr : *aia_sireg->get_csrmap ())
525507 sireg->add_ireg_proxy (csr.first , aia_sireg);
526- // reserved range RAZ/WI
527- sireg->add_ireg_proxy (0x71 , aia_sireg);
528- for (int i = 0x73 ; i <= 0x7f ; i++)
529- sireg->add_ireg_proxy (i, aia_sireg);
508+ add_ireg_proxy (sireg, aia_sireg);
530509 }
531510
532511 }
0 commit comments