@@ -33,11 +33,10 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
33
33
add_csr (CSR_MTVEC, mtvec = std::make_shared<tvec_csr_t >(proc, CSR_MTVEC));
34
34
add_csr (CSR_MCAUSE, mcause = std::make_shared<cause_csr_t >(proc, CSR_MCAUSE));
35
35
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 );
41
40
42
41
minstret = std::make_shared<wide_counter_csr_t >(proc, CSR_MINSTRET, minstretcfg);
43
42
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)
74
73
auto mcounter = std::make_shared<const_csr_t >(proc, which_mcounter, 0 );
75
74
add_csr (which_mcounter, mcounter);
76
75
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
+
81
79
if (xlen == 32 ) {
82
80
add_csr (which_mevent, std::make_shared<rv32_low_csr_t >(proc, which_mevent, mevent[i]));
83
81
auto mcounterh = std::make_shared<const_csr_t >(proc, which_mcounterh, 0 );
84
82
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]));
93
85
} else {
94
86
add_csr (which_mevent, mevent[i]);
95
87
}
96
88
}
97
89
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));
100
91
add_csr (CSR_MIE, mie = std::make_shared<mie_csr_t >(proc, CSR_MIE));
101
92
add_csr (CSR_MIP, mip = std::make_shared<mip_csr_t >(proc, CSR_MIP));
102
93
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)
338
329
}
339
330
}
340
331
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 ));
343
333
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 ));
348
336
349
337
350
338
// 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
-
355
339
if (proc->extension_enabled_const (EXT_SMCSRIND)) {
356
340
csr_t_p miselect = std::make_shared<basic_csr_t >(proc, CSR_MISELECT, 0 );
357
341
add_csr (CSR_MISELECT, miselect);
358
342
359
343
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));
365
346
}
366
347
367
348
if (proc->extension_enabled_const (EXT_SSCSRIND)) {
368
349
csr_t_p vsiselect = std::make_shared<basic_csr_t >(proc, CSR_VSISELECT, 0 );
369
350
add_csr (CSR_VSISELECT, vsiselect);
351
+
370
352
csr_t_p siselect = std::make_shared<basic_csr_t >(proc, CSR_SISELECT, 0 );
371
353
add_csr (CSR_SISELECT, std::make_shared<virtualized_csr_t >(proc, siselect, vsiselect));
372
354
373
355
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
-
380
356
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));
386
363
}
387
364
}
388
365
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
+ }
399
376
}
400
377
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 ));
406
380
}
0 commit comments