about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-10 10:22:36 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-10 10:22:36 +0100
commit23917fa07e1e5abb40e1b7333294678203dd5164 (patch)
treeb3a4961c539f48a5eb2b4573b41b7fe0cce0bf26 /src
parent0a7963588e2f4e088d089cbde90ee9ebad63ed85 (diff)
downloadbox64-23917fa07e1e5abb40e1b7333294678203dd5164.tar.gz
box64-23917fa07e1e5abb40e1b7333294678203dd5164.zip
Added 66 D1/D3 opcodes
Diffstat (limited to 'src')
-rw-r--r--src/emu/x64run66.c30
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;

     }