diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-03-13 10:38:32 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-03-13 10:38:32 +0100 |
| commit | 20308faef1e64056f6d8104ad1f649d0f0651b12 (patch) | |
| tree | b28e2c1cab50da5b9f9f07f7cbdc6d60d83d5a5b /src | |
| parent | 170ab57f55fc6bdf9138554459fa1606d95bf153 (diff) | |
| download | box64-20308faef1e64056f6d8104ad1f649d0f0651b12.tar.gz box64-20308faef1e64056f6d8104ad1f649d0f0651b12.zip | |
[ARM64_DYNAREC] Added unimplemented handling of CRC32 opcode (to avoid stopping blocks)
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_f20f.c | 36 |
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"); |