summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2019-02-18 04:29:20 +0000
committerAlyssa Rosenzweig <[email protected]>2019-02-21 07:09:06 +0000
commit705723e6bef61b3937d5a4928e58b63d4c70f18c (patch)
tree891fd9b480277ddcf90c97c43a24af675dda5786 /src
parent779e140b1aeeb4592c6e8c573d344ba3dcbd6872 (diff)
panfrost: Verify and print brx condition in disasm
The condition code in extended branches is repeated 8 times for unclear reasons; accordingly, the code would be disassembled as "unknown5555", "unknownAAAA", etc. This patch correctly masks off the lower two bits to find the true code to print, verifying that the code is repeated as believed to be necessary (providing some assurance for compiler quality and an assert trip in case we encounter a shader in the wild that breaks the convention). Signed-off-by: Alyssa Rosenzweig <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/panfrost/midgard/disassemble.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/gallium/drivers/panfrost/midgard/disassemble.c b/src/gallium/drivers/panfrost/midgard/disassemble.c
index 7e5c5803f75..66d32d942c4 100644
--- a/src/gallium/drivers/panfrost/midgard/disassemble.c
+++ b/src/gallium/drivers/panfrost/midgard/disassemble.c
@@ -478,7 +478,16 @@ print_extended_branch_writeout_field(uint8_t *words)
printf("brx.");
print_branch_op(br.op);
- print_branch_cond(br.cond);
+
+ /* Condition repeated 8 times in all known cases. Check this. */
+
+ unsigned cond = br.cond & 0x3;
+
+ for (unsigned i = 0; i < 16; i += 2) {
+ assert(((br.cond >> i) & 0x3) == cond);
+ }
+
+ print_branch_cond(cond);
if (br.unknown)
printf(".unknown%d", br.unknown);