about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-12-09 13:16:13 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-12-09 13:16:13 +0100
commit96f5108a37ac9f0e4e9d4fa9c4763386c43dfe2b (patch)
tree4abf9b5439cba44fca5c22ef9d5d1e490e40de19 /src
parent3eeb10c0a60ea0106d6201dda80fd771f3d4e17a (diff)
downloadbox64-96f5108a37ac9f0e4e9d4fa9c4763386c43dfe2b.tar.gz
box64-96f5108a37ac9f0e4e9d4fa9c4763386c43dfe2b.zip
[INTERPRETER] Added 64bits 67 A1 opcode ([ARM64_DYNAREC] Too)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_67.c10
-rw-r--r--src/emu/x64run67.c7
2 files changed, 17 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_67.c b/src/dynarec/arm64/dynarec_arm64_67.c
index a4cc6f6e..6855bf58 100644
--- a/src/dynarec/arm64/dynarec_arm64_67.c
+++ b/src/dynarec/arm64/dynarec_arm64_67.c
@@ -38,6 +38,7 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
     int32_t i32;

     int64_t j64, i64;

     int16_t i16;

+    uint64_t u64;

     int cacheupd = 0;

     int lock;

     int v0, v1, s0;

@@ -1196,6 +1197,15 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             }

             break;

 

+        case 0xA1:

+            INST_NAME("MOV EAX,Od");

+            u64 = F32;

+            MOV64z(x1, u64);

+            lock=isLockAddress(u64);

+            SMREADLOCK(lock);

+            LDRxw_U12(xRAX, x1, 0);

+            break;

+

         case 0xA9:

             INST_NAME("TEST EAX, Id");

             SETFLAGS(X_ALL, SF_SET_PENDING);

diff --git a/src/emu/x64run67.c b/src/emu/x64run67.c
index ae5366fb..5d0eea0f 100644
--- a/src/emu/x64run67.c
+++ b/src/emu/x64run67.c
@@ -318,6 +318,13 @@ uintptr_t Run67(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr)
             GD->q[0] = ((uintptr_t)ED)&0xffffffff;

         break;

 

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

+        if(rex.w)

+            R_RAX = *(uint64_t*)(uintptr_t)F32;

+        else

+            R_RAX = *(uint32_t*)(uintptr_t)F32;

+        break;

+

     case 0xC1:                      /* GRP2 Ed,Ib */

         nextop = F8;

         GETED32(1);