|
|
|
@ -1410,8 +1410,9 @@ float_csr_t::float_csr_t(processor_t* const proc, const reg_t addr, const reg_t |
|
|
|
|
|
|
|
void float_csr_t::verify_permissions(insn_t insn, bool write) const { |
|
|
|
masked_csr_t::verify_permissions(insn, write); |
|
|
|
require(STATE.sstatus->enabled(SSTATUS_FS)); |
|
|
|
if (!proc->extension_enabled('F') && !proc->extension_enabled(EXT_ZFINX)) |
|
|
|
|
|
|
|
if (!((proc->extension_enabled('F') && STATE.sstatus->enabled(SSTATUS_FS)) |
|
|
|
|| proc->extension_enabled(EXT_ZFINX))) |
|
|
|
throw trap_illegal_instruction(insn.bits()); |
|
|
|
|
|
|
|
if (proc->extension_enabled(EXT_SMSTATEEN) && proc->extension_enabled(EXT_ZFINX)) { |
|
|
|
@ -1431,7 +1432,8 @@ void float_csr_t::verify_permissions(insn_t insn, bool write) const { |
|
|
|
} |
|
|
|
|
|
|
|
bool float_csr_t::unlogged_write(const reg_t val) noexcept { |
|
|
|
dirty_fp_state; |
|
|
|
if (!proc->extension_enabled(EXT_ZFINX)) |
|
|
|
dirty_fp_state; |
|
|
|
return masked_csr_t::unlogged_write(val); |
|
|
|
} |
|
|
|
|
|
|
|
|