diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-04-03 22:32:00 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-04-03 22:32:00 +0200 |
| commit | b91a95ee49d6be8449a2cef5cffbe7d70370ef10 (patch) | |
| tree | 305fc830cd0efdd273f9450f71c9128551e77ef5 /src | |
| parent | 0eb682a95bad00431a5d415cb64edd893d578329 (diff) | |
| download | box64-b91a95ee49d6be8449a2cef5cffbe7d70370ef10.tar.gz box64-b91a95ee49d6be8449a2cef5cffbe7d70370ef10.zip | |
[DYNAREC] A few more printer on litteral LDR
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/arm64_printer.c | 14 |
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"}; |