about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-05 14:22:33 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-05 14:22:33 +0100
commitb13273be0536d5ecf5b70f9935208540e82f1d05 (patch)
tree464f5e222d9005d9612cccecff00804170a5a590 /src
parent9991c213c1685667d11982c60d28e791edf3e54d (diff)
downloadbox64-b13273be0536d5ecf5b70f9935208540e82f1d05.tar.gz
box64-b13273be0536d5ecf5b70f9935208540e82f1d05.zip
Added REX 66 C1 opcodes
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;