diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-22 11:53:56 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-22 11:53:56 +0100 |
| commit | 5cc73fdf401a74871ecb1f355660bbfc1dda30c5 (patch) | |
| tree | 25bf419464001aa5c2196573ff0968ddf75296de /src/dynarec/arm64_printer.c | |
| parent | 3cfd4c8ec2b018245b46331133fbe61fbed03785 (diff) | |
| download | box64-5cc73fdf401a74871ecb1f355660bbfc1dda30c5.tar.gz box64-5cc73fdf401a74871ecb1f355660bbfc1dda30c5.zip | |
[DYNAREC] Added F0 B1 opcode (and change LDAXR/STLXR to LDXR/STXR for eXclusive access)
Diffstat (limited to 'src/dynarec/arm64_printer.c')
| -rwxr-xr-x | src/dynarec/arm64_printer.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/dynarec/arm64_printer.c b/src/dynarec/arm64_printer.c index 103e6aff..fbd1740e 100755 --- a/src/dynarec/arm64_printer.c +++ b/src/dynarec/arm64_printer.c @@ -284,6 +284,14 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr) return buff; } + if(isMask(opcode, "ff0010000L0sssss011111nnnnnttttt", &a)) { + if(a.L) + snprintf(buff, sizeof(buff), "LDXR%s %s, [%s]", (sf==0)?"B":((sf==1)?"H":""), (sf==2)?Wt[Rt]:Xt[Rt], XtSp[Rn]); + else + snprintf(buff, sizeof(buff), "STXR%s %s, %s, [%s]", (sf==0)?"B":((sf==1)?"H":""), (sf==2)?Wt[Rs]:Xt[Rs], (sf==2)?Wt[Rt]:Xt[Rt], XtSp[Rn]); + return buff; + } + // --- MOV (REGS: see Logic MOV==ORR, MVN==ORN) if(isMask(opcode, "f10100101wwiiiiiiiiiiiiiiiiddddd", &a)) { if(!hw) @@ -652,6 +660,11 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr) snprintf(buff, sizeof(buff), "CBZ %s, #%+d\t; %p", Xt[Rt], offset, (void*)(addr + offset)); return buff; } + if(isMask(opcode, "f0110101iiiiiiiiiiiiiiiiiiittttt", &a)) { + int offset = signExtend(imm, 19)<<2; + snprintf(buff, sizeof(buff), "CBNZ %s, #%+d\t; %p", Xt[Rt], offset, (void*)(addr + offset)); + return buff; + } if(isMask(opcode, "f0011010100mmmmmcccc00nnnnnddddd", &a)) { snprintf(buff, sizeof(buff), "CSEL %s, %s, %s, %s", sf?Xt[Rd]:Wt[Rd], sf?Xt[Rn]:Wt[Rn], sf?Xt[Rm]:Wt[Rm], conds[cond]); return buff; |