diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-01-26 14:18:11 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-01-26 14:18:11 +0100 |
| commit | aab6bc086986bd22d513f05175276e5907340f86 (patch) | |
| tree | 1ded23107c387b0b0048ffead0401c0cc0f387fe /src | |
| parent | 77213bee1dc2f7ea15b232a74bd66d9dd300cf97 (diff) | |
| download | box64-aab6bc086986bd22d513f05175276e5907340f86.tar.gz box64-aab6bc086986bd22d513f05175276e5907340f86.zip | |
Added 66 8F opcode ([ARM64_DYNAREC] too)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_66.c | 49 | ||||
| -rw-r--r-- | src/emu/x64run66.c | 6 |
2 files changed, 35 insertions, 20 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_66.c b/src/dynarec/arm64/dynarec_arm64_66.c index 70ecb7d6..9e860dde 100644 --- a/src/dynarec/arm64/dynarec_arm64_66.c +++ b/src/dynarec/arm64/dynarec_arm64_66.c @@ -661,26 +661,37 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin 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: - case 0x93: - case 0x94: - case 0x95: - case 0x96: - case 0x97: - gd = xRAX+(opcode&0x07)+(rex.b<<3); - if(gd==xRAX) { - INST_NAME("NOP"); - } else { - INST_NAME("XCHG AX, Reg"); - MOVw_REG(x2, xRAX); - BFIx(xRAX, gd, 0, 16); - BFIx(gd, x2, 0, 16); - } + case 0x8F: + INST_NAME("POP Ew"); + nextop = F8; + POP1_16(x1); + if((nextop&0xC0)==0xC0) { + wback = xRAX+(nextop&7)+(rex.b<<3); + BFIx(wback, x1, 0, 16); + } else { + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, &unscaled, 0xfff<<1, 1, rex, NULL, 0, 0); + STH(x1, wback, fixedaddress); + } + break; + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + gd = xRAX+(opcode&0x07)+(rex.b<<3); + if(gd==xRAX) { + INST_NAME("NOP"); + } else { + INST_NAME("XCHG AX, Reg"); + MOVw_REG(x2, xRAX); + BFIx(xRAX, gd, 0, 16); + BFIx(gd, x2, 0, 16); + } break; - case 0x98: INST_NAME("CBW"); SXTBw(x1, xRAX); diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c index b1325026..e26eb379 100644 --- a/src/emu/x64run66.c +++ b/src/emu/x64run66.c @@ -408,7 +408,11 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) emu->segs[((nextop&0x38)>>3)] = EW->word[0]; emu->segs_serial[((nextop&0x38)>>3)] = 0; break; - + case 0x8F: /* POP Ew */ + nextop = F8; + GETEW(0); + EW->word[0] = Pop16(emu); + break; case 0x90: /* NOP or XCHG R8d, AX*/ case 0x91: case 0x92: |