diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-06-25 15:12:42 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-06-25 15:12:42 +0200 |
| commit | 2604bb078cd6f554dcbe816b92dc344665f56afb (patch) | |
| tree | 2f889d973e7b8273eb276462329f3d0d863fee9f | |
| parent | 8670d622dad9aac7ba4fd0ae0f365012991faec2 (diff) | |
| download | box64-2604bb078cd6f554dcbe816b92dc344665f56afb.tar.gz box64-2604bb078cd6f554dcbe816b92dc344665f56afb.zip | |
[32BITS][ARM64_DYNAREC] Added (faked) 6D opcode
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_00.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index 6eed0d31..2a5d4faf 100755 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -750,6 +750,34 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } break; + case 0x6D: + if(rex.is32bits) { + if(rep) { + // Faking port read + INST_NAME("REP INSD"); + CBZx_NEXT(xRCX); + TBNZ_MARK2(xFlags, F_DF); + MARK; // Part with DF==0 + STRH_S9_postindex(xZR, xRDI, 4); + SUBx_U12(xRCX, xRCX, 1); + CBNZx_MARK(xRCX); + B_NEXT_nocond; + MARK2; // Part with DF==1 + STRH_S9_postindex(xZR, xRDI, -4); + SUBx_U12(xRCX, xRCX, 1); + CBNZx_MARK2(xRCX); + // done + } else { + INST_NAME("INSD"); + GETDIR(x3, 4); + STRH_U12(xZR, xRDI, 0); + ADDx_REG(xRDI, xRDI, x3); + } + } else { + DEFAULT; + } + break; + #define GO(GETFLAGS, NO, YES, F) \ READFLAGS(F); \ i8 = F8S; \ |