i965/disasm: Properly disassemble jump targets on Gen4-5.
authorKenneth Graunke <kenneth@whitecape.org>
Sun, 29 Jun 2014 00:48:42 +0000 (17:48 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 30 Jun 2014 21:05:27 +0000 (14:05 -0700)
Previously, our dissasembly for flow control instructions looked like:

0x00000040: else(8)         ip          65540D     { align16 switch };

It didn't print InstCount properly for ELSE/ENDIF, and didn't even
attempt to disassemble PopCount.

Now it looks like:

0x00000040: else(8)         Jump: 4     Pop: 1     { align16 switch };

which is much more readable.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
src/mesa/drivers/dri/i965/brw_disasm.c

index 8966edaf89085466b5c60b1a1592d39d2ab42879..7773ad9be45535cef7693ec9faff6b01aa2fb24e 100644 (file)
@@ -1207,6 +1207,21 @@ brw_disassemble_inst(FILE *file, struct brw_context *brw, brw_inst *inst,
       } else {
          format(file, "JIP: %d", brw_inst_gen6_jump_count(brw, inst));
       }
+   } else if (brw->gen < 6 && (opcode == BRW_OPCODE_BREAK ||
+                               opcode == BRW_OPCODE_CONTINUE ||
+                               opcode == BRW_OPCODE_ELSE)) {
+      pad(file, 16);
+      format(file, "Jump: %d", brw_inst_gen4_jump_count(brw, inst));
+      pad(file, 32);
+      format(file, "Pop: %d", brw_inst_gen4_pop_count(brw, inst));
+   } else if (brw->gen < 6 && (opcode == BRW_OPCODE_IF ||
+                               opcode == BRW_OPCODE_IFF ||
+                               opcode == BRW_OPCODE_HALT)) {
+      pad(file, 16);
+      format(file, "Jump: %d", brw_inst_gen4_pop_count(brw, inst));
+   } else if (brw->gen < 6 && opcode == BRW_OPCODE_ENDIF) {
+      pad(file, 16);
+      format(file, "Pop: %d", brw_inst_gen4_pop_count(brw, inst));
    } else if (opcode == BRW_OPCODE_JMPI) {
       format(file, " %d", brw_inst_imm_d(brw, inst));
    } else if (opcode_descs[opcode].nsrc == 3) {