about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xsrc/dynarec/dynarec_arm64_660f.c21
-rw-r--r--src/emu/x64run660f.c7
2 files changed, 28 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_660f.c b/src/dynarec/dynarec_arm64_660f.c
index 97106761..6a6196fe 100755
--- a/src/dynarec/dynarec_arm64_660f.c
+++ b/src/dynarec/dynarec_arm64_660f.c
@@ -943,6 +943,27 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
             EWBACK;

             break;

 

+        case 0xB6:

+            INST_NAME("MOVZX Gw, Eb");

+            nextop = F8;

+            if(MODREG) {

+                if(rex.rex) {

+                    eb1 = xRAX+(nextop&7)+(rex.b<<3);

+                    eb2 = 0;                \

+                } else {

+                    ed = (nextop&7);

+                    eb1 = xRAX+(ed&3);  // Ax, Cx, Dx or Bx

+                    eb2 = (ed&4)>>2;    // L or H

+                }

+                UBFXxw(x1, eb1, eb2*8, 8);

+            } else {

+                addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, 0xfff, 0, rex, 0, 0);

+                LDRB_U12(x1, ed, fixedaddress);

+            }

+            gd = xRAX+((nextop&0x38)>>3)+(rex.r<<3);    // GETGW

+            BFIx(gd, x1, 0, 16);        // insert in Gw

+            break;

+

         case 0xBB:

             INST_NAME("BTC Ew, Gw");

             SETFLAGS(X_CF, SF_SET);

diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c
index 4ccf55da..9b23c1f2 100644
--- a/src/emu/x64run660f.c
+++ b/src/emu/x64run660f.c
@@ -870,6 +870,13 @@ int Run660F(x64emu_t *emu, rex_t rex)
         }

         break;

 

+    case 0xB6:                      /* MOVZX Gw,Eb */

+        nextop = F8;

+        GETEB(0);

+        GETGW;

+        GW->word[0] = EB->byte[0];

+        break;

+

     case 0xBB:                      /* BTC Ew,Gw */

         CHECK_FLAGS(emu);

         nextop = F8;