about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-06-25 14:54:45 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-06-25 14:54:45 +0200
commit7e7db57369ede7be613f11ad726bbb2991e91982 (patch)
treeee1b0ec5c818306f1f32e73420cbd08eeb611964
parentdeb6fe8d7a56bcc829bd6bb984e2f40be2af0ab6 (diff)
downloadbox64-7e7db57369ede7be613f11ad726bbb2991e91982.tar.gz
box64-7e7db57369ede7be613f11ad726bbb2991e91982.zip
[32BITS][ARM64_DYNAREC] Added (F2/F3) 66 AD opcode
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_66.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_66.c b/src/dynarec/arm64/dynarec_arm64_66.c
index 21f906ce..e72d58d4 100755
--- a/src/dynarec/arm64/dynarec_arm64_66.c
+++ b/src/dynarec/arm64/dynarec_arm64_66.c
@@ -633,6 +633,29 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             }

             break;

 

+        case 0xAD:

+            if(rep) {

+                INST_NAME("REP LODSW");

+                CBZx_NEXT(xRCX);

+                TBNZ_MARK2(xFlags, F_DF);

+                MARK;   // Part with DF==0

+                LDRH_S9_postindex(xRAX, xRSI, 2);

+                SUBx_U12(xRCX, xRCX, 1);

+                CBNZx_MARK(xRCX);

+                B_NEXT_nocond;

+                MARK2;  // Part with DF==1

+                LDRH_S9_postindex(xRAX, xRSI, -2);

+                SUBx_U12(xRCX, xRCX, 1);

+                CBNZx_MARK2(xRCX);

+                // done

+            } else {

+                INST_NAME("STOSW");

+                GETDIR(x3, 2);

+                LDRH_U12(xRAX, xRSI, 0);

+                ADDx_REG(xRSI, xRSI, x3);

+            }

+            break;

+

         case 0xAF:

             switch(rep) {

             case 1: