@@ -33,11 +33,10 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
3333 add_csr (CSR_MTVEC, mtvec = std::make_shared<tvec_csr_t >(proc, CSR_MTVEC));
3434 add_csr (CSR_MCAUSE, mcause = std::make_shared<cause_csr_t >(proc, CSR_MCAUSE));
3535
36- auto smcntrpmf_enabled = proc->extension_enabled_const (EXT_SMCNTRPMF);
37- const reg_t mask = smcntrpmf_enabled ? MHPMEVENT_MINH | MHPMEVENT_SINH |
38- MHPMEVENT_UINH | MHPMEVENT_VSINH | MHPMEVENT_VUINH : 0 ;
39- auto minstretcfg = std::make_shared<smcntrpmf_csr_t >(proc, CSR_MINSTRETCFG, mask, 0 );
40- auto mcyclecfg = std::make_shared<smcntrpmf_csr_t >(proc, CSR_MCYCLECFG, mask, 0 );
36+ const reg_t minstretcfg_mask = !proc->extension_enabled_const (EXT_SMCNTRPMF) ? 0 :
37+ MHPMEVENT_MINH | MHPMEVENT_SINH | MHPMEVENT_UINH | MHPMEVENT_VSINH | MHPMEVENT_VUINH;
38+ auto minstretcfg = std::make_shared<smcntrpmf_csr_t >(proc, CSR_MINSTRETCFG, minstretcfg_mask, 0 );
39+ auto mcyclecfg = std::make_shared<smcntrpmf_csr_t >(proc, CSR_MCYCLECFG, minstretcfg_mask, 0 );
4140
4241 minstret = std::make_shared<wide_counter_csr_t >(proc, CSR_MINSTRET, minstretcfg);
4342 mcycle = std::make_shared<wide_counter_csr_t >(proc, CSR_MCYCLE, mcyclecfg);
@@ -74,29 +73,21 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
7473 auto mcounter = std::make_shared<const_csr_t >(proc, which_mcounter, 0 );
7574 add_csr (which_mcounter, mcounter);
7675
77- if (proc->extension_enabled_const (EXT_ZIHPM)) {
78- auto counter = std::make_shared<counter_proxy_csr_t >(proc, which_counter, mcounter);
79- add_csr (which_counter, counter);
80- }
76+ auto counter = std::make_shared<counter_proxy_csr_t >(proc, which_counter, mcounter);
77+ add_const_ext_csr (EXT_ZIHPM, which_counter, counter);
78+
8179 if (xlen == 32 ) {
8280 add_csr (which_mevent, std::make_shared<rv32_low_csr_t >(proc, which_mevent, mevent[i]));
8381 auto mcounterh = std::make_shared<const_csr_t >(proc, which_mcounterh, 0 );
8482 add_csr (which_mcounterh, mcounterh);
85- if (proc->extension_enabled_const (EXT_ZIHPM)) {
86- auto counterh = std::make_shared<counter_proxy_csr_t >(proc, which_counterh, mcounterh);
87- add_csr (which_counterh, counterh);
88- }
89- if (proc->extension_enabled_const (EXT_SSCOFPMF)) {
90- auto meventh = std::make_shared<rv32_high_csr_t >(proc, which_meventh, mevent[i]);
91- add_csr (which_meventh, meventh);
92- }
83+ add_const_ext_csr (EXT_ZIHPM, which_counterh, std::make_shared<counter_proxy_csr_t >(proc, which_counterh, mcounterh));
84+ add_const_ext_csr (EXT_SSCOFPMF, which_meventh, std::make_shared<rv32_high_csr_t >(proc, which_meventh, mevent[i]));
9385 } else {
9486 add_csr (which_mevent, mevent[i]);
9587 }
9688 }
9789 add_csr (CSR_MCOUNTINHIBIT, std::make_shared<const_csr_t >(proc, CSR_MCOUNTINHIBIT, 0 ));
98- if (proc->extension_enabled_const (EXT_SSCOFPMF))
99- add_csr (CSR_SCOUNTOVF, std::make_shared<scountovf_csr_t >(proc, CSR_SCOUNTOVF));
90+ add_const_ext_csr (EXT_SSCOFPMF, CSR_SCOUNTOVF, std::make_shared<scountovf_csr_t >(proc, CSR_SCOUNTOVF));
10091 add_csr (CSR_MIE, mie = std::make_shared<mie_csr_t >(proc, CSR_MIE));
10192 add_csr (CSR_MIP, mip = std::make_shared<mip_csr_t >(proc, CSR_MIP));
10293 auto sip_sie_accr = std::make_shared<generic_int_accessor_t >(
@@ -338,69 +329,52 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
338329 }
339330 }
340331
341- if (proc->extension_enabled (EXT_ZCMT))
342- add_csr (CSR_JVT, jvt = std::make_shared<jvt_csr_t >(proc, CSR_JVT, 0 ));
332+ add_ext_csr (EXT_ZCMT, CSR_JVT, jvt = std::make_shared<jvt_csr_t >(proc, CSR_JVT, 0 ));
343333
344- if (proc->extension_enabled (EXT_ZICFISS)) {
345- reg_t ssp_mask = -reg_t (xlen / 8 );
346- add_csr (CSR_SSP, ssp = std::make_shared<ssp_csr_t >(proc, CSR_SSP, ssp_mask, 0 ));
347- }
334+ const reg_t ssp_mask = -reg_t (xlen / 8 );
335+ add_ext_csr (EXT_ZICFISS, CSR_SSP, ssp = std::make_shared<ssp_csr_t >(proc, CSR_SSP, ssp_mask, 0 ));
348336
349337
350338 // Smcsrind / Sscsrind
351- sscsrind_reg_csr_t ::sscsrind_reg_csr_t_p mireg[6 ];
352- sscsrind_reg_csr_t ::sscsrind_reg_csr_t_p sireg[6 ];
353- sscsrind_reg_csr_t ::sscsrind_reg_csr_t_p vsireg[6 ];
354-
355339 if (proc->extension_enabled_const (EXT_SMCSRIND)) {
356340 csr_t_p miselect = std::make_shared<basic_csr_t >(proc, CSR_MISELECT, 0 );
357341 add_csr (CSR_MISELECT, miselect);
358342
359343 const reg_t mireg_csrs[] = { CSR_MIREG, CSR_MIREG2, CSR_MIREG3, CSR_MIREG4, CSR_MIREG5, CSR_MIREG6 };
360- auto i = 0 ;
361- for (auto csr : mireg_csrs) {
362- add_csr (csr, mireg[i] = std::make_shared<sscsrind_reg_csr_t >(proc, csr, miselect));
363- i++;
364- }
344+ for (auto csr : mireg_csrs)
345+ add_csr (csr, std::make_shared<sscsrind_reg_csr_t >(proc, csr, miselect));
365346 }
366347
367348 if (proc->extension_enabled_const (EXT_SSCSRIND)) {
368349 csr_t_p vsiselect = std::make_shared<basic_csr_t >(proc, CSR_VSISELECT, 0 );
369350 add_csr (CSR_VSISELECT, vsiselect);
351+
370352 csr_t_p siselect = std::make_shared<basic_csr_t >(proc, CSR_SISELECT, 0 );
371353 add_csr (CSR_SISELECT, std::make_shared<virtualized_csr_t >(proc, siselect, vsiselect));
372354
373355 const reg_t vsireg_csrs[] = { CSR_VSIREG, CSR_VSIREG2, CSR_VSIREG3, CSR_VSIREG4, CSR_VSIREG5, CSR_VSIREG6 };
374- auto i = 0 ;
375- for (auto csr : vsireg_csrs) {
376- add_csr (csr, vsireg[i] = std::make_shared<sscsrind_reg_csr_t >(proc, csr, vsiselect));
377- i++;
378- }
379-
380356 const reg_t sireg_csrs[] = { CSR_SIREG, CSR_SIREG2, CSR_SIREG3, CSR_SIREG4, CSR_SIREG5, CSR_SIREG6 };
381- i = 0 ;
382- for (auto csr : sireg_csrs) {
383- sireg[i] = std::make_shared<sscsrind_reg_csr_t >(proc, csr, siselect);
384- add_csr (csr, std::make_shared<virtualized_indirect_csr_t >(proc, sireg[i], vsireg[i]));
385- i++;
357+ for (size_t i = 0 ; i < std::size (vsireg_csrs); i++) {
358+ auto vsireg = std::make_shared<sscsrind_reg_csr_t >(proc, vsireg_csrs[i], vsiselect);
359+ add_csr (vsireg_csrs[i], vsireg);
360+
361+ auto sireg = std::make_shared<sscsrind_reg_csr_t >(proc, sireg_csrs[i], siselect);
362+ add_csr (sireg_csrs[i], std::make_shared<virtualized_indirect_csr_t >(proc, sireg, vsireg));
386363 }
387364 }
388365
389- if (smcntrpmf_enabled ) {
390- if (xlen == 32 ) {
391- add_csr (CSR_MCYCLECFG, std::make_shared<rv32_low_csr_t >(proc, CSR_MCYCLECFG, mcyclecfg));
392- add_csr (CSR_MCYCLECFGH, std::make_shared<rv32_high_csr_t >(proc, CSR_MCYCLECFGH, mcyclecfg));
393- add_csr (CSR_MINSTRETCFG, std::make_shared<rv32_low_csr_t >(proc, CSR_MINSTRETCFG, minstretcfg));
394- add_csr (CSR_MINSTRETCFGH, std::make_shared<rv32_high_csr_t >(proc, CSR_MINSTRETCFGH, minstretcfg));
395- } else {
396- add_csr (CSR_MCYCLECFG, mcyclecfg);
397- add_csr (CSR_MINSTRETCFG, minstretcfg);
398- }
366+ if (proc-> extension_enabled_const (EXT_SMCNTRPMF) ) {
367+ if (xlen == 32 ) {
368+ add_csr (CSR_MCYCLECFG, std::make_shared<rv32_low_csr_t >(proc, CSR_MCYCLECFG, mcyclecfg));
369+ add_csr (CSR_MCYCLECFGH, std::make_shared<rv32_high_csr_t >(proc, CSR_MCYCLECFGH, mcyclecfg));
370+ add_csr (CSR_MINSTRETCFG, std::make_shared<rv32_low_csr_t >(proc, CSR_MINSTRETCFG, minstretcfg));
371+ add_csr (CSR_MINSTRETCFGH, std::make_shared<rv32_high_csr_t >(proc, CSR_MINSTRETCFGH, minstretcfg));
372+ } else {
373+ add_csr (CSR_MCYCLECFG, mcyclecfg);
374+ add_csr (CSR_MINSTRETCFG, minstretcfg);
375+ }
399376 }
400377
401- if (proc->extension_enabled_const (EXT_SSQOSID)) {
402- const reg_t srmcfg_mask = SRMCFG_MCID | SRMCFG_RCID;
403- srmcfg = std::make_shared<srmcfg_csr_t >(proc, CSR_SRMCFG, srmcfg_mask, 0 );
404- add_csr (CSR_SRMCFG, srmcfg);
405- }
378+ const reg_t srmcfg_mask = SRMCFG_MCID | SRMCFG_RCID;
379+ add_const_ext_csr (EXT_SSQOSID, CSR_SRMCFG, std::make_shared<srmcfg_csr_t >(proc, CSR_SRMCFG, srmcfg_mask, 0 ));
406380}
0 commit comments