about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-04-22 10:03:24 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-04-22 10:03:24 +0200
commitdfaa6896c1fed449f995feeff13998da42f4af43 (patch)
tree5aaccb9c36d70ba78e52cf8774ad5bde6fa6612f /src
parentb64e6bdbbaafe2fbfe1680d532263698d33b2d48 (diff)
downloadbox64-dfaa6896c1fed449f995feeff13998da42f4af43.tar.gz
box64-dfaa6896c1fed449f995feeff13998da42f4af43.zip
[ARM64_PRINTER] Added SHL printer
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/arm64_printer.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/dynarec/arm64/arm64_printer.c b/src/dynarec/arm64/arm64_printer.c
index f9866570..8e975c63 100644
--- a/src/dynarec/arm64/arm64_printer.c
+++ b/src/dynarec/arm64/arm64_printer.c
@@ -1576,6 +1576,17 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr)
             snprintf(buff, sizeof(buff), "%cSHLL%s V%d.%s, V%d.%s, #%d", a.U?'U':'S', a.Q?"2":"", Rd, Va, Rn, Vd, sh);

         return buff;

     }

+    if(isMask(opcode, "0Q0011110hhhhiii010101nnnnnddddd", &a) && (a.h != 0b1000)) {

+        const char* Y[] = {"8B", "16B", "4H", "8H", "2S", "4S", "??", "2D"};

+        int sz = 3;

+        if((a.h&0b1111)==0b0001) sz=0;

+        else if((a.h&0b1110)==0b0010) sz=1;

+        else if((a.h&0b1100)==0b0100) sz=2;

+        int sh=(((a.h)<<3)|(imm)) - (8<<sz);

+        const char* Vd = Y[(sz<<1)|a.Q];

+        snprintf(buff, sizeof(buff), "SHL%s V%d.%s, V%d.%s, #%d", a.Q?"Q":"", Rd, Vd, Rn, Vd, sh);

+        return buff;

+    }

 

     // DUP

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