diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-16 15:45:02 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-16 15:45:02 +0100 |
| commit | c1b6cb73027b61b5a511a6221d596f213ea6a328 (patch) | |
| tree | 189c66aaae58b0a0e4c284c188e643ca3610f232 /src/dynarec/arm64_printer.c | |
| parent | 70f50037845e2d368e5f47197bed28bcecf8dc85 (diff) | |
| download | box64-c1b6cb73027b61b5a511a6221d596f213ea6a328.tar.gz box64-c1b6cb73027b61b5a511a6221d596f213ea6a328.zip | |
[DYNAREC] Added 8B opcode
Diffstat (limited to 'src/dynarec/arm64_printer.c')
| -rwxr-xr-x | src/dynarec/arm64_printer.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/dynarec/arm64_printer.c b/src/dynarec/arm64_printer.c index dcfa3032..56dfd5c3 100755 --- a/src/dynarec/arm64_printer.c +++ b/src/dynarec/arm64_printer.c @@ -81,6 +81,8 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr) #define shift a.h #define hw a.w #define cond a.c + #define immr a.r + #define imms a.s // --- LDR / STR if(isMask(opcode, "1x111000010iiiiiiiii01nnnnnttttt", &a)) { int size = (opcode>>30)&3; @@ -257,6 +259,26 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr) } // ---- LOGIC + // ---- SHIFT + if(isMask(opcode, "f10100110Nrrrrrrssssssnnnnnddddd", &a)) { + if(sf && imms!=0b111111 && imms+1==immr) + snprintf(buff, sizeof(buff), "LSL %s, %s, %d", Xt[Rd], Xt[Rn], 63-imms); + else if(!sf && imms!=0b011111 && imms+1==immr) + snprintf(buff, sizeof(buff), "LSL %s, %s, %d", Wt[Rd], Wt[Rn], 31-imms); + else if(sf && imms==0b111111) + snprintf(buff, sizeof(buff), "LSR %s, %s, %d", Xt[Rd], Xt[Rn], immr); + else if(!sf && imms==0b011111) + snprintf(buff, sizeof(buff), "LSR %s, %s, %d", Wt[Rd], Wt[Rn], immr); + else if(immr==0 && imms==0b000111) + snprintf(buff, sizeof(buff), "UXTB %s, %s", sf?Xt[Rd]:Wt[Rd], sf?Xt[Rn]:Wt[Rn]); + else if(immr==0 && imms==0b001111) + snprintf(buff, sizeof(buff), "UXTH %s, %s", sf?Xt[Rd]:Wt[Rd], sf?Xt[Rn]:Wt[Rn]); + else + snprintf(buff, sizeof(buff), "UBFM %s, %s, %d, %d", sf?Xt[Rd]:Wt[Rd], sf?Xt[Rn]:Wt[Rn], immr, imms); + + return buff; + } + // ---- BRANCH / TEST if(isMask(opcode, "1101011000011111000000nnnnn00000", &a)) { snprintf(buff, sizeof(buff), "BR %s", Xt[Rn]); |