diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_00_3.c | 1 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_df.c | 4 |
2 files changed, 5 insertions, 0 deletions
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); |