about summary refs log tree commit diff stats
path: root/src/dynarec
diff options
context:
space:
mode:
Diffstat (limited to 'src/dynarec')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_67.c28
1 files changed, 28 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;