From 649a65b8ee52a659d15420c034d1ce3130bbedb1 Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Fri, 9 Aug 2024 18:03:20 +0800 Subject: [RV64_DYNAREC] Fixed FNSTSW opcode (#1721) --- src/dynarec/rv64/dynarec_rv64_00_3.c | 1 + src/dynarec/rv64/dynarec_rv64_df.c | 4 ++++ 2 files changed, 5 insertions(+) (limited to 'src') diff --git a/src/dynarec/rv64/dynarec_rv64_00_3.c b/src/dynarec/rv64/dynarec_rv64_00_3.c index b7fb9b4c..6e1990bc 100644 --- a/src/dynarec/rv64/dynarec_rv64_00_3.c +++ b/src/dynarec/rv64/dynarec_rv64_00_3.c @@ -391,6 +391,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int *need_epilog = 1; } else { MESSAGE(LOG_DUMP, "Native Call to %s\n", GetNativeName(GetNativeFnc(ip))); + x87_stackcount(dyn, ninst, x1); x87_forget(dyn, ninst, x3, x4, 0); sse_purge07cache(dyn, ninst, x3); // Partially support isSimpleWrapper diff --git a/src/dynarec/rv64/dynarec_rv64_df.c b/src/dynarec/rv64/dynarec_rv64_df.c index a164fc63..737f8e85 100644 --- a/src/dynarec/rv64/dynarec_rv64_df.c +++ b/src/dynarec/rv64/dynarec_rv64_df.c @@ -48,6 +48,10 @@ uintptr_t dynarec64_DF(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 0xE0: INST_NAME("FNSTSW AX"); LWU(x2, xEmu, offsetof(x64emu_t, top)); + if (dyn->e.x87stack) { + ADDI(x2, x2, -dyn->e.x87stack); + ANDI(x2, x2, 0x7); + } LHU(x1, xEmu, offsetof(x64emu_t, sw)); MOV32w(x3, 0b1100011111111111); // mask AND(x1, x1, x3); -- cgit 1.4.1