diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-05 14:22:33 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-05 14:22:33 +0100 |
| commit | b13273be0536d5ecf5b70f9935208540e82f1d05 (patch) | |
| tree | 464f5e222d9005d9612cccecff00804170a5a590 /src | |
| parent | 9991c213c1685667d11982c60d28e791edf3e54d (diff) | |
| download | box64-b13273be0536d5ecf5b70f9935208540e82f1d05.tar.gz box64-b13273be0536d5ecf5b70f9935208540e82f1d05.zip | |
Added REX 66 C1 opcodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64run66.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c index 9e41b931..83e9720d 100644 --- a/src/emu/x64run66.c +++ b/src/emu/x64run66.c @@ -30,6 +30,7 @@ int Run66(x64emu_t *emu, rex_t rex) { uint8_t opcode; uint8_t nextop; + uint8_t tmp8u; int32_t tmp32s; reg64_t *oped, *opgd; @@ -37,6 +38,22 @@ int Run66(x64emu_t *emu, rex_t rex) switch(opcode) { + case 0xC1: /* GRP2 Ew,Ib */ + nextop = F8; + GETEW; + tmp8u = F8 /*& 0x1f*/; + switch((nextop>>3)&7) { + case 0: EW->word[0] = rol16(emu, EW->word[0], tmp8u); break; + case 1: EW->word[0] = ror16(emu, EW->word[0], tmp8u); break; + case 2: EW->word[0] = rcl16(emu, EW->word[0], tmp8u); break; + case 3: EW->word[0] = rcr16(emu, EW->word[0], tmp8u); break; + case 4: + case 6: EW->word[0] = shl16(emu, EW->word[0], tmp8u); break; + case 5: EW->word[0] = shr16(emu, EW->word[0], tmp8u); break; + case 7: EW->word[0] = sar16(emu, EW->word[0], tmp8u); break; + } + break; + case 0xC7: /* MOV Ew,Iw */ nextop = F8; GETEW; |