From bc5afbea89dfe925e141ea0931b0c980c1a5431c Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Fri, 16 Feb 2024 14:22:05 +0100 Subject: [ARM64_DYNAREC] Added better handling for DD C0 D9 F7 sequence --- src/dynarec/arm64/dynarec_arm64_dd.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/dynarec/arm64/dynarec_arm64_dd.c b/src/dynarec/arm64/dynarec_arm64_dd.c index e349053c..631f7a68 100644 --- a/src/dynarec/arm64/dynarec_arm64_dd.c +++ b/src/dynarec/arm64/dynarec_arm64_dd.c @@ -52,7 +52,13 @@ uintptr_t dynarec64_DD(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0xC7: INST_NAME("FFREE STx"); #if 1 - x87_free(dyn, ninst, x1, x2, x3, nextop&7); + if((nextop&7)==0 && PK(0)==0xD9 && PK(1)==0xF7) { + MESSAGE(LOG_DUMP, "Hack for FFREE ST0 / FINCSTP\n"); + x87_do_pop(dyn, ninst, x1); + addr+=2; + SKIPTEST(x1); + } else + x87_free(dyn, ninst, x1, x2, x3, nextop&7); #else MESSAGE(LOG_DUMP, "Need Optimization\n"); x87_purgecache(dyn, ninst, 0, x1, x2, x3); -- cgit 1.4.1