From b0de73852ca218c20047cb4d76b4142a2386474b Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Mon, 24 Mar 2025 20:54:01 +0800 Subject: [RV64_DYNAREC] Fixed some DD prefixed x87 opcodes (#2463) --- src/dynarec/rv64/dynarec_rv64_dd.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src') 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)); -- cgit 1.4.1