diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_dd.c | 8 |
1 files changed, 7 insertions, 1 deletions
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); |