about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-10-27 17:00:16 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-10-27 17:07:04 +0200
commit32fc932813a4afab3da693e3ed0980778be8855e (patch)
tree4a67f23f42225b9a7df84e55076959f76cfb7b4b /src
parent8a471d4d1122c0fe8e36207227b74b69f2866fc6 (diff)
downloadbox64-32fc932813a4afab3da693e3ed0980778be8855e.tar.gz
box64-32fc932813a4afab3da693e3ed0980778be8855e.zip
[ARM64_DYNAREC] Added LDR/STR SIMD printer
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/arm64_printer.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/dynarec/arm64/arm64_printer.c b/src/dynarec/arm64/arm64_printer.c
index 11191d60..4a889a28 100644
--- a/src/dynarec/arm64/arm64_printer.c
+++ b/src/dynarec/arm64/arm64_printer.c
@@ -1052,7 +1052,30 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr)
         if(!offset)

             snprintf(buff, sizeof(buff), "%s %c%d, [%s]", op?"STR":"LDR", s, Rt, XtSp[Rn]);

         else

-            snprintf(buff, sizeof(buff), "%s %c%d, [%s, %d]", op?"STR":"LDR", s, Rt, XtSp[Rn], offset);

+            snprintf(buff, sizeof(buff), "%s %c%d, [%s, 0x%x]", op?"STR":"LDR", s, Rt, XtSp[Rn], offset);

+        return buff;

+    }

+    if(isMask(opcode, "ss111100cc1mmmmmoooS10nnnnnttttt", &a)) {

+        char s = '?';

+        int size=imms;

+        int op=0;

+        if(size==0 && opc==1) {s='B';}

+        else if(size==1 && opc==1) {s='H';}

+        else if(size==2 && opc==1) {s='S';}

+        else if(size==3 && opc==1) {s='D';}

+        else if(size==0 && opc==3) {s='Q'; size = 4;}

+        else if(size==0 && opc==0) {s='B'; op=1;}

+        else if(size==1 && opc==0) {s='H'; op=1;}

+        else if(size==2 && opc==0) {s='S'; op=1;}

+        else if(size==3 && opc==0) {s='D'; op=1;}

+        else if(size==0 && opc==2) {s='Q'; op=1; size = 4;}

+

+        const char* extend[] = {"?0", "?1", "UXTW", "LSL", "?4", "?5", "SXTW", "SXTX"};

+        int amount = size*a.S;

+        if(option==3 && !amount)

+            snprintf(buff, sizeof(buff), "%s %c%d, [%s, %s]", op?"STR":"LDR", s, Rt, XtSp[Rn], ((option&1)==0)?Wt[Rm]:Xt[Rm]);

+        else

+            snprintf(buff, sizeof(buff), "%s %c%d, [%s, %s, %s %d]", op?"STR":"LDR", s, Rt, XtSp[Rn], ((option&1)==0)?Wt[Rm]:Xt[Rm], extend[option], amount);

         return buff;

     }