diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-02-16 14:22:05 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-02-16 14:22:05 +0100 |
| commit | bc5afbea89dfe925e141ea0931b0c980c1a5431c (patch) | |
| tree | b0168abe63159234f41ec968ebbf14121e7152ba | |
| parent | 65f75b0cc0ead29db622afc790b6167c476e4960 (diff) | |
| download | box64-bc5afbea89dfe925e141ea0931b0c980c1a5431c.tar.gz box64-bc5afbea89dfe925e141ea0931b0c980c1a5431c.zip | |
[ARM64_DYNAREC] Added better handling for DD C0 D9 F7 sequence
| -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); |