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-22 11:53:56 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-22 11:53:56 +0100
commit5cc73fdf401a74871ecb1f355660bbfc1dda30c5 (patch)
tree25bf419464001aa5c2196573ff0968ddf75296de /src/dynarec/arm64_printer.c
parent3cfd4c8ec2b018245b46331133fbe61fbed03785 (diff)
downloadbox64-5cc73fdf401a74871ecb1f355660bbfc1dda30c5.tar.gz
box64-5cc73fdf401a74871ecb1f355660bbfc1dda30c5.zip
[DYNAREC] Added F0 B1 opcode (and change LDAXR/STLXR to LDXR/STXR for eXclusive access)
Diffstat (limited to 'src/dynarec/arm64_printer.c')
-rwxr-xr-xsrc/dynarec/arm64_printer.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/dynarec/arm64_printer.c b/src/dynarec/arm64_printer.c
index 103e6aff..fbd1740e 100755
--- a/src/dynarec/arm64_printer.c
+++ b/src/dynarec/arm64_printer.c
@@ -284,6 +284,14 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr)
         return buff;

     }

 

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

+        if(a.L)

+            snprintf(buff, sizeof(buff), "LDXR%s %s, [%s]", (sf==0)?"B":((sf==1)?"H":""), (sf==2)?Wt[Rt]:Xt[Rt], XtSp[Rn]);

+        else

+            snprintf(buff, sizeof(buff), "STXR%s %s, %s, [%s]", (sf==0)?"B":((sf==1)?"H":""), (sf==2)?Wt[Rs]:Xt[Rs], (sf==2)?Wt[Rt]:Xt[Rt], XtSp[Rn]);

+        return buff;

+    }

+

     // --- MOV (REGS: see Logic MOV==ORR, MVN==ORN)

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

         if(!hw)

@@ -652,6 +660,11 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr)
         snprintf(buff, sizeof(buff), "CBZ %s, #%+d\t; %p", Xt[Rt], offset, (void*)(addr + offset));

         return buff;

     }

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

+        int offset = signExtend(imm, 19)<<2;

+        snprintf(buff, sizeof(buff), "CBNZ %s, #%+d\t; %p", Xt[Rt], offset, (void*)(addr + offset));

+        return buff;

+    }

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

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

         return buff;