about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-03-13 10:38:32 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-03-13 10:38:32 +0100
commit20308faef1e64056f6d8104ad1f649d0f0651b12 (patch)
treeb28e2c1cab50da5b9f9f07f7cbdc6d60d83d5a5b /src
parent170ab57f55fc6bdf9138554459fa1606d95bf153 (diff)
downloadbox64-20308faef1e64056f6d8104ad1f649d0f0651b12.tar.gz
box64-20308faef1e64056f6d8104ad1f649d0f0651b12.zip
[ARM64_DYNAREC] Added unimplemented handling of CRC32 opcode (to avoid stopping blocks)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_f20f.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_f20f.c b/src/dynarec/arm64/dynarec_arm64_f20f.c
index 746225ae..430227c6 100755
--- a/src/dynarec/arm64/dynarec_arm64_f20f.c
+++ b/src/dynarec/arm64/dynarec_arm64_f20f.c
@@ -154,6 +154,42 @@ uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
             }

             break;

 

+        case 0x38:  // these are some more SSSE4.2+ opcodes

+            opcode = F8;

+            switch(opcode) {

+

+                case 0xF0:

+                    INST_NAME("(unsupported) CRC32 Gd, Eb)");

+                    nextop = F8;

+                    addr = fakeed(dyn, addr, ninst, nextop);

+                    SETFLAGS(X_ALL, SF_SET);    // Hack to set flags in "don't care" state

+                    GETIP(ip);

+                    STORE_XEMU_CALL(xRIP);

+                    CALL(arm_ud, -1);

+                    LOAD_XEMU_CALL(xRIP);

+                    jump_to_epilog(dyn, 0, xRIP, ninst);

+                    *need_epilog = 0;

+                    *ok = 0;

+                    break;

+                case 0xF1:

+                    INST_NAME("(unsupported) CRC32 Gd, Ed)");

+                    nextop = F8;

+                    addr = fakeed(dyn, addr, ninst, nextop);

+                    SETFLAGS(X_ALL, SF_SET);    // Hack to set flags in "don't care" state

+                    GETIP(ip);

+                    STORE_XEMU_CALL(xRIP);

+                    CALL(arm_ud, -1);

+                    LOAD_XEMU_CALL(xRIP);

+                    jump_to_epilog(dyn, 0, xRIP, ninst);

+                    *need_epilog = 0;

+                    *ok = 0;

+                    break;

+

+                default:

+                    DEFAULT;

+            }

+            break;

+

 

         case 0x51:

             INST_NAME("SQRTSD Gx, Ex");