diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_dd.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_dd.c b/src/dynarec/rv64/dynarec_rv64_dd.c index c21030ca..0c926106 100644 --- a/src/dynarec/rv64/dynarec_rv64_dd.c +++ b/src/dynarec/rv64/dynarec_rv64_dd.c @@ -150,16 +150,24 @@ uintptr_t dynarec64_DD(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni FSD(v1, wback, fixedaddress); X87_POP_OR_FAIL(dyn, ninst, x3); break; + case 4: + INST_NAME("FRSTOR m108byte"); + MESSAGE(LOG_DUMP, "Need Optimization (FRSTOR)\n"); + fpu_purgecache(dyn, ninst, 0, x1, x2, x3); + addr = geted(dyn, addr, ninst, nextop, &ed, x4, x6, &fixedaddress, rex, NULL, 0, 0); + CALL(native_frstor, -1, ed, 0); + break; case 6: - INST_NAME("FSAVE m108byte"); + INST_NAME("FNSAVE m108byte"); MESSAGE(LOG_DUMP, "Need Optimization\n"); fpu_purgecache(dyn, ninst, 0, x1, x2, x3); addr = geted(dyn, addr, ninst, nextop, &ed, x4, x6, &fixedaddress, rex, NULL, 0, 0); CALL(native_fsave, -1, ed, 0); + CALL(reset_fpu, -1, 0, 0); break; case 7: INST_NAME("FNSTSW m2byte"); - fpu_purgecache(dyn, ninst, 0, x1, x2, x3); + // fpu_purgecache(dyn, ninst, 0, x1, x2, x3); addr = geted(dyn, addr, ninst, nextop, &ed, x4, x6, &fixedaddress, rex, NULL, 0, 0); LWU(x2, xEmu, offsetof(x64emu_t, top)); LHU(x3, xEmu, offsetof(x64emu_t, sw)); |