diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-10-27 17:00:16 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-10-27 17:07:04 +0200 |
| commit | 32fc932813a4afab3da693e3ed0980778be8855e (patch) | |
| tree | 4a67f23f42225b9a7df84e55076959f76cfb7b4b /src | |
| parent | 8a471d4d1122c0fe8e36207227b74b69f2866fc6 (diff) | |
| download | box64-32fc932813a4afab3da693e3ed0980778be8855e.tar.gz box64-32fc932813a4afab3da693e3ed0980778be8855e.zip | |
[ARM64_DYNAREC] Added LDR/STR SIMD printer
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/arm64_printer.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/dynarec/arm64/arm64_printer.c b/src/dynarec/arm64/arm64_printer.c index 11191d60..4a889a28 100644 --- a/src/dynarec/arm64/arm64_printer.c +++ b/src/dynarec/arm64/arm64_printer.c @@ -1052,7 +1052,30 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr) if(!offset) snprintf(buff, sizeof(buff), "%s %c%d, [%s]", op?"STR":"LDR", s, Rt, XtSp[Rn]); else - snprintf(buff, sizeof(buff), "%s %c%d, [%s, %d]", op?"STR":"LDR", s, Rt, XtSp[Rn], offset); + snprintf(buff, sizeof(buff), "%s %c%d, [%s, 0x%x]", op?"STR":"LDR", s, Rt, XtSp[Rn], offset); + return buff; + } + if(isMask(opcode, "ss111100cc1mmmmmoooS10nnnnnttttt", &a)) { + char s = '?'; + int size=imms; + int op=0; + if(size==0 && opc==1) {s='B';} + else if(size==1 && opc==1) {s='H';} + else if(size==2 && opc==1) {s='S';} + else if(size==3 && opc==1) {s='D';} + else if(size==0 && opc==3) {s='Q'; size = 4;} + else if(size==0 && opc==0) {s='B'; op=1;} + else if(size==1 && opc==0) {s='H'; op=1;} + else if(size==2 && opc==0) {s='S'; op=1;} + else if(size==3 && opc==0) {s='D'; op=1;} + else if(size==0 && opc==2) {s='Q'; op=1; size = 4;} + + const char* extend[] = {"?0", "?1", "UXTW", "LSL", "?4", "?5", "SXTW", "SXTX"}; + int amount = size*a.S; + if(option==3 && !amount) + snprintf(buff, sizeof(buff), "%s %c%d, [%s, %s]", op?"STR":"LDR", s, Rt, XtSp[Rn], ((option&1)==0)?Wt[Rm]:Xt[Rm]); + else + snprintf(buff, sizeof(buff), "%s %c%d, [%s, %s, %s %d]", op?"STR":"LDR", s, Rt, XtSp[Rn], ((option&1)==0)?Wt[Rm]:Xt[Rm], extend[option], amount); return buff; } |