diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-10 10:22:36 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-10 10:22:36 +0100 |
| commit | 23917fa07e1e5abb40e1b7333294678203dd5164 (patch) | |
| tree | b3a4961c539f48a5eb2b4573b41b7fe0cce0bf26 /src | |
| parent | 0a7963588e2f4e088d089cbde90ee9ebad63ed85 (diff) | |
| download | box64-23917fa07e1e5abb40e1b7333294678203dd5164.tar.gz box64-23917fa07e1e5abb40e1b7333294678203dd5164.zip | |
Added 66 D1/D3 opcodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64run66.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c index 28cd2649..8b7ce364 100644 --- a/src/emu/x64run66.c +++ b/src/emu/x64run66.c @@ -204,6 +204,36 @@ int Run66(x64emu_t *emu, rex_t rex) EW->word[0] = F16; break; + case 0xD1: /* GRP2 Ew,1 */ + case 0xD3: /* GRP2 Ew,CL */ + nextop = F8; + GETEW(0); + tmp8u=(opcode==0xD3)?R_CL:1; + if(rex.w) { + switch((nextop>>3)&7) { + case 0: EW->q[0] = rol64(emu, EW->q[0], tmp8u); break; + case 1: EW->q[0] = ror64(emu, EW->q[0], tmp8u); break; + case 2: EW->q[0] = rcl64(emu, EW->q[0], tmp8u); break; + case 3: EW->q[0] = rcr64(emu, EW->q[0], tmp8u); break; + case 4: + case 6: EW->q[0] = shl64(emu, EW->q[0], tmp8u); break; + case 5: EW->q[0] = shr64(emu, EW->q[0], tmp8u); break; + case 7: EW->q[0] = sar64(emu, EW->q[0], tmp8u); break; + } + } else { + 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; + default: return 1; } |