summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/panfrost/midgard/disassemble.c
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2019-02-17 22:05:36 +0000
committerAlyssa Rosenzweig <[email protected]>2019-02-21 07:07:39 +0000
commit813bb34fd8986408c479417372f078836e43990e (patch)
tree2e042ae4915415399bfe981188f5dda98cc7e473 /src/gallium/drivers/panfrost/midgard/disassemble.c
parent2c7470951764045a0f37876cc86daf7285d47a7c (diff)
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]>
Diffstat (limited to 'src/gallium/drivers/panfrost/midgard/disassemble.c')
-rw-r--r--src/gallium/drivers/panfrost/midgard/disassemble.c13
1 files changed, 7 insertions, 6 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(" ");