about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-02-16 14:22:05 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-02-16 14:22:05 +0100
commitbc5afbea89dfe925e141ea0931b0c980c1a5431c (patch)
treeb0168abe63159234f41ec968ebbf14121e7152ba
parent65f75b0cc0ead29db622afc790b6167c476e4960 (diff)
downloadbox64-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.c8
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);