diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-07-23 11:02:22 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-07-23 11:02:22 +0200 |
| commit | da6ad1a43d85e0a9ad4f2801f5b5bdb73dc55055 (patch) | |
| tree | 460fd0feaaa62739ae6d86096a4b2dbb339bda27 /src | |
| parent | f9e4253cb7ba9843f04f44e19294256aae0393a0 (diff) | |
| download | box64-da6ad1a43d85e0a9ad4f2801f5b5bdb73dc55055.tar.gz box64-da6ad1a43d85e0a9ad4f2801f5b5bdb73dc55055.zip | |
[32BITS] Added 66 FF /6 opcode ([ARM64_DYNAREC] too)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_66.c | 10 | ||||
| -rw-r--r-- | src/emu/x64run66.c | 10 |
2 files changed, 16 insertions, 4 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_66.c b/src/dynarec/arm64/dynarec_arm64_66.c index ff269cf2..8f588207 100644 --- a/src/dynarec/arm64/dynarec_arm64_66.c +++ b/src/dynarec/arm64/dynarec_arm64_66.c @@ -1117,6 +1117,16 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin emit_dec16(dyn, ninst, x1, x2, x4); EWBACK; break; + case 6: // Push Ew + if(rex.is32bits) { + INST_NAME("PUSH Ew"); + GETEW(x1, 0); + PUSH1_16(ed); + } else { + DEFAULT; + } + break; + default: DEFAULT; } diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c index b037de11..4a6f92aa 100644 --- a/src/emu/x64run66.c +++ b/src/emu/x64run66.c @@ -799,7 +799,6 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) case 0xFF: /* GRP 5 Ew */ nextop = F8; GETEW(0); - GETGW; switch((nextop>>3)&7) { case 0: /* INC Ed */ EW->word[0] = inc16(emu, EW->word[0]); @@ -817,9 +816,12 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) } addr = tmp64u; break; - /*case 6: - Push16(emu, EW->word[0]); - break;*/ + case 6: /* Push Ew */ + if(rex.is32bits) { + Push16(emu, EW->word[0]); + } else + return 0; + break; default: printf_log(LOG_NONE, "Illegal Opcode %p: 66 %02X %02X %02X %02X %02X %02X\n",(void*)R_RIP, opcode, nextop, PK(2), PK(3), PK(4), PK(5)); emu->quit=1; |