diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-10-26 21:57:37 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-10-26 21:57:37 +0200 |
| commit | a1ac21af75b0fae21981830e660cc31527f9f0f0 (patch) | |
| tree | 50a53dd3b2b7208d0ecb49d5faa6565f398f43e0 /src | |
| parent | d3d5e4e7bc8e44e28c5a4541ec5507270f709c1c (diff) | |
| download | box64-a1ac21af75b0fae21981830e660cc31527f9f0f0.tar.gz box64-a1ac21af75b0fae21981830e660cc31527f9f0f0.zip | |
[32BITS] Added a few 66 opcodes ([ARM64_DYNAREC] too)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_66.c | 18 | ||||
| -rw-r--r-- | src/emu/x64run66.c | 6 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_66.c b/src/dynarec/arm64/dynarec_arm64_66.c index 84427d20..6c0985aa 100644 --- a/src/dynarec/arm64/dynarec_arm64_66.c +++ b/src/dynarec/arm64/dynarec_arm64_66.c @@ -43,7 +43,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MAYUSE(j64); MAYUSE(lock); - while((opcode==0x2E) || (opcode==0x36) || (opcode==0x66)) // ignoring CS:, SS: or multiple 0x66 + while((opcode==0x2E) || (opcode==0x36) || (opcode==0x26) || (opcode==0x66)) // ignoring CS:, SS:, ES: or multiple 0x66 opcode = F8; while((opcode==0xF2) || (opcode==0xF3)) { @@ -649,6 +649,22 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } break; + case 0x8E: + INST_NAME("MOV Seg,Ew"); + nextop = F8; + u8 = (nextop&0x38)>>3; + if((nextop&0xC0)==0xC0) { + ed = xRAX+(nextop&7)+(rex.b<<3); + } else { + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, &unscaled, 0xfff<<1, 1, rex, NULL, 0, 0); + LDH(x1, wback, fixedaddress); + ed = x1; + } + STRH_U12(ed, xEmu, offsetof(x64emu_t, segs[u8])); + STRw_U12(wZR, xEmu, offsetof(x64emu_t, segs_serial[u8])); + break; + case 0x90: case 0x91: case 0x92: diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c index 49a5ba3c..6596d081 100644 --- a/src/emu/x64run66.c +++ b/src/emu/x64run66.c @@ -391,6 +391,12 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) else GD->word[0] = (uint16_t)tmp64u; break; + case 0x8E: /* MOV Seg,Ew */ + nextop = F8; + GETEW(0); + emu->segs[((nextop&0x38)>>3)] = EW->word[0]; + emu->segs_serial[((nextop&0x38)>>3)] = 0; + break; case 0x90: /* NOP or XCHG R8d, AX*/ case 0x91: |