diff options
author | Sirisha Gandikota <[email protected]> | 2016-09-13 16:19:30 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2016-09-13 16:32:39 -0700 |
commit | 1ab92d80a8771ac7145d06a9b7983eecc0beaba0 (patch) | |
tree | 84d3609d145937ccd98ee489af79d1a06b42cbaf | |
parent | 5d2440532f8ffe80faa9b818fa0c1abff312486f (diff) |
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 <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r-- | src/intel/tools/disasm.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/intel/tools/disasm.c b/src/intel/tools/disasm.c index 7e5a7cb05e4..89c711b1d3f 100644 --- a/src/intel/tools/disasm.c +++ b/src/intel/tools/disasm.c @@ -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; + } } } |