about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/arm64_printer.c20
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;

     }