summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/freedreno/ir3/disasm-a3xx.c
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2017-10-30 19:24:59 -0400
committerRob Clark <[email protected]>2017-11-12 12:28:59 -0500
commit6da513007474ddee48edf256e435a0fa7a65335d (patch)
treeb9627059f5b8055f60d7c2c4d2eae737471c0a86 /src/gallium/drivers/freedreno/ir3/disasm-a3xx.c
parent33f5f63b8fc157fa2fd2a142783f31db987c9d55 (diff)
freedreno/ir3: add cat7 instructions
Needed for memory and execution barriers. Signed-off-by: Rob Clark <[email protected]>
Diffstat (limited to 'src/gallium/drivers/freedreno/ir3/disasm-a3xx.c')
-rw-r--r--src/gallium/drivers/freedreno/ir3/disasm-a3xx.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/gallium/drivers/freedreno/ir3/disasm-a3xx.c b/src/gallium/drivers/freedreno/ir3/disasm-a3xx.c
index 4685ed6deae..96b34649c37 100644
--- a/src/gallium/drivers/freedreno/ir3/disasm-a3xx.c
+++ b/src/gallium/drivers/freedreno/ir3/disasm-a3xx.c
@@ -714,6 +714,23 @@ static void print_instr_cat6(instr_t *instr)
}
}
+static void print_instr_cat7(instr_t *instr)
+{
+ instr_cat7_t *cat7 = &instr->cat7;
+
+ if (cat7->g)
+ printf(".g");
+ if (cat7->l)
+ printf(".l");
+
+ if (_OPC(7, cat7->opc) == OPC_FENCE) {
+ if (cat7->r)
+ printf(".r");
+ if (cat7->w)
+ printf(".w");
+ }
+}
+
/* size of largest OPC field of all the instruction categories: */
#define NOPC_BITS 6
@@ -879,6 +896,8 @@ static const struct opc_info {
OPC(6, OPC_LDC, ldc),
OPC(6, OPC_LDLV, ldlv),
+ OPC(7, OPC_BAR, bar),
+ OPC(7, OPC_FENCE, fence),
#undef OPC
};
@@ -909,7 +928,7 @@ static void print_instr(uint32_t *dwords, int level, int n)
if (instr->sync)
printf("(sy)");
- if (instr->ss && (instr->opc_cat <= 4))
+ if (instr->ss && ((instr->opc_cat <= 4) || (instr->opc_cat == 7)))
printf("(ss)");
if (instr->jmp_tgt)
printf("(jp)");