about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-10-28 15:10:20 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-10-28 15:10:20 +0200
commita1666986c64d45b0e1fb5ae7e2bc5e6229f9a596 (patch)
tree44dc49f9abe56734306c7cfce38649a861ec6e90 /src
parentb669177c834219b154fe7cc4cdde085697e58c04 (diff)
downloadbox64-a1666986c64d45b0e1fb5ae7e2bc5e6229f9a596.tar.gz
box64-a1666986c64d45b0e1fb5ae7e2bc5e6229f9a596.zip
[DYNAREC] Added (F2/F3) AD ocpodes
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_00.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c
index f3f2f960..71c8ca6e 100755
--- a/src/dynarec/arm64/dynarec_arm64_00.c
+++ b/src/dynarec/arm64/dynarec_arm64_00.c
@@ -1303,6 +1303,26 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             }
             break;
 
+        case 0xAD:
+            if(rep) {
+                INST_NAME("REP LODSD");
+            } else {
+                INST_NAME("LODSD");
+            }
+            LDRxw_U12(xRAX, xRSI, 0);
+            BFIw(x2, xFlags, F_DF, 1);
+            if(rex.w) {
+                MOV32w(x1, 8);
+            } else {
+                MOV32w(x1, 4);
+            }
+            EORxw_REG_LSL(x1, x1, x2, rex.w?63:31);
+            if(rep) {
+                MULxw(x1, x1, xRCX);
+                EORw_REG(xRCX, xRCX, xRCX);
+            }
+            ADDx_REG(xRSI, xRSI, x1);
+            break;
         case 0xAE:
             switch(rep) {
             case 1: