i965/disasm: Disassemble the compaction control bit.
authorMatt Turner <mattst88@gmail.com>
Thu, 1 May 2014 18:20:25 +0000 (11:20 -0700)
committerMatt Turner <mattst88@gmail.com>
Thu, 15 May 2014 22:45:40 +0000 (15:45 -0700)
brw_disasm doesn't disassemble compacted instructions, so we uncompact
before disassembling them which would unset the compaction control bit.
Instead pass it as a separate argument.

Acked-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_clip.c
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_disasm.c
src/mesa/drivers/dri/i965/brw_eu.c
src/mesa/drivers/dri/i965/brw_eu_compact.c
src/mesa/drivers/dri/i965/brw_gs.c
src/mesa/drivers/dri/i965/brw_sf.c
src/mesa/drivers/dri/i965/brw_state_dump.c
src/mesa/drivers/dri/i965/test_eu_compact.c

index c32bf5c0e7cb8b0bdc496fc0767361b7dde81458..d1815f2216e7d58b1737ba1d002341d71750b40c 100644 (file)
@@ -121,7 +121,7 @@ static void compile_clip_prog( struct brw_context *brw,
       fprintf(stderr, "clip:\n");
       for (i = 0; i < program_size / sizeof(struct brw_instruction); i++)
         brw_disasm(stderr, &((struct brw_instruction *)program)[i],
-                   brw->gen);
+                   brw->gen, false);
       fprintf(stderr, "\n");
    }
 
index a9adbf2cecc72054a48b11d2ecb0f7322b7bd9e9..9e459cd8dba37842be2e52a91344ac117dc32d1c 100644 (file)
@@ -1573,7 +1573,7 @@ void brw_fs_alloc_reg_sets(struct intel_screen *screen);
 void brw_vec4_alloc_reg_set(struct intel_screen *screen);
 
 /* brw_disasm.c */
-int brw_disasm (FILE *file, struct brw_instruction *inst, int gen);
+int brw_disasm (FILE *file, struct brw_instruction *inst, int gen, bool is_compacted);
 
 /* brw_vs.c */
 gl_clip_plane *brw_select_clip_planes(struct gl_context *ctx);
index e54172c6c78977ae6f6cb4b7c6d34ab2e3eafc50..b9654a3420cc9d5b7db36fca02510ab32317ff24 100644 (file)
@@ -167,6 +167,11 @@ static const char * const saturate[2] = {
     [1] = ".sat"
 };
 
+static const char * const cmpt_ctrl[2] = {
+   [0] = "",
+   [1] = "compacted"
+};
+
 static const char * const accwr[2] = {
     [0] = "",
     [1] = "AccWrEnable"
@@ -1114,7 +1119,7 @@ static int qtr_ctrl(FILE *file, struct brw_instruction *inst)
     return 0;
 }
 
-int brw_disasm (FILE *file, struct brw_instruction *inst, int gen)
+int brw_disasm (FILE *file, struct brw_instruction *inst, int gen, bool is_compacted)
 {
     int        err = 0;
     int space = 0;
@@ -1136,6 +1141,7 @@ int brw_disasm (FILE *file, struct brw_instruction *inst, int gen)
 
     err |= print_opcode (file, inst->header.opcode);
     err |= control (file, "saturate", saturate, inst->header.saturate, NULL);
+
     err |= control (file, "debug control", debug_ctrl, inst->header.debug_control, NULL);
 
     if (inst->header.opcode == BRW_OPCODE_MATH) {
@@ -1449,6 +1455,7 @@ int brw_disasm (FILE *file, struct brw_instruction *inst, int gen)
            }
        }
 
+       err |= control (file, "compaction control", cmpt_ctrl, is_compacted, &space);
        err |= control (file, "thread control", thread_ctrl, inst->header.thread_control, &space);
        if (gen >= 6)
            err |= control (file, "acc write control", accwr, inst->header.acc_wr_control, &space);
index bb840291f25e71889c210894627f3974a8d5df87..15105c2944c1673c3e75fa9c9f659e0f1980acd7 100644 (file)
@@ -265,6 +265,7 @@ brw_dump_compile(struct brw_compile *p, FILE *out, int start, int end)
    for (int offset = start; offset < end;) {
       struct brw_instruction *insn = store + offset;
       struct brw_instruction uncompacted;
+      bool compacted = insn->header.cmpt_control;
       fprintf(out, "0x%08x: ", offset);
 
       if (insn->header.cmpt_control) {
@@ -289,6 +290,6 @@ brw_dump_compile(struct brw_compile *p, FILE *out, int start, int end)
         offset += 16;
       }
 
-      brw_disasm(out, insn, p->brw->gen);
+      brw_disasm(out, insn, p->brw->gen, compacted);
    }
 }
index fbee942aa313eb750523c82f6980a11776d15f00..54b29fdcd16026a43b0daf4db37a71538b48f4d2 100644 (file)
@@ -585,10 +585,10 @@ void brw_debug_compact_uncompact(struct brw_context *brw,
            brw->gen);
 
    fprintf(stderr, "  before: ");
-   brw_disasm(stderr, orig, brw->gen);
+   brw_disasm(stderr, orig, brw->gen, true);
 
    fprintf(stderr, "  after:  ");
-   brw_disasm(stderr, uncompacted, brw->gen);
+   brw_disasm(stderr, uncompacted, brw->gen, false);
 
    uint32_t *before_bits = (uint32_t *)orig;
    uint32_t *after_bits = (uint32_t *)uncompacted;
index ddfb296f2c14a6504c963c181e45b80c56da27a6..866d2988e37c8ccd7ce903a86e74db02f8bb5a3d 100644 (file)
@@ -138,7 +138,7 @@ static void compile_ff_gs_prog(struct brw_context *brw,
       fprintf(stderr, "gs:\n");
       for (i = 0; i < program_size / sizeof(struct brw_instruction); i++)
         brw_disasm(stderr, &((struct brw_instruction *)program)[i],
-                   brw->gen);
+                   brw->gen, false);
       fprintf(stderr, "\n");
     }
 
index 7714aaed9a26dace01dce8849307fab7826c17ed..61d308a3f8df3fd9b800576a58afcb6a5a6331d9 100644 (file)
@@ -118,7 +118,7 @@ static void compile_sf_prog( struct brw_context *brw,
       fprintf(stderr, "sf:\n");
       for (i = 0; i < program_size / sizeof(struct brw_instruction); i++)
         brw_disasm(stderr, &((struct brw_instruction *)program)[i],
-                   brw->gen);
+                   brw->gen, false);
       fprintf(stderr, "\n");
    }
 
index 40b5c65fb901471f3b21267e7daf362bbe0b3bc5..57dd2e77b9b2b17c9bda6a467dd4bdbb777f582c 100644 (file)
@@ -530,7 +530,7 @@ dump_prog_cache(struct brw_context *brw)
                    name,
                    data[i * 4], data[i * 4 + 1], data[i * 4 + 2], data[i * 4 + 3]);
 
-           brw_disasm(stderr, (void *)(data + i * 4), brw->gen);
+           brw_disasm(stderr, (void *)(data + i * 4), brw->gen, false);
         }
       }
    }
index 26bf77bf2cd3180769ef6a9736eda8d0cb6da447..8713918f81f74b29883e6d1603c9c204ea507914 100644 (file)
@@ -51,7 +51,7 @@ test_compact_instruction(struct brw_compile *p, struct brw_instruction src)
       if (memcmp(&unchanged, &dst, sizeof(dst))) {
         fprintf(stderr, "Failed to compact, but dst changed\n");
         fprintf(stderr, "  Instruction: ");
-        brw_disasm(stderr, &src, brw->gen);
+        brw_disasm(stderr, &src, brw->gen, false);
         return false;
       }
    }