@@ -224,6 +224,25 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
224224 } else {
225225 add_hypervisor_csr (CSR_HIDELEG, hideleg);
226226 }
227+
228+ const reg_t menvcfg_mask = (proc->extension_enabled (EXT_ZICBOM) ? MENVCFG_CBCFE | MENVCFG_CBIE : 0 ) |
229+ (proc->extension_enabled (EXT_ZICBOZ) ? MENVCFG_CBZE : 0 ) |
230+ (proc->extension_enabled (EXT_SMNPM) ? MENVCFG_PMM : 0 ) |
231+ (proc->extension_enabled (EXT_SVADU) ? MENVCFG_ADUE: 0 ) |
232+ (proc->extension_enabled (EXT_SVPBMT) ? MENVCFG_PBMTE : 0 ) |
233+ (proc->extension_enabled (EXT_SSTC) ? MENVCFG_STCE : 0 ) |
234+ (proc->extension_enabled (EXT_ZICFILP) ? MENVCFG_LPE : 0 ) |
235+ (proc->extension_enabled (EXT_ZICFISS) ? MENVCFG_SSE : 0 ) |
236+ (proc->extension_enabled (EXT_SSDBLTRP) ? MENVCFG_DTE : 0 )|
237+ (proc->extension_enabled (EXT_SMCDELEG) ? MENVCFG_CDE : 0 );
238+ menvcfg = std::make_shared<envcfg_csr_t >(proc, CSR_MENVCFG, menvcfg_mask, 0 );
239+ if (xlen == 32 ) {
240+ add_user_csr (CSR_MENVCFG, std::make_shared<rv32_low_csr_t >(proc, CSR_MENVCFG, menvcfg));
241+ add_user_csr (CSR_MENVCFGH, std::make_shared<rv32_high_csr_t >(proc, CSR_MENVCFGH, menvcfg));
242+ } else {
243+ add_user_csr (CSR_MENVCFG, menvcfg);
244+ }
245+
227246 const reg_t hedeleg_mask =
228247 (1 << CAUSE_MISALIGNED_FETCH) |
229248 (1 << CAUSE_FETCH_ACCESS) |
@@ -310,23 +329,6 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
310329 add_csr (CSR_MVENDORID, std::make_shared<const_csr_t >(proc, CSR_MVENDORID, 0 ));
311330 add_csr (CSR_MHARTID, std::make_shared<const_csr_t >(proc, CSR_MHARTID, proc->get_id ()));
312331 add_csr (CSR_MCONFIGPTR, std::make_shared<const_csr_t >(proc, CSR_MCONFIGPTR, 0 ));
313- const reg_t menvcfg_mask = (proc->extension_enabled (EXT_ZICBOM) ? MENVCFG_CBCFE | MENVCFG_CBIE : 0 ) |
314- (proc->extension_enabled (EXT_ZICBOZ) ? MENVCFG_CBZE : 0 ) |
315- (proc->extension_enabled (EXT_SMNPM) ? MENVCFG_PMM : 0 ) |
316- (proc->extension_enabled (EXT_SVADU) ? MENVCFG_ADUE: 0 ) |
317- (proc->extension_enabled (EXT_SVPBMT) ? MENVCFG_PBMTE : 0 ) |
318- (proc->extension_enabled (EXT_SSTC) ? MENVCFG_STCE : 0 ) |
319- (proc->extension_enabled (EXT_ZICFILP) ? MENVCFG_LPE : 0 ) |
320- (proc->extension_enabled (EXT_ZICFISS) ? MENVCFG_SSE : 0 ) |
321- (proc->extension_enabled (EXT_SSDBLTRP) ? MENVCFG_DTE : 0 )|
322- (proc->extension_enabled (EXT_SMCDELEG) ? MENVCFG_CDE : 0 );
323- menvcfg = std::make_shared<envcfg_csr_t >(proc, CSR_MENVCFG, menvcfg_mask, 0 );
324- if (xlen == 32 ) {
325- add_user_csr (CSR_MENVCFG, std::make_shared<rv32_low_csr_t >(proc, CSR_MENVCFG, menvcfg));
326- add_user_csr (CSR_MENVCFGH, std::make_shared<rv32_high_csr_t >(proc, CSR_MENVCFGH, menvcfg));
327- } else {
328- add_user_csr (CSR_MENVCFG, menvcfg);
329- }
330332 const reg_t senvcfg_mask = (proc->extension_enabled (EXT_ZICBOM) ? SENVCFG_CBCFE | SENVCFG_CBIE : 0 ) |
331333 (proc->extension_enabled (EXT_ZICBOZ) ? SENVCFG_CBZE : 0 ) |
332334 (proc->extension_enabled (EXT_SVUKTE) ? SENVCFG_UKTE : 0 ) |
0 commit comments