diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-01-27 17:56:48 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-01-27 17:56:48 +0100 |
| commit | 6c0af2dbb9ac6754411ad7792b307e4fa77fdc1e (patch) | |
| tree | 5cfc056ee80e62e8546bfcedd8cf798a96add442 /src | |
| parent | eee428afe5d7c287ed1c7ddb37a13d4e8290cc26 (diff) | |
| download | box64-6c0af2dbb9ac6754411ad7792b307e4fa77fdc1e.tar.gz box64-6c0af2dbb9ac6754411ad7792b307e4fa77fdc1e.zip | |
[ARM64_DYNAREC] Added E4/E5/E6/E7 opcodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_00.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index 358b9895..59cbe4ad 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -2738,7 +2738,21 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin GO(1); break; #undef GO - + case 0xE4: /* IN AL, Ib */ + case 0xE5: /* IN EAX, Ib */ + case 0xE6: /* OUT Ib, AL */ + case 0xE7: /* OUT Ib, EAX */ + INST_NAME(opcode==0xE4?"IN AL, Ib":(opcode==0xE5?"IN EAX, Ib":(opcode==0xE6?"OUT Ib, AL":"OUT Ib, EAX"))); + SETFLAGS(X_ALL, SF_SET); // Hack to set flags in "don't care" state + u8 = F8; + GETIP(ip); + STORE_XEMU_CALL(xRIP); + CALL(native_priv, -1); + LOAD_XEMU_CALL(xRIP); + jump_to_epilog(dyn, 0, xRIP, ninst); + *need_epilog = 0; + *ok = 0; + break; case 0xE8: INST_NAME("CALL Id"); i32 = F32S; @@ -2883,7 +2897,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0xED: /* IN EAX, DX */ case 0xEE: /* OUT DX, AL */ case 0xEF: /* OUT DX, EAX */ - INST_NAME(opcode==0xEC?"IN AL, DX":(opcode==0xED?"IN EAX, DX":(opcode==0xEE?"OUT DX? AL":"OUT DX, EAX"))); + INST_NAME(opcode==0xEC?"IN AL, DX":(opcode==0xED?"IN EAX, DX":(opcode==0xEE?"OUT DX, AL":"OUT DX, EAX"))); SETFLAGS(X_ALL, SF_SET); // Hack to set flags in "don't care" state GETIP(ip); STORE_XEMU_CALL(xRIP); |