aubinator: Make gen_disasm_disassemble handle split sends
authorSirisha Gandikota <Sirisha.Gandikota@intel.com>
Tue, 13 Sep 2016 23:19:30 +0000 (16:19 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 13 Sep 2016 23:32:39 +0000 (16:32 -0700)
Skylake adds new SENDS and SENDSC opcodes, which should be
handled in the send-with-EOT check. Make an is_send() helper
that checks if the opcode is SEND/SENDC/SENDS/SENDSC (Ken)

v2: Make is_send() much more crispier, Mix declaration and
code to make the code compact (Ken)

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

index 7e5a7cb05e4e87c40378f7f5a876d02d87f89fa3..89c711b1d3fbeb43e7dbd1be5b7cd1efdcee4872 100644 (file)
@@ -35,6 +35,15 @@ struct gen_disasm {
     struct gen_device_info devinfo;
 };
 
+static bool
+is_send(uint32_t opcode)
+{
+   return (opcode == BRW_OPCODE_SEND  ||
+           opcode == BRW_OPCODE_SENDC ||
+           opcode == BRW_OPCODE_SENDS ||
+           opcode == BRW_OPCODE_SENDSC );
+}
+
 void
 gen_disasm_disassemble(struct gen_disasm *disasm, void *assembly, int start,
                        int end, FILE *out)
@@ -74,14 +83,10 @@ gen_disasm_disassemble(struct gen_disasm *disasm, void *assembly, int start,
       brw_disassemble_inst(out, devinfo, insn, compacted);
 
       /* Simplistic, but efficient way to terminate disasm */
-      if (brw_inst_opcode(devinfo, insn) == BRW_OPCODE_SEND ||
-          brw_inst_opcode(devinfo, insn) == BRW_OPCODE_SENDC) {
-         if (brw_inst_eot(devinfo, insn))
-            break;
-      }
-
-      if (brw_inst_opcode(devinfo, insn) == 0)
+      uint32_t opcode = brw_inst_opcode(devinfo, insn);
+      if (opcode == 0 || (is_send(opcode) && brw_inst_eot(devinfo, insn))) {
          break;
+      }
    }
 }