about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-12-21 12:31:25 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-12-21 12:33:22 +0100
commit3b71ba6090f3b69a3e8927e04b60889ffab47368 (patch)
tree9bb6a57e7331a35522cac385ac2916d008bab381
parent9fc46972337a91dc77ecff84fe62996b802a6352 (diff)
downloadbox64-3b71ba6090f3b69a3e8927e04b60889ffab47368.tar.gz
box64-3b71ba6090f3b69a3e8927e04b60889ffab47368.zip
[ARM64_DYNAREC] Improved DMB/DSB printer
-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;

     }