Module: Mesa
Branch: master
Commit: 813bb34fd8986408c479417372f078836e43990e
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=813bb34fd8986408c479417372f078836e43990e

Author: Alyssa Rosenzweig <[email protected]>
Date:   Sun Feb 17 22:05:36 2019 +0000

panfrost: Rectify doubleplusungood extended branch

Midgard features "compact branches" and "extended branches", i.e.
corresponds to short jumps and far jumps. The form of the extended
branch was previously incorrect in the ISA headers; this patch corrects
it and updates the disassembler (simultaneous to preserve
bisectability).

Additionally, we fix some a corner case in the disassembly of extended
branches, and we now prefix extended branches with "brx", to visually
differentiate from compact branches prefixed with "br".

Signed-off-by: Alyssa Rosenzweig <[email protected]>

---

 src/gallium/drivers/panfrost/midgard/disassemble.c | 13 +++++++------
 src/gallium/drivers/panfrost/midgard/midgard.h     |  3 +--
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/gallium/drivers/panfrost/midgard/disassemble.c 
b/src/gallium/drivers/panfrost/midgard/disassemble.c
index afde3fdbbcd..7e5c5803f75 100644
--- a/src/gallium/drivers/panfrost/midgard/disassemble.c
+++ b/src/gallium/drivers/panfrost/midgard/disassemble.c
@@ -373,6 +373,10 @@ static void
 print_branch_op(int op)
 {
         switch (op) {
+        case midgard_jmp_writeout_op_branch_uncond:
+                printf("uncond.");
+                break;
+
         case midgard_jmp_writeout_op_branch_cond:
                 printf("cond.");
                 break;
@@ -412,6 +416,7 @@ print_branch_cond(int cond)
                 break;
 
         default:
+                printf("unk%X", cond);
                 break;
         }
 }
@@ -470,17 +475,13 @@ print_extended_branch_writeout_field(uint8_t *words)
         midgard_branch_extended br;
         memcpy((char *) &br, (char *) words, sizeof(br));
 
-        printf("br.");
+        printf("brx.");
 
         print_branch_op(br.op);
         print_branch_cond(br.cond);
 
-        /* XXX: This can't be right */
         if (br.unknown)
-                printf(".unknown%d\n", br.unknown);
-
-        if (br.zero)
-                printf(".zero%d\n", br.zero);
+                printf(".unknown%d", br.unknown);
 
         printf(" ");
 
diff --git a/src/gallium/drivers/panfrost/midgard/midgard.h 
b/src/gallium/drivers/panfrost/midgard/midgard.h
index b6cd38a5cd0..04e195a635d 100644
--- a/src/gallium/drivers/panfrost/midgard/midgard.h
+++ b/src/gallium/drivers/panfrost/midgard/midgard.h
@@ -231,8 +231,7 @@ __attribute__((__packed__))
         midgard_jmp_writeout_op op : 3; /* == branch_cond */
         unsigned dest_tag : 4; /* tag of branch destination */
         unsigned unknown : 2;
-        signed offset : 7;
-        unsigned zero : 16;
+        signed offset : 23;
         unsigned cond : 16;
 }
 midgard_branch_extended;

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to