diff options
| author | ptitSeb <seebastien.chev@gmail.com> | 2023-08-15 14:52:23 +0200 |
|---|---|---|
| committer | ptitSeb <seebastien.chev@gmail.com> | 2023-08-15 14:52:23 +0200 |
| commit | ca759d2c8f6d9bffd4ed6ddf657afdaf75a288c2 (patch) | |
| tree | fb9c8164d954bf47d9612c5d84116eff6bb6fed2 /src | |
| parent | 53a59f593eef9e1bfe84582ad0a589b5e9aec1c2 (diff) | |
| download | box64-ca759d2c8f6d9bffd4ed6ddf657afdaf75a288c2.tar.gz box64-ca759d2c8f6d9bffd4ed6ddf657afdaf75a288c2.zip | |
[ARM64_DYNAREC] Fixed F2/F3 AD and added AC (should help #924 a bit)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_00.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index 5c718b8d..63aee428 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -1545,7 +1545,25 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin ADDx_REG(xRDI, xRDI, x3); } break; - + case 0xAC: + if(rep) { + INST_NAME("REP LODSB"); + } else { + INST_NAME("LODSB"); + } + GETDIR(x1, 1); + if(rep) { + CBZx_NEXT(xRCX); + MARK; + } + LDRB_U12(x2, xRSI, 0); + ADDx_REG(xRSI, xRSI, x1); + if(rep) { + SUBx_U12(xRCX, xRCX, 1); + CBNZx_MARK(xRCX); + } + BFIx(xRAX, x2, 0, 8); + break; case 0xAD: if(rep) { INST_NAME("REP LODSD"); @@ -1560,7 +1578,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin LDRxw_U12(xRAX, xRSI, 0); ADDx_REG(xRSI, xRSI, x1); if(rep) { - ADDx_U12(xRCX, xRCX, 1); + SUBx_U12(xRCX, xRCX, 1); CBNZx_MARK(xRCX); } break; |