about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-07-05 22:28:19 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-07-05 22:28:19 +0200
commit7f390a5499b209dd5c47be51c944fe8e83b4a66c (patch)
tree8aba8da11e6d437137336e23b56c30342954b3be /src
parentb9f38bcefd8b9e913ddad4be87779444d637365d (diff)
downloadbox64-7f390a5499b209dd5c47be51c944fe8e83b4a66c.tar.gz
box64-7f390a5499b209dd5c47be51c944fe8e83b4a66c.zip
[DYNAREC] Added F0 09 opcode (for CB15)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/dynarec_arm64_f0.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_f0.c b/src/dynarec/dynarec_arm64_f0.c
index b6c3c650..9a731b81 100644
--- a/src/dynarec/dynarec_arm64_f0.c
+++ b/src/dynarec/dynarec_arm64_f0.c
@@ -96,6 +96,24 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             }
             break;
 
+        case 0x09:
+            INST_NAME("LOCK OR Ed, Gd");
+            SETFLAGS(X_ALL, SF_SET_PENDING);
+            nextop = F8;
+            GETGD;
+            if(MODREG) {
+                ed = xRAX+(nextop&7)+(rex.b<<3);
+                emit_or32(dyn, ninst, rex, ed, gd, x3, x4);
+            } else {
+                addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, 0, 0, rex, 0, 0);
+                MARKLOCK;
+                LDAXRxw(x1, wback);
+                emit_or32(dyn, ninst, rex, x1, gd, x3, x4);
+                STLXRxw(x3, x1, wback);
+                CBNZx_MARKLOCK(x3);
+            }
+            break;
+
         case 0x0F:
             nextop = F8;
             switch(nextop) {