about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-28 21:25:18 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-03-28 21:25:18 +0200
commit37795375b6ded5559725f93a531851bc0ad5965b (patch)
treef75cdd2194bfb6631305d7f6be4bf81f7fe05100 /src
parent903f9ddb41782221a6e4a248b4144af2b15f0d0d (diff)
downloadbox64-37795375b6ded5559725f93a531851bc0ad5965b.tar.gz
box64-37795375b6ded5559725f93a531851bc0ad5965b.zip
[DYNAREC] Added F0 29 opcode
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 ff1b8511..00402b04 100644
--- a/src/dynarec/dynarec_arm64_f0.c
+++ b/src/dynarec/dynarec_arm64_f0.c
@@ -215,6 +215,24 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             }
             break;
                     
+        case 0x29:
+            INST_NAME("LOCK SUB Ed, Gd");
+            SETFLAGS(X_ALL, SF_SET);
+            nextop = F8;
+            GETGD;
+            if(MODREG) {
+                ed = xRAX+(nextop&7)+(rex.b<<3);
+                emit_sub32(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_sub32(dyn, ninst, rex, x1, gd, x3, x4);
+                STLXRxw(x3, x1, wback);
+                CBNZx_MARKLOCK(x3);
+            }
+            break;
+
         case 0x81:
         case 0x83:
             nextop = F8;