diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-25 16:24:09 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-25 16:24:09 +0100 |
| commit | 3b4181c616a78678ceabed82482a2fcc8ce26699 (patch) | |
| tree | ca494e122aba8a8126e7befe843205d8789042ce /src | |
| parent | 2bd3fa6aa7aa0cdd4525966d415bd74d25e29378 (diff) | |
| download | box64-3b4181c616a78678ceabed82482a2fcc8ce26699.tar.gz box64-3b4181c616a78678ceabed82482a2fcc8ce26699.zip | |
[DYNAREC] Added 8A opcode
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/dynarec_arm64_00.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/src/dynarec/dynarec_arm64_00.c b/src/dynarec/dynarec_arm64_00.c index 845703f4..af08644d 100755 --- a/src/dynarec/dynarec_arm64_00.c +++ b/src/dynarec/dynarec_arm64_00.c @@ -920,7 +920,39 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STRxw_U12(gd, ed, fixedaddress); } break; - + case 0x8A: + INST_NAME("MOV Gb, Eb"); + nextop = F8; + if(rex.w) { + gb1 = gd = xRAX+((nextop&0x38)>>3)+(rex.r<<3); + gb2=0; + } else { + gd = (nextop&0x38)>>3; + gb1 = xRAX+(gd&3); + gb2 = ((gd&4)>>2); + } + if(MODREG) { + if(rex.w) { + wback = xRAX+(nextop&7)+(rex.b<<3); + wb2 = 0; + } else { + wback = (nextop&7); + wb2 = (wback>>2); + wback = xRAX+(wback&3); + } + if(wb2) { + UBFXw(x4, wback, wb2*8, 8); + ed = x4; + } else { + ed = wback; + } + } else { + addr = geted(dyn, addr, ninst, nextop, &wback, x3, &fixedaddress, 0xfff, 0, rex, 0, 0); + LDRB_U12(x4, wback, fixedaddress); + ed = x4; + } + BFIx(gb1, ed, gb2*8, 8); + break; case 0x8B: INST_NAME("MOV Gd, Ed"); nextop=F8; |