aubinator: Remove bogus "end" parameter in gen_disasm_disassemble()
authorSirisha Gandikota <Sirisha.Gandikota@intel.com>
Tue, 13 Sep 2016 23:19:31 +0000 (16:19 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 13 Sep 2016 23:32:42 +0000 (16:32 -0700)
Earlier, the loop pretends to loop over instructions from "start" to "end",
but the callers always pass 8192 for end, which is some huge bogus
value. The real loop termination condition is send-with-EOT or 0. (Ken)

Signed-off-by: Sirisha Gandikota <Sirisha.Gandikota@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/intel/tools/aubinator.c
src/intel/tools/disasm.c
src/intel/tools/gen_disasm.h

index 89d29f288fa22dff4689e8d4cb403f81fa978fef..fad8aaa27bcedb780816765881be4e80d6db7a69 100644 (file)
@@ -303,7 +303,7 @@ handle_media_interface_descriptor_load(struct gen_spec *spec, uint32_t *p)
       }
 
       insns = (struct brw_instruction *) (gtt + start);
-      gen_disasm_disassemble(disasm, insns, 0, 8192, stdout);
+      gen_disasm_disassemble(disasm, insns, 0, stdout);
 
       dump_samplers(spec, descriptors[3] & ~0x1f);
       dump_binding_table(spec, descriptors[4] & ~0x1f);
@@ -401,7 +401,7 @@ handle_3dstate_vs(struct gen_spec *spec, uint32_t *p)
              instruction_base, start);
 
       insns = (struct brw_instruction *) (gtt + instruction_base + start);
-      gen_disasm_disassemble(disasm, insns, 0, 8192, stdout);
+      gen_disasm_disassemble(disasm, insns, 0, stdout);
    }
 }
 
@@ -425,7 +425,7 @@ handle_3dstate_hs(struct gen_spec *spec, uint32_t *p)
              instruction_base, start);
 
       insns = (struct brw_instruction *) (gtt + instruction_base + start);
-      gen_disasm_disassemble(disasm, insns, 0, 8192, stdout);
+      gen_disasm_disassemble(disasm, insns, 0, stdout);
    }
 }
 
@@ -519,21 +519,21 @@ handle_3dstate_ps(struct gen_spec *spec, uint32_t *p)
    printf("  Kernel[0] %s\n", k0);
    if (k0 != unused) {
       insns = (struct brw_instruction *) (gtt + start);
-      gen_disasm_disassemble(disasm, insns, 0, 8192, stdout);
+      gen_disasm_disassemble(disasm, insns, 0, stdout);
    }
 
    start = instruction_base + (p[k1_offset] & mask);
    printf("  Kernel[1] %s\n", k1);
    if (k1 != unused) {
       insns = (struct brw_instruction *) (gtt + start);
-      gen_disasm_disassemble(disasm, insns, 0, 8192, stdout);
+      gen_disasm_disassemble(disasm, insns, 0, stdout);
    }
 
    start = instruction_base + (p[k2_offset] & mask);
    printf("  Kernel[2] %s\n", k2);
    if (k2 != unused) {
       insns = (struct brw_instruction *) (gtt + start);
-      gen_disasm_disassemble(disasm, insns, 0, 8192, stdout);
+      gen_disasm_disassemble(disasm, insns, 0, stdout);
    }
 }
 
index 89c711b1d3fbeb43e7dbd1be5b7cd1efdcee4872..2b51424742d10f178bdb70c95dc9107bf2aa4929 100644 (file)
@@ -45,13 +45,15 @@ is_send(uint32_t opcode)
 }
 
 void
-gen_disasm_disassemble(struct gen_disasm *disasm, void *assembly, int start,
-                       int end, FILE *out)
+gen_disasm_disassemble(struct gen_disasm *disasm, void *assembly,
+                       int start, FILE *out)
 {
    struct gen_device_info *devinfo = &disasm->devinfo;
    bool dump_hex = false;
+   int offset = start;
 
-   for (int offset = start; offset < end;) {
+   /* This loop exits when send-with-EOT or when opcode is 0 */
+   while (true) {
       brw_inst *insn = assembly + offset;
       brw_inst uncompacted;
       bool compacted = brw_inst_cmpt_control(devinfo, insn);
index af6654f3c33f1d235c760669b1e65dc8ec0e5736..24b56c9a8e1ad98cf84af8d8c3830da9e1aa020d 100644 (file)
@@ -28,7 +28,7 @@ struct gen_disasm;
 
 struct gen_disasm *gen_disasm_create(int pciid);
 void gen_disasm_disassemble(struct gen_disasm *disasm,
-                            void *assembly, int start, int end, FILE *out);
+                            void *assembly, int start, FILE *out);
 
 void gen_disasm_destroy(struct gen_disasm *disasm);