diff options
Diffstat (limited to 'src')
| -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; } |