about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/emu/x64run66.c17
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;