about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-04-03 22:32:00 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-04-03 22:32:00 +0200
commitb91a95ee49d6be8449a2cef5cffbe7d70370ef10 (patch)
tree305fc830cd0efdd273f9450f71c9128551e77ef5
parent0eb682a95bad00431a5d415cb64edd893d578329 (diff)
downloadbox64-b91a95ee49d6be8449a2cef5cffbe7d70370ef10.tar.gz
box64-b91a95ee49d6be8449a2cef5cffbe7d70370ef10.zip
[DYNAREC] A few more printer on litteral LDR
-rwxr-xr-xsrc/dynarec/arm64_printer.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/dynarec/arm64_printer.c b/src/dynarec/arm64_printer.c
index ac29d0a9..43d84daa 100755
--- a/src/dynarec/arm64_printer.c
+++ b/src/dynarec/arm64_printer.c
@@ -180,10 +180,22 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr)
     }

     if(isMask(opcode, "0x011000iiiiiiiiiiiiiiiiiiittttt", &a)) {

         int size = ((opcode>>30)&1)?3:2;

-        int offset = signExtend(imm, 9)<<size;

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

         snprintf(buff, sizeof(buff), "LDR %s, [#%+d]\t;%p", (size==2)?Wt[Rt]:Xt[Rt], offset, (void*)(addr+offset));

         return buff;

     }

+    if(isMask(opcode, "10011000iiiiiiiiiiiiiiiiiiittttt", &a)) {

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

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

+        return buff;

+    }

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

+        int size = ((opcode>>30)&1)?3:2;

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

+        const char* Y[] = {"S", "D", "Q", "?"};

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

+        return buff;

+    }

     if(isMask(opcode, "1x111000011mmmmmoooS10nnnnnttttt", &a)) {

         int size = (opcode>>30)&3;

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