diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-04-22 10:03:24 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-04-22 10:03:24 +0200 |
| commit | dfaa6896c1fed449f995feeff13998da42f4af43 (patch) | |
| tree | 5aaccb9c36d70ba78e52cf8774ad5bde6fa6612f /src | |
| parent | b64e6bdbbaafe2fbfe1680d532263698d33b2d48 (diff) | |
| download | box64-dfaa6896c1fed449f995feeff13998da42f4af43.tar.gz box64-dfaa6896c1fed449f995feeff13998da42f4af43.zip | |
[ARM64_PRINTER] Added SHL printer
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/arm64_printer.c | 11 |
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)) { |