about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/dynarec/arm64/dynarec_arm64_67.c28
-rw-r--r--src/emu/x64run67.c5
2 files changed, 33 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_67.c b/src/dynarec/arm64/dynarec_arm64_67.c
index c7d80a6f..ea093b0a 100644
--- a/src/dynarec/arm64/dynarec_arm64_67.c
+++ b/src/dynarec/arm64/dynarec_arm64_67.c
@@ -985,6 +985,34 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             }

             break;

 

+        case 0xC6:

+            INST_NAME("MOV Eb, Ib");

+            nextop=F8;

+            if(MODREG) {   // reg <= u8

+                u8 = F8;

+                if(!rex.rex) {

+                    ed = (nextop&7);

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

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

+                } else {

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

+                    eb2 = 0;

+                }

+                MOV32w(x3, u8);

+                BFIx(eb1, x3, eb2*8, 8);

+            } else {                    // mem <= u8

+                addr = geted32(dyn, addr, ninst, nextop, &wback, x1, &fixedaddress, &unscaled, 0xfff, 0, rex, &lock, 0, 1);

+                u8 = F8;

+                if(u8) {

+                    MOV32w(x3, u8);

+                    ed = x3;

+                } else

+                    ed = xZR;

+                WILLWRITELOCK(lock);

+                STB(ed, wback, fixedaddress);

+                SMWRITELOCK(lock);

+            }

+            break;

         case 0xC7:

             INST_NAME("MOV Ed, Id");

             nextop=F8;

diff --git a/src/emu/x64run67.c b/src/emu/x64run67.c
index 5d9f41c6..6a5b2143 100644
--- a/src/emu/x64run67.c
+++ b/src/emu/x64run67.c
@@ -328,6 +328,11 @@ uintptr_t Run67(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr)
         }

         break;

 

+    case 0xC6:                      /* MOV Eb,Ib */

+        nextop = F8;

+        GETEB32(1);

+        EB->byte[0] = F8;

+        break;

     case 0xC7:                      /* MOV Ed,Id */

         nextop = F8;

         GETED32(4);