about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_66.c17
-rw-r--r--src/emu/x64run66.c14
2 files changed, 31 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_66.c b/src/dynarec/dynarec_arm64_66.c
index 8237fe3c..ac78b267 100755
--- a/src/dynarec/dynarec_arm64_66.c
+++ b/src/dynarec/dynarec_arm64_66.c
@@ -29,6 +29,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
     uint8_t nextop, u8;

     int16_t i16;

     uint16_t u16;

+    uint64_t u64;

     int32_t i32;

     int64_t j64;

     uint8_t gd, ed;

@@ -36,6 +37,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
     int64_t fixedaddress;

     MAYUSE(u8);

     MAYUSE(u16);

+    MAYUSE(u64);

     MAYUSE(j64);

 

     while((opcode==0x2E) || (opcode==0x66))   // ignoring CS: or multiple 0x66

@@ -456,6 +458,21 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             INST_NAME("NOP");

             break;

 

+        case 0xA1:

+            INST_NAME("MOV EAX,Od");

+            u64 = F64;

+            MOV64x(x1, u64);

+            LDRH_U12(x2, x1, 0);

+            BFIx(xRAX, x2, 0, 16);

+            break;

+

+        case 0xA3:

+            INST_NAME("MOV Od,EAX");

+            u64 = F64;

+            MOV64x(x1, u64);

+            STRH_U12(xRAX, x1, 0);

+            break;

+

         case 0xA5:

             if(rep) {

                 INST_NAME("REP MOVSW");

diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c
index 0e1f4bac..067c47da 100644
--- a/src/emu/x64run66.c
+++ b/src/emu/x64run66.c
@@ -246,6 +246,20 @@ int Run66(x64emu_t *emu, rex_t rex, int rep)
         R_DX=((R_AX & 0x8000)?0xFFFF:0x0000);

         break;

 

+    case 0xA1:                      /* MOV EAX,Od */

+        if(rex.w)

+            R_RAX = *(uint64_t*)F64;

+        else

+            R_AX = *(uint16_t*)F64;

+        break;

+

+    case 0xA3:                      /* MOV Od,EAX */

+        if(rex.w)

+            *(uint64_t*)F64 = R_RAX;

+        else

+            *(uint16_t*)F64 = R_AX;

+        break;

+

     case 0xA5:              /* (REP) MOVSW */

         tmp8s = ACCESS_FLAG(F_DF)?-1:+1;

         tmp64u = (rep)?R_RCX:1L;