about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_dd.c12
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));