diff options
Diffstat (limited to 'riscv/processor.cc')
-rw-r--r-- | riscv/processor.cc | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/riscv/processor.cc b/riscv/processor.cc index a926021..383fd3f 100644 --- a/riscv/processor.cc +++ b/riscv/processor.cc @@ -856,10 +856,15 @@ reg_t processor_t::get_csr(int which) break; return state.frm; case CSR_FCSR: - require_fp; + {require_fp; if (!supports_extension('F')) break; - return (state.fflags << FSR_AEXC_SHIFT) | (state.frm << FSR_RD_SHIFT); + uint32_t shared_flags = 0; + if (supports_extension('V')) + shared_flags = (VU.vxrm << FSR_VXRM_SHIFT) | (VU.vxsat << FSR_VXSAT_SHIFT); + return (state.fflags << FSR_AEXC_SHIFT) | (state.frm << FSR_RD_SHIFT) | + shared_flags; + } case CSR_INSTRET: case CSR_CYCLE: if (ctr_ok) |