diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-12-21 12:31:25 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-12-21 12:33:22 +0100 |
| commit | 3b71ba6090f3b69a3e8927e04b60889ffab47368 (patch) | |
| tree | 9bb6a57e7331a35522cac385ac2916d008bab381 | |
| parent | 9fc46972337a91dc77ecff84fe62996b802a6352 (diff) | |
| download | box64-3b71ba6090f3b69a3e8927e04b60889ffab47368.tar.gz box64-3b71ba6090f3b69a3e8927e04b60889ffab47368.zip | |
[ARM64_DYNAREC] Improved DMB/DSB printer
| -rw-r--r-- | src/dynarec/arm64/arm64_printer.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/dynarec/arm64/arm64_printer.c b/src/dynarec/arm64/arm64_printer.c index b7f269fd..05bc35e7 100644 --- a/src/dynarec/arm64/arm64_printer.c +++ b/src/dynarec/arm64/arm64_printer.c @@ -1713,14 +1713,26 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr) return buff; } - // DMB ISH + // DMB if(isMask(opcode, "11010101000000110011nnnn10111111", &a)) { - snprintf(buff, sizeof(buff), "DMB %s", (Rn==0b1011)?"ISH":"???"); + const char* barrier[] = { + "???", "???", "???", "???", // 0-3 + "???", "???", "???", "???", // 4-7 + "???", "ISHLD", "ISHST", "ISH", // 8-11 + "???", "LD", "ST", "SY" // 12-15 + }; + snprintf(buff, sizeof(buff), "DMB %s", barrier[Rn]); return buff; } - // DSB ISH/ISHST + // DSB if(isMask(opcode, "11010101000000110011nnnn10011111", &a)) { - snprintf(buff, sizeof(buff), "DSB %s", (Rn==0b1011)?"ISH":((Rn==0b1010)?"ISHST":"???")); + const char* barrier[] = { + "???", "???", "???", "???", // 0-3 + "???", "???", "???", "???", // 4-7 + "???", "ISHLD", "ISHST", "ISH", // 8-11 + "???", "LD", "ST", "SY" // 12-15 + }; + snprintf(buff, sizeof(buff), "DSB %s", barrier[Rn]); return buff; } |