diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-03-14 10:01:00 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-03-14 10:01:00 +0100 |
| commit | 8115b4705109028650bdf0236b23a4991ddaaed2 (patch) | |
| tree | 019025eb43bc079317003b5f7c6538a5e5590569 /src/emu | |
| parent | 6384cc6e8614e7cb4837a9e3c44e84cb206c267a (diff) | |
| download | box64-8115b4705109028650bdf0236b23a4991ddaaed2.tar.gz box64-8115b4705109028650bdf0236b23a4991ddaaed2.zip | |
Added 64 66 83 opcodes ([ARM64_DYNAREC] too)
Diffstat (limited to 'src/emu')
| -rw-r--r-- | src/emu/x64run6664.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/emu/x64run6664.c b/src/emu/x64run6664.c index c91b3cbc..a76f2bc7 100644 --- a/src/emu/x64run6664.c +++ b/src/emu/x64run6664.c @@ -30,6 +30,8 @@ uintptr_t Run6664(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) { uint8_t opcode; uint8_t nextop; + uint16_t tmp16u; + int16_t tmp16s; reg64_t *oped, *opgd; sse_regs_t *opex, *opgx; #ifdef TEST_INTERPRETER @@ -117,6 +119,29 @@ uintptr_t Run6664(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) else cmp16(emu, EW->word[0], GW->word[0]); break; + + case 0x83: /* GRP3 Ew,Ib */ + nextop = F8; + GETEW_OFFS((opcode==0x81)?2:1, tlsdata); + GETGW; + if(opcode==0x81) + tmp16u = F16; + else { + tmp16s = F8S; + tmp16u = (uint16_t)tmp16s; + } + switch((nextop>>3)&7) { + case 0: EW->word[0] = add16(emu, EW->word[0], tmp16u); break; + case 1: EW->word[0] = or16(emu, EW->word[0], tmp16u); break; + case 2: EW->word[0] = adc16(emu, EW->word[0], tmp16u); break; + case 3: EW->word[0] = sbb16(emu, EW->word[0], tmp16u); break; + case 4: EW->word[0] = and16(emu, EW->word[0], tmp16u); break; + case 5: EW->word[0] = sub16(emu, EW->word[0], tmp16u); break; + case 6: EW->word[0] = xor16(emu, EW->word[0], tmp16u); break; + case 7: cmp16(emu, EW->word[0], tmp16u); break; + } + break; + case 0x89: /* MOV FS:Ew,Gw */ nextop = F8; GETEW_OFFS(0, tlsdata); |