Fpu now set csr status fs on FPU csr write
This commit is contained in:
parent
fda7da00c2
commit
959e48a353
|
@ -219,6 +219,9 @@ class FpuPlugin(externalFpu : Boolean = false,
|
||||||
when(stages.last.arbitration.isFiring && stages.last.input(FPU_ENABLE) && stages.last.input(FPU_OPCODE) =/= FpuOpcode.STORE){
|
when(stages.last.arbitration.isFiring && stages.last.input(FPU_ENABLE) && stages.last.input(FPU_OPCODE) =/= FpuOpcode.STORE){
|
||||||
fs := 3 //DIRTY
|
fs := 3 //DIRTY
|
||||||
}
|
}
|
||||||
|
when(List(CSR.FRM, CSR.FCSR, CSR.FFLAGS).map(id => service.isWriting(id)).orR){
|
||||||
|
fs := 3
|
||||||
|
}
|
||||||
|
|
||||||
service.rw(CSR.SSTATUS, 13, fs)
|
service.rw(CSR.SSTATUS, 13, fs)
|
||||||
service.rw(CSR.MSTATUS, 13, fs)
|
service.rw(CSR.MSTATUS, 13, fs)
|
||||||
|
|
|
@ -668,9 +668,9 @@ public:
|
||||||
case SATP: satp.raw = value; break;
|
case SATP: satp.raw = value; break;
|
||||||
|
|
||||||
#ifdef RVF
|
#ifdef RVF
|
||||||
case FCSR: fcsr.raw = value & 0x7F; break;
|
case FCSR: fcsr.raw = value & 0x7F; status.fs = 3; break;
|
||||||
case FRM: fcsr.frm = value; break;
|
case FRM: fcsr.frm = value; status.fs = 3; break;
|
||||||
case FFLAGS: fcsr.flags = value; break;
|
case FFLAGS: fcsr.flags = value; status.fs = 3; break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
default: ilegalInstruction(); return true; break;
|
default: ilegalInstruction(); return true; break;
|
||||||
|
|
Loading…
Reference in New Issue