diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-02-01 18:58:01 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-02-01 18:58:01 +0100 |
| commit | acc2f2e3d542ec67c0c23b973a24370c40a7787a (patch) | |
| tree | 38f7d2199c0571d3bbce3c67545c2c0091bd3bfb /src | |
| parent | a2be60cce825bf83b4754a6fbcbf384273542115 (diff) | |
| download | box64-acc2f2e3d542ec67c0c23b973a24370c40a7787a.tar.gz box64-acc2f2e3d542ec67c0c23b973a24370c40a7787a.zip | |
[32BITS] Added 67 64 89 opcode ([ARM64_DYNAREC] too)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_6764_32.c | 13 | ||||
| -rw-r--r-- | src/emu/x64run6764_32.c | 7 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_6764_32.c b/src/dynarec/arm64/dynarec_arm64_6764_32.c index c62b239a..27691e74 100644 --- a/src/dynarec/arm64/dynarec_arm64_6764_32.c +++ b/src/dynarec/arm64/dynarec_arm64_6764_32.c @@ -61,6 +61,19 @@ uintptr_t dynarec64_6764_32(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, in switch(opcode) { + case 0x89: + INST_NAME("MOV Seg:Ed, Gd"); + nextop=F8; + GETGD; + if(MODREG) { // reg <= reg + MOVxw_REG(xRAX+(nextop&7)+(rex.b<<3), gd); + } else { // mem <= reg + grab_segdata(dyn, addr, ninst, x4, seg); + addr = geted16(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, 0); + STRw_REG(gd, ed, x4); + } + break; + case 0xA1: INST_NAME("MOV EAX, Seg:[Od]"); i32 = F16; diff --git a/src/emu/x64run6764_32.c b/src/emu/x64run6764_32.c index 5ac96a47..832a970f 100644 --- a/src/emu/x64run6764_32.c +++ b/src/emu/x64run6764_32.c @@ -54,6 +54,13 @@ uintptr_t Run6764_32(x64emu_t *emu, rex_t rex, int rep, int seg, uintptr_t addr) switch(opcode) { + case 0x89: /* MOV FS:Ew, Gw */ + nextop = F8; + GETEW_OFFS_16(tlsdata); + GETGW; + EW->word[0] = GW->word[0]; + break; + case 0x8B: /* MOV Gw, FS:Ew */ nextop = F8; GETEW_OFFS_16(tlsdata); |