about summary refs log tree commit diff stats
path: root/src/dynarec/arm64_printer.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-16 16:37:37 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-16 16:37:37 +0100
commit551542f99a2bcd690f19e1bb17ac16172feef583 (patch)
tree2619575ab420a80d4de109833f0e1cb550d434ab /src/dynarec/arm64_printer.c
parent1e5bfcdbcde5878cbe19770d5b3183e631e6c795 (diff)
downloadbox64-551542f99a2bcd690f19e1bb17ac16172feef583.tar.gz
box64-551542f99a2bcd690f19e1bb17ac16172feef583.zip
[DYNAREC] Added 85 opcode
Diffstat (limited to 'src/dynarec/arm64_printer.c')
-rwxr-xr-xsrc/dynarec/arm64_printer.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/dynarec/arm64_printer.c b/src/dynarec/arm64_printer.c
index 56dfd5c3..2a66f553 100755
--- a/src/dynarec/arm64_printer.c
+++ b/src/dynarec/arm64_printer.c
@@ -258,6 +258,31 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr)
         return buff;

     }

     // ---- LOGIC

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

+        int i = (a.N<<12)|(imms<<6)|immr;

+        if(sf==0 && a.N==1)

+            snprintf(buff, sizeof(buff), "invalid ANDS %s, %s, 0x%x", Wt[Rd], Wt[Rn], i);

+        else if(Rd==31)

+            snprintf(buff, sizeof(buff), "TST %s, 0x%x", sf?Xt[Rn]:Wt[Rn], i);

+        else

+            snprintf(buff, sizeof(buff), "ANDS %s, %s, 0x%x", sf?Xt[Rd]:Wt[Rd], sf?Xt[Rn]:Wt[Rn], i);

+        return buff;

+    }

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

+        const char* shifts[] = { "LSL", "LSR", "ASR", "ROR" };

+        if(shift==0 && imm==0) {

+            if(Rd==31)

+                snprintf(buff, sizeof(buff), "TST %s, %s", sf?Xt[Rn]:Wt[Rn], sf?Xt[Rm]:Wt[Rm]);

+            else

+                snprintf(buff, sizeof(buff), "ANDS %s, %s, %s", sf?Xt[Rd]:Wt[Rd], sf?Xt[Rn]:Wt[Rn], sf?Xt[Rm]:Wt[Rm]);

+        } else {

+            if(Rd==31)

+                snprintf(buff, sizeof(buff), "TST %s, %s, %s %d", sf?Xt[Rn]:Wt[Rn], sf?Xt[Rm]:Wt[Rm], shifts[shift], imm);

+            else

+                snprintf(buff, sizeof(buff), "ANDS %s, %s, %s, %s %d", sf?Xt[Rd]:Wt[Rd], sf?Xt[Rn]:Wt[Rn], sf?Xt[Rm]:Wt[Rm], shifts[shift], imm);

+        }

+        return buff;

+    }

 

     // ---- SHIFT

     if(isMask(opcode, "f10100110Nrrrrrrssssssnnnnnddddd", &a)) {