about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-30 20:55:23 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-03-30 20:55:23 +0200
commitc5f4820b4e33c20841497c674ddf959cdbb18b27 (patch)
tree5d0c1b7e724413d5b985a037a5c67cffcb5f2c88 /src
parenta3d9da2fd4035607ac32e83d95f4eda8a3a51c8a (diff)
downloadbox64-c5f4820b4e33c20841497c674ddf959cdbb18b27.tar.gz
box64-c5f4820b4e33c20841497c674ddf959cdbb18b27.zip
Added A1/A3 opcodes ([DYNAREC] too)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_00.c13
-rwxr-xr-xsrc/emu/x64run.c13
2 files changed, 26 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_00.c b/src/dynarec/dynarec_arm64_00.c
index aca8ec5a..c271f1e2 100755
--- a/src/dynarec/dynarec_arm64_00.c
+++ b/src/dynarec/dynarec_arm64_00.c
@@ -1016,6 +1016,19 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             SET_DFNONE(x1);
             break;
 
+        case 0xA1:
+            INST_NAME("MOV EAX,Od");
+            u64 = F64;
+            MOV64x(x1, u64);
+            LDRxw_U12(xRAX, x1, 0);
+            break;
+
+        case 0xA3:
+            INST_NAME("MOV Od,EAX");
+            u64 = F64;
+            MOV64x(x1, u64);
+            STRxw_U12(xRAX, x1, 0);
+            break;
         case 0xA4:
             if(rep) {
                 INST_NAME("REP MOVSB");
diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index 237f7de1..70332399 100755
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -539,6 +539,19 @@ x64emurun:
             RESET_FLAGS(emu);
             break;
 
+        case 0xA1:                      /* MOV EAX,Od */
+            if(rex.w)
+                R_RAX = *(uint64_t*)F64;
+            else
+                R_EAX = *(uint32_t*)F64;
+            break;
+
+        case 0xA3:                      /* MOV Od,EAX */
+            if(rex.w)
+                *(uint64_t*)F64 = R_RAX;
+            else
+                *(uint32_t*)F64 = R_EAX;
+            break;
         case 0xA4:                      /* MOVSB */
             tmp8s = ACCESS_FLAG(F_DF)?-1:+1;
             tmp64u = (rep)?R_RCX:1L;