@@ -430,6 +430,17 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
430430 auto sireg = std::make_shared<sscsrind_reg_csr_t >(proc, CSR_SIREG , siselect);
431431 add_ireg_proxy (proc, sireg);
432432 add_supervisor_csr (CSR_SIREG , std::make_shared<virtualized_indirect_csr_t >(proc, sireg, vsireg));
433+ if (proc->extension_enabled (EXT_SSCCFG ) || proc->extension_enabled (EXT_SMCDELEG )) {
434+ // case CSR_SIREG
435+ if (proc->extension_enabled_const (EXT_ZICNTR )) {
436+ sireg->add_ireg_proxy (SISELECT_SMCDELEG_START , mcycle);
437+ sireg->add_ireg_proxy (SISELECT_SMCDELEG_INSTRET , minstret);
438+ }
439+ if (proc->extension_enabled_const (EXT_ZIHPM )) {
440+ for (size_t j = 0 ; j < (SISELECT_SMCDELEG_END - SISELECT_SMCDELEG_HPMEVENT_3 + 1 ); j++)
441+ sireg->add_ireg_proxy (SISELECT_SMCDELEG_HPMCOUNTER_3 + j, csrmap[CSR_HPMCOUNTER3 + j]);
442+ }
443+ }
433444
434445 const reg_t vsireg_csrs[] = { CSR_VSIREG2 , CSR_VSIREG3 , CSR_VSIREG4 , CSR_VSIREG5 , CSR_VSIREG6 };
435446 const reg_t sireg_csrs[] = { CSR_SIREG2 , CSR_SIREG3 , CSR_SIREG4 , CSR_SIREG5 , CSR_SIREG6 };
@@ -443,16 +454,6 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
443454 // Smcdeleg
444455 if (proc->extension_enabled (EXT_SSCCFG ) || proc->extension_enabled (EXT_SMCDELEG )) {
445456 switch (sireg_csrs[i]) {
446- case CSR_SIREG :
447- if (proc->extension_enabled_const (EXT_ZICNTR )) {
448- sireg->add_ireg_proxy (SISELECT_SMCDELEG_START , mcycle);
449- sireg->add_ireg_proxy (SISELECT_SMCDELEG_INSTRET , minstret);
450- }
451- if (proc->extension_enabled_const (EXT_ZIHPM )) {
452- for (size_t j = 0 ; j < (SISELECT_SMCDELEG_END - SISELECT_SMCDELEG_HPMEVENT_3 + 1 ); j++)
453- sireg->add_ireg_proxy (SISELECT_SMCDELEG_HPMCOUNTER_3 + j, csrmap[CSR_HPMCOUNTER3 + j]);
454- }
455- break ;
456457 case CSR_SIREG4 :
457458 if (xlen == 32 ) {
458459 if (proc->extension_enabled_const (EXT_ZICNTR )) {
0 commit comments