about summary refs log tree commit diff stats
path: root/src/dynarec/arm64/arm64_printer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dynarec/arm64/arm64_printer.c')
-rw-r--r--src/dynarec/arm64/arm64_printer.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/dynarec/arm64/arm64_printer.c b/src/dynarec/arm64/arm64_printer.c
index 2d28a831..0b043886 100644
--- a/src/dynarec/arm64/arm64_printer.c
+++ b/src/dynarec/arm64/arm64_printer.c
@@ -743,8 +743,12 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr)
                 snprintf(buff, sizeof(buff), "BFC %s, %d, %d", sf?Xt[Rd]:Wt[Rd], lsb, width);

             else

                 snprintf(buff, sizeof(buff), "BFI %s, %s, %d, %d", sf?Xt[Rd]:Wt[Rd], sf?Xt[Rn]:Wt[Rn], lsb, width);

-        } else

-            snprintf(buff, sizeof(buff), "BFXIL %s, %s, %d, %d", sf?Xt[Rd]:Wt[Rd], sf?Xt[Rn]:Wt[Rn], immr, imms-immr+1);

+        } else {

+            if(Rn==31 && immr==0)

+                snprintf(buff, sizeof(buff), "BFC %s, %d, %d", sf?Xt[Rd]:Wt[Rd], immr, imms-immr+1);

+            else

+                snprintf(buff, sizeof(buff), "BFXIL %s, %s, %d, %d", sf?Xt[Rd]:Wt[Rd], sf?Xt[Rn]:Wt[Rn], immr, imms-immr+1);

+        }

         return buff;

     }

     // ---- BRANCH / TEST

@@ -1643,6 +1647,11 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr)
         snprintf(buff, sizeof(buff), "%cQXTN%s V%d.%s, V%d.%s", a.U?'U':'S', a.Q?"2":"", Rd, Vd, Rn, Va);

         return buff;

     }

+    if(isMask(opcode, "01U11110ff100001010010nnnnnddddd", &a)) {

+        const char Z[] = {'B', 'H', 'S', 'D', '?'};

+        snprintf(buff, sizeof(buff), "SQXT%sN %c%d, %c%d", a.U?"U":"", Z[sf], Rn, Z[sf+1], Rm);

+        return buff;

+    }

 

     // (S/U)SSHL(2) / (U/S)XTL(2)

     if(isMask(opcode, "0QU011110hhhhiii101001nnnnnddddd", &a)) {