about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <seebastien.chev@gmail.com>2023-08-15 14:52:23 +0200
committerptitSeb <seebastien.chev@gmail.com>2023-08-15 14:52:23 +0200
commitca759d2c8f6d9bffd4ed6ddf657afdaf75a288c2 (patch)
treefb9c8164d954bf47d9612c5d84116eff6bb6fed2 /src
parent53a59f593eef9e1bfe84582ad0a589b5e9aec1c2 (diff)
downloadbox64-ca759d2c8f6d9bffd4ed6ddf657afdaf75a288c2.tar.gz
box64-ca759d2c8f6d9bffd4ed6ddf657afdaf75a288c2.zip
[ARM64_DYNAREC] Fixed F2/F3 AD and added AC (should help #924 a bit)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_00.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c
index 5c718b8d..63aee428 100644
--- a/src/dynarec/arm64/dynarec_arm64_00.c
+++ b/src/dynarec/arm64/dynarec_arm64_00.c
@@ -1545,7 +1545,25 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                 ADDx_REG(xRDI, xRDI, x3);
             }
             break;
-
+        case 0xAC:
+            if(rep) {
+                INST_NAME("REP LODSB");
+            } else {
+                INST_NAME("LODSB");
+            }
+            GETDIR(x1, 1);
+            if(rep) {
+                CBZx_NEXT(xRCX);
+                MARK;
+            }
+            LDRB_U12(x2, xRSI, 0);
+            ADDx_REG(xRSI, xRSI, x1);
+            if(rep) {
+                SUBx_U12(xRCX, xRCX, 1);
+                CBNZx_MARK(xRCX);
+            }
+            BFIx(xRAX, x2, 0, 8);
+            break;
         case 0xAD:
             if(rep) {
                 INST_NAME("REP LODSD");
@@ -1560,7 +1578,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             LDRxw_U12(xRAX, xRSI, 0);
             ADDx_REG(xRSI, xRSI, x1);
             if(rep) {
-                ADDx_U12(xRCX, xRCX, 1);
+                SUBx_U12(xRCX, xRCX, 1);
                 CBNZx_MARK(xRCX);
             }
             break;