@@ -12,22 +12,12 @@ void state_t::add_csr(reg_t addr, const csr_t_p& csr)
12
12
#define add_supervisor_csr (addr, csr ) add_const_ext_csr(' S' , addr, csr)
13
13
#define add_hypervisor_csr (addr, csr ) add_ext_csr(' H' , addr, csr)
14
14
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 )
16
16
{
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);
31
21
}
32
22
33
23
void 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)
416
406
417
407
sscsrind_reg_csr_t ::sscsrind_reg_csr_t_p mireg;
418
408
add_csr (CSR_MIREG, mireg = std::make_shared<sscsrind_reg_csr_t >(proc, CSR_MIREG, miselect));
419
- add_ireg_proxy (proc, mireg);
420
409
const reg_t mireg_csrs[] = { CSR_MIREG2, CSR_MIREG3, CSR_MIREG4, CSR_MIREG5, CSR_MIREG6 };
421
410
for (auto csr : mireg_csrs)
422
411
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)
427
416
auto aia_mireg = std::make_shared<aia_ireg_proxy_csr_t >(proc, CSR_MIREG, miselect);
428
417
for (auto &csr : *aia_mireg->get_csrmap ())
429
418
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);
434
420
}
435
421
}
436
422
@@ -445,7 +431,6 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
445
431
add_hypervisor_csr (CSR_VSIREG, vsireg);
446
432
447
433
auto sireg = std::make_shared<sscsrind_reg_csr_t >(proc, CSR_SIREG, siselect);
448
- add_ireg_proxy (proc, sireg);
449
434
add_supervisor_csr (CSR_SIREG, std::make_shared<virtualized_indirect_csr_t >(proc, sireg, vsireg));
450
435
451
436
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)
515
500
// csrmaps of vs files are the same as vgein = 1
516
501
for (auto &csr : *aia_vsireg->get_csrmap (1 ))
517
502
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);
522
504
523
505
auto aia_sireg = std::make_shared<aia_ireg_proxy_csr_t >(proc, CSR_SIREG, siselect);
524
506
for (auto &csr : *aia_sireg->get_csrmap ())
525
507
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);
530
509
}
531
510
532
511
}
0 commit comments