aubinator: Make gen_disasm_disassemble handle split sends

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>
This commit is contained in:
Sirisha Gandikota 2016-09-13 16:19:30 -07:00 committed by Kenneth Graunke
parent 5d2440532f
commit 1ab92d80a8

View 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;
}
}
}