Patches' titles should have a prefix. These should likely be "i965: "
Also, I don't know what you mean by a label. The target of an unstructured jump? The commit message should explain and provide some background information. On Mon, Feb 13, 2017 at 3:25 AM, Lonnberg, Toni <[email protected]> wrote: > --- > src/intel/tools/aubinator.c | 48 ++---- > src/intel/tools/disasm.c | 63 ++++++-- > src/mesa/drivers/dri/i965/brw_context.h | 4 +- > src/mesa/drivers/dri/i965/brw_disasm.c | 193 > ++++++++++++++++--------- > src/mesa/drivers/dri/i965/brw_eu.c | 119 ++++++++++++--- > src/mesa/drivers/dri/i965/brw_eu.h | 11 ++ > src/mesa/drivers/dri/i965/brw_eu_compact.c | 4 +- > src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 8 +- > src/mesa/drivers/dri/i965/intel_debug.c | 1 + > src/mesa/drivers/dri/i965/intel_debug.h | 1 + > src/mesa/drivers/dri/i965/test_eu_compact.c | 2 +- > 11 files changed, 309 insertions(+), 145 deletions(-) > > diff --git a/src/intel/tools/aubinator.c b/src/intel/tools/aubinator.c > index e2bec8f..ed649fa 100644 > --- a/src/intel/tools/aubinator.c > +++ b/src/intel/tools/aubinator.c > @@ -42,6 +42,7 @@ > #include "decoder.h" > #include "intel_aub.h" > #include "gen_disasm.h" > +#include "brw_eu.h" > > /* Below is the only command missing from intel_aub.h in libdrm > * So, reuse intel_aub.h from libdrm and #define the > @@ -324,6 +325,7 @@ handle_media_interface_descriptor_load(struct gen_spec > *spec, uint32_t *p) > > descriptor_structure = > gen_spec_find_struct(spec, "INTERFACE_DESCRIPTOR_DATA"); > + Unrelated change. > if (descriptor_structure == NULL) { > printf("did not find INTERFACE_DESCRIPTOR_DATA info\n"); > return; > @@ -671,43 +673,10 @@ handle_load_register_imm(struct gen_spec *spec, > uint32_t *p) > > #define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0]) > > -#define STATE_BASE_ADDRESS 0x61010000 > - > -#define MEDIA_INTERFACE_DESCRIPTOR_LOAD 0x70020000 > - > -#define _3DSTATE_INDEX_BUFFER 0x780a0000 > -#define _3DSTATE_VERTEX_BUFFERS 0x78080000 > - > -#define _3DSTATE_VS 0x78100000 > -#define _3DSTATE_GS 0x78110000 > -#define _3DSTATE_HS 0x781b0000 > -#define _3DSTATE_DS 0x781d0000 > - > -#define _3DSTATE_CONSTANT_VS 0x78150000 > -#define _3DSTATE_CONSTANT_GS 0x78160000 > -#define _3DSTATE_CONSTANT_PS 0x78170000 > -#define _3DSTATE_CONSTANT_HS 0x78190000 > -#define _3DSTATE_CONSTANT_DS 0x781A0000 > - > -#define _3DSTATE_PS 0x78200000 > - > -#define _3DSTATE_BINDING_TABLE_POINTERS_VS 0x78260000 > -#define _3DSTATE_BINDING_TABLE_POINTERS_HS 0x78270000 > -#define _3DSTATE_BINDING_TABLE_POINTERS_DS 0x78280000 > -#define _3DSTATE_BINDING_TABLE_POINTERS_GS 0x78290000 > -#define _3DSTATE_BINDING_TABLE_POINTERS_PS 0x782a0000 > - > -#define _3DSTATE_SAMPLER_STATE_POINTERS_VS 0x782b0000 > -#define _3DSTATE_SAMPLER_STATE_POINTERS_GS 0x782e0000 > -#define _3DSTATE_SAMPLER_STATE_POINTERS_PS 0x782f0000 > - > -#define _3DSTATE_VIEWPORT_STATE_POINTERS_CC 0x78230000 > -#define _3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP 0x78210000 > -#define _3DSTATE_BLEND_STATE_POINTERS 0x78240000 > -#define _3DSTATE_CC_STATE_POINTERS 0x780e0000 > -#define _3DSTATE_SCISSOR_STATE_POINTERS 0x780f0000 > - > -#define _MI_LOAD_REGISTER_IMM 0x11000000 > +#define STATE_BASE_ADDRESS 0x6101 > +#define _3DSTATE_INDEX_BUFFER 0x780a > +#define _3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP 0x7821 > +#define _MI_LOAD_REGISTER_IMM 0x1100 What is going on here? This all seems to be unrelated to the patch? > > struct custom_handler { > uint32_t opcode; > @@ -808,8 +777,7 @@ parse_commands(struct gen_spec *spec, uint32_t *cmds, int > size, int engine) > } > > for (i = 0; i < ARRAY_LENGTH(custom_handlers); i++) { > - if (gen_group_get_opcode(inst) == > - custom_handlers[i].opcode) > + if (gen_group_get_opcode(inst) == (custom_handlers[i].opcode << > 16)) > custom_handlers[i].handle(spec, p); > } > } > @@ -1240,6 +1208,8 @@ int main(int argc, char *argv[]) > { NULL, 0, NULL, 0 } > }; > > + brw_process_intel_debug_variable(); > + > i = 0; > while ((c = getopt_long(argc, argv, "", aubinator_opts, &i)) != -1) { > switch (c) { > diff --git a/src/intel/tools/disasm.c b/src/intel/tools/disasm.c > index 4ac7b90..a8c3786 100644 > --- a/src/intel/tools/disasm.c > +++ b/src/intel/tools/disasm.c > @@ -49,40 +49,81 @@ gen_disasm_disassemble(struct gen_disasm *disasm, void > *assembly, > int start, FILE *out) > { > struct gen_device_info *devinfo = &disasm->devinfo; > - bool dump_hex = false; > + bool dump_hex = (INTEL_DEBUG & DEBUG_HEX) != 0; > int offset = start; > > + void *mem_ctx = ralloc_context(NULL); > + struct brw_label *root = NULL; > + > + if ((INTEL_DEBUG & DEBUG_DISASM) != 0) { > + while (true) { > + brw_inst *insn = assembly + offset; > + brw_inst uncompacted; > + > + bool compacted = brw_inst_cmpt_control(devinfo, insn); > + > + if (compacted) { > + brw_compact_inst *compacted = (void *)insn; > + brw_uncompact_instruction(devinfo, &uncompacted, compacted); > + insn = &uncompacted; > + } > + > + if (brw_has_uip(devinfo, brw_inst_opcode(devinfo, insn))) > + brw_create_label(&root, offset + brw_inst_uip(devinfo, insn), > mem_ctx); > + > + if (brw_has_jip(devinfo, brw_inst_opcode(devinfo, insn))) > + brw_create_label(&root, offset + brw_inst_jip(devinfo, insn), > mem_ctx); > + > + offset += compacted ? 8 : 16; > + > + uint32_t opcode = brw_inst_opcode(devinfo, insn); > + if (opcode == 0 || (is_send(opcode) && brw_inst_eot(devinfo, insn))) > { > + break; > + } Indentation is wrong here. > + } > + } > + > /* This loop exits when send-with-EOT or when opcode is 0 */ > + offset = start; > while (true) { > brw_inst *insn = assembly + offset; > brw_inst uncompacted; > + > + if (root != NULL) { > + const struct brw_label *label = brw_find_label(root, offset); > + if (label != NULL) { > + fprintf(out, "\n_label%d:\n", label->number); > + } > + } > + > bool compacted = brw_inst_cmpt_control(devinfo, insn); > + > if (0) > fprintf(out, "0x%08x: ", offset); > > if (compacted) { > brw_compact_inst *compacted = (void *)insn; > + > if (dump_hex) { > fprintf(out, "0x%08x 0x%08x ", > - ((uint32_t *)insn)[1], > - ((uint32_t *)insn)[0]); > + ((uint32_t *)insn)[1], > + ((uint32_t *)insn)[0]); > } > > brw_uncompact_instruction(devinfo, &uncompacted, compacted); > insn = &uncompacted; > - offset += 8; > } else { > if (dump_hex) { > fprintf(out, "0x%08x 0x%08x 0x%08x 0x%08x ", > - ((uint32_t *)insn)[3], > - ((uint32_t *)insn)[2], > - ((uint32_t *)insn)[1], > - ((uint32_t *)insn)[0]); > + ((uint32_t *)insn)[3], > + ((uint32_t *)insn)[2], > + ((uint32_t *)insn)[1], > + ((uint32_t *)insn)[0]); Looks like just more stray changes? > } > - offset += 16; > } > > - brw_disassemble_inst(out, devinfo, insn, compacted); > + brw_disassemble_inst(out, devinfo, insn, compacted, offset, root); > + offset += compacted ? 8 : 16; > > /* Simplistic, but efficient way to terminate disasm */ > uint32_t opcode = brw_inst_opcode(devinfo, insn); > @@ -90,6 +131,8 @@ gen_disasm_disassemble(struct gen_disasm *disasm, void > *assembly, > break; > } > } > + > + ralloc_free(mem_ctx); > } > > struct gen_disasm * > diff --git a/src/mesa/drivers/dri/i965/brw_context.h > b/src/mesa/drivers/dri/i965/brw_context.h > index 01e651b..850d882 100644 > --- a/src/mesa/drivers/dri/i965/brw_context.h > +++ b/src/mesa/drivers/dri/i965/brw_context.h > @@ -154,6 +154,7 @@ struct brw_wm_prog_key; > struct brw_wm_prog_data; > struct brw_cs_prog_key; > struct brw_cs_prog_data; > +struct brw_label; > > enum brw_pipeline { > BRW_RENDER_PIPELINE, > @@ -1366,7 +1367,8 @@ void brw_vec4_alloc_reg_set(struct brw_compiler > *compiler); > > /* brw_disasm.c */ > int brw_disassemble_inst(FILE *file, const struct gen_device_info *devinfo, > - struct brw_inst *inst, bool is_compacted); > + struct brw_inst *inst, bool is_compacted, > + int offset, struct brw_label *label_root); > > /* brw_vs.c */ > gl_clip_plane *brw_select_clip_planes(struct gl_context *ctx); > diff --git a/src/mesa/drivers/dri/i965/brw_disasm.c > b/src/mesa/drivers/dri/i965/brw_disasm.c > index cd553b3..01c649c 100644 > --- a/src/mesa/drivers/dri/i965/brw_disasm.c > +++ b/src/mesa/drivers/dri/i965/brw_disasm.c > @@ -30,8 +30,8 @@ > #include "brw_inst.h" > #include "brw_eu.h" > > -static bool > -has_jip(const struct gen_device_info *devinfo, enum opcode opcode) > +bool > +brw_has_jip(const struct gen_device_info *devinfo, enum opcode opcode) > { > if (devinfo->gen < 6) > return false; > @@ -45,8 +45,8 @@ has_jip(const struct gen_device_info *devinfo, enum opcode > opcode) > opcode == BRW_OPCODE_HALT; > } > > -static bool > -has_uip(const struct gen_device_info *devinfo, enum opcode opcode) > +bool > +brw_has_uip(const struct gen_device_info *devinfo, enum opcode opcode) > { > if (devinfo->gen < 6) > return false; > @@ -1218,13 +1218,14 @@ brw_disassemble_imm(const struct gen_device_info > *devinfo, > brw_inst inst; > inst.data[0] = (((uint64_t) dw1) << 32) | ((uint64_t) dw0); > inst.data[1] = (((uint64_t) dw3) << 32) | ((uint64_t) dw2); > - return brw_disassemble_inst(stderr, devinfo, &inst, false); > + return brw_disassemble_inst(stderr, devinfo, &inst, false, 0, NULL); > } > #endif > > int > brw_disassemble_inst(FILE *file, const struct gen_device_info *devinfo, > - brw_inst *inst, bool is_compacted) > + brw_inst *inst, bool is_compacted, > + int offset, struct brw_label *label_root) > { > int err = 0; > int space = 0; > @@ -1289,18 +1290,53 @@ brw_disassemble_inst(FILE *file, const struct > gen_device_info *devinfo, > if (opcode == BRW_OPCODE_SEND && devinfo->gen < 6) > format(file, " %"PRIu64, brw_inst_base_mrf(devinfo, inst)); > > - if (has_uip(devinfo, opcode)) { > + if (brw_has_uip(devinfo, opcode)) { > /* Instructions that have UIP also have JIP. */ > - pad(file, 16); > - format(file, "JIP: %d", brw_inst_jip(devinfo, inst)); > - pad(file, 32); > - format(file, "UIP: %d", brw_inst_uip(devinfo, inst)); > - } else if (has_jip(devinfo, opcode)) { > - pad(file, 16); > - if (devinfo->gen >= 7) { > + if (label_root != NULL) { > + const struct brw_label *branch = NULL; > + > + pad(file, 16); > + branch = brw_find_label(label_root, offset + brw_inst_jip(devinfo, > inst)); > + if (branch != NULL) > + format(file, "_label%d", branch->number); > + else > + format(file, "JIP: %d", brw_inst_jip(devinfo, inst)); > + > + pad(file, 32); > + branch = brw_find_label(label_root, offset + brw_inst_uip(devinfo, > inst)); > + if (branch != NULL) > + format(file, "_label%d", branch->number); > + else > + format(file, "UIP: %d", brw_inst_uip(devinfo, inst)); > + } else { > + pad(file, 16); > format(file, "JIP: %d", brw_inst_jip(devinfo, inst)); > + pad(file, 32); > + format(file, "UIP: %d", brw_inst_uip(devinfo, inst)); > + } > + } else if (brw_has_jip(devinfo, opcode)) { > + if (label_root != NULL) { > + const struct brw_label *branch = NULL; > + int jip; > + > + if (devinfo->gen >= 7) > + jip = brw_inst_jip(devinfo, inst); > + else > + jip = brw_inst_gen6_jump_count(devinfo, inst); > + > + pad(file, 16); > + branch = brw_find_label(label_root, offset + jip); > + if (branch != NULL) > + format(file, "_label%d", branch->number); > + else > + format(file, "JIP: %d", jip); Please use braces for nested control flow. > } else { > - format(file, "JIP: %d", brw_inst_gen6_jump_count(devinfo, inst)); > + pad(file, 16); > + if (devinfo->gen >= 7) { > + format(file, "JIP: %d", brw_inst_jip(devinfo, inst)); > + } else { > + format(file, "JIP: %d", brw_inst_gen6_jump_count(devinfo, inst)); > + } > } > } else if (devinfo->gen < 6 && (opcode == BRW_OPCODE_BREAK || > opcode == BRW_OPCODE_CONTINUE || > @@ -1347,27 +1383,77 @@ brw_disassemble_inst(FILE *file, const struct > gen_device_info *devinfo, > pad(file, 48); > err |= src1(file, devinfo, inst); > } > - } > > - if (opcode == BRW_OPCODE_SEND || opcode == BRW_OPCODE_SENDC) { > - enum brw_message_target sfid = brw_inst_sfid(devinfo, inst); > + if (opcode == BRW_OPCODE_SEND || opcode == BRW_OPCODE_SENDC) { > + pad(file, 64); > + format(file, "0x%"PRIx64, brw_inst_sfid(devinfo, inst)); > > - if (brw_inst_src1_reg_file(devinfo, inst) != BRW_IMMEDIATE_VALUE) { > - /* show the indirect descriptor source */ > - pad(file, 48); > + pad(file, 80); > err |= src1(file, devinfo, inst); > } > + } > + > + pad(file, 64); > + if (opcode != BRW_OPCODE_NOP && opcode != BRW_OPCODE_NENOP) { > + string(file, "{"); > + space = 1; > + err |= control(file, "access mode", access_mode, > + brw_inst_access_mode(devinfo, inst), &space); > + if (devinfo->gen >= 6) { > + err |= control(file, "write enable control", wectrl, > + brw_inst_mask_control(devinfo, inst), &space); > + } else { > + err |= control(file, "mask control", mask_ctrl, > + brw_inst_mask_control(devinfo, inst), &space); > + } > + err |= control(file, "dependency control", dep_ctrl, > + ((brw_inst_no_dd_check(devinfo, inst) << 1) | > + brw_inst_no_dd_clear(devinfo, inst)), &space); > + > + if (devinfo->gen >= 6) > + err |= qtr_ctrl(file, devinfo, inst); > + else { Use braces on the if statement. > + if (brw_inst_qtr_control(devinfo, inst) == > BRW_COMPRESSION_COMPRESSED && > + desc && desc->ndst > 0 && > + brw_inst_dst_reg_file(devinfo, inst) == > BRW_MESSAGE_REGISTER_FILE && > + brw_inst_dst_da_reg_nr(devinfo, inst) & BRW_MRF_COMPR4) { > + format(file, " compr4"); > + } else { > + err |= control(file, "compression control", compr_ctrl, > + brw_inst_qtr_control(devinfo, inst), &space); > + } > + } > + > + err |= control(file, "compaction", cmpt_ctrl, is_compacted, &space); > + err |= control(file, "thread control", thread_ctrl, > + brw_inst_thread_control(devinfo, inst), &space); > + if (has_branch_ctrl(devinfo, opcode)) { > + err |= control(file, "branch ctrl", branch_ctrl, > + brw_inst_branch_control(devinfo, inst), &space); > + } else if (devinfo->gen >= 6) { > + err |= control(file, "acc write control", accwr, > + brw_inst_acc_wr_control(devinfo, inst), &space); > + } > + if (opcode == BRW_OPCODE_SEND || opcode == BRW_OPCODE_SENDC) > + err |= control(file, "end of thread", end_of_thread, > + brw_inst_eot(devinfo, inst), &space); > + if (space) > + string(file, " "); > + string(file, "}"); > + } > + string(file, ";"); > + > + if (opcode == BRW_OPCODE_SEND || opcode == BRW_OPCODE_SENDC) { > + enum brw_message_target sfid = brw_inst_sfid(devinfo, inst); > > - newline(file); > - pad(file, 16); > space = 0; > > - fprintf(file, " "); > + fprintf(file, " // "); > err |= control(file, "SFID", devinfo->gen >= 6 ? gen6_sfid : gen4_sfid, > sfid, &space); > > > - if (brw_inst_src1_reg_file(devinfo, inst) != BRW_IMMEDIATE_VALUE) { > + if ((opcode == BRW_OPCODE_SEND || opcode == BRW_OPCODE_SENDC) && > (brw_inst_src1_reg_file(devinfo, inst) != BRW_IMMEDIATE_VALUE)) { > format(file, " indirect"); > } else { > switch (sfid) { > @@ -1590,56 +1676,19 @@ brw_disassemble_inst(FILE *file, const struct > gen_device_info *devinfo, > format(file, "mlen %"PRIu64, brw_inst_mlen(devinfo, inst)); > format(file, " rlen %"PRIu64, brw_inst_rlen(devinfo, inst)); > } > - } > - pad(file, 64); > - if (opcode != BRW_OPCODE_NOP && opcode != BRW_OPCODE_NENOP) { > - string(file, "{"); > - space = 1; > - err |= control(file, "access mode", access_mode, > - brw_inst_access_mode(devinfo, inst), &space); > - if (devinfo->gen >= 6) { > - err |= control(file, "write enable control", wectrl, > - brw_inst_mask_control(devinfo, inst), &space); > - } else { > - err |= control(file, "mask control", mask_ctrl, > - brw_inst_mask_control(devinfo, inst), &space); > - } > - err |= control(file, "dependency control", dep_ctrl, > - ((brw_inst_no_dd_check(devinfo, inst) << 1) | > - brw_inst_no_dd_clear(devinfo, inst)), &space); > - > - if (devinfo->gen >= 6) > - err |= qtr_ctrl(file, devinfo, inst); > - else { > - if (brw_inst_qtr_control(devinfo, inst) == > BRW_COMPRESSION_COMPRESSED && > - desc && desc->ndst > 0 && > - brw_inst_dst_reg_file(devinfo, inst) == > BRW_MESSAGE_REGISTER_FILE && > - brw_inst_dst_da_reg_nr(devinfo, inst) & BRW_MRF_COMPR4) { > - format(file, " compr4"); > - } else { > - err |= control(file, "compression control", compr_ctrl, > - brw_inst_qtr_control(devinfo, inst), &space); > + } else { > + if (brw_inst_src0_reg_file(devinfo, inst) == BRW_IMMEDIATE_VALUE) { > + if (brw_inst_src0_reg_type(devinfo, inst) == BRW_HW_REG_TYPE_F) { > + fprintf(file, " // %-g", brw_inst_imm_f(devinfo, inst)); > + } else if (brw_inst_src0_reg_type(devinfo, inst) == > GEN8_HW_REG_IMM_TYPE_DF) { > + fprintf(file, " // %-g", brw_inst_imm_df(devinfo, inst)); > } > + } else if (brw_inst_src1_reg_file(devinfo, inst) == > BRW_IMMEDIATE_VALUE && > + brw_inst_src1_reg_type(devinfo, inst) == BRW_HW_REG_TYPE_F) { > + fprintf(file, " // %-g", brw_inst_imm_f(devinfo, inst)); > } > - > - err |= control(file, "compaction", cmpt_ctrl, is_compacted, &space); > - err |= control(file, "thread control", thread_ctrl, > - brw_inst_thread_control(devinfo, inst), &space); > - if (has_branch_ctrl(devinfo, opcode)) { > - err |= control(file, "branch ctrl", branch_ctrl, > - brw_inst_branch_control(devinfo, inst), &space); > - } else if (devinfo->gen >= 6) { > - err |= control(file, "acc write control", accwr, > - brw_inst_acc_wr_control(devinfo, inst), &space); > - } > - if (opcode == BRW_OPCODE_SEND || opcode == BRW_OPCODE_SENDC) > - err |= control(file, "end of thread", end_of_thread, > - brw_inst_eot(devinfo, inst), &space); > - if (space) > - string(file, " "); > - string(file, "}"); > } > - string(file, ";"); > + > newline(file); > return err; > } > diff --git a/src/mesa/drivers/dri/i965/brw_eu.c > b/src/mesa/drivers/dri/i965/brw_eu.c > index 6a422bb..893de8b 100644 > --- a/src/mesa/drivers/dri/i965/brw_eu.c > +++ b/src/mesa/drivers/dri/i965/brw_eu.c > @@ -365,43 +365,126 @@ const unsigned *brw_get_program( struct brw_codegen *p, > return (const unsigned *)p->store; > } > > +const struct brw_label * > +brw_find_label(struct brw_label *root, int offset) { > + struct brw_label *curr = root; > + > + if (curr != NULL) > + { > + do { > + if (curr->offset == offset) > + return curr; > + > + curr = curr->next; > + } while (curr != NULL); > + } > + > + return curr; > +} > + > +void > +brw_create_label(struct brw_label **labels, int offset, void *mem_ctx) { > + if (*labels != NULL) { > + struct brw_label *curr = *labels; > + struct brw_label *prev; > + > + do { > + prev = curr; > + > + if (curr->offset == offset) > + return; > + > + curr = curr->next; > + } while (curr != NULL); > + > + curr = ralloc(mem_ctx, struct brw_label); > + curr->offset = offset; > + curr->number = prev->number + 1; > + curr->next = NULL; > + prev->next = curr; > + } else { > + struct brw_label *root = ralloc(mem_ctx, struct brw_label); > + root->number = 0; > + root->offset = offset; > + root->next = NULL; > + *labels = root; > + } > +} > + > void > brw_disassemble(const struct gen_device_info *devinfo, > void *assembly, int start, int end, FILE *out) > { > bool dump_hex = (INTEL_DEBUG & DEBUG_HEX) != 0; > > + void *mem_ctx = ralloc_context(NULL); > + struct brw_label *root = NULL; > + > + if ((INTEL_DEBUG & DEBUG_DISASM) != 0) { > + for (int offset = start; offset < end;) { > + brw_inst *insn = assembly + offset; > + brw_inst uncompacted; > + > + bool compacted = brw_inst_cmpt_control(devinfo, insn); > + > + if (compacted) { > + brw_compact_inst *compacted = (void *)insn; > + brw_uncompact_instruction(devinfo, &uncompacted, compacted); > + insn = &uncompacted; > + } > + > + if (brw_has_uip(devinfo, brw_inst_opcode(devinfo, insn))) > + brw_create_label(&root, offset + brw_inst_uip(devinfo, insn), > mem_ctx); > + > + if (brw_has_jip(devinfo, brw_inst_opcode(devinfo, insn))) > + brw_create_label(&root, offset + brw_inst_jip(devinfo, insn), > mem_ctx); > + > + offset += compacted ? 8 : 16; > + } > + } > + > for (int offset = start; offset < end;) { > brw_inst *insn = assembly + offset; > brw_inst uncompacted; > + > + if (root != NULL) { > + const struct brw_label *label = brw_find_label(root, offset); > + if (label != NULL) { > + fprintf(out, "\n_label%d:\n", label->number); > + } > + } > + > bool compacted = brw_inst_cmpt_control(devinfo, insn); > + > if (0) > fprintf(out, "0x%08x: ", offset); > > if (compacted) { > brw_compact_inst *compacted = (void *)insn; > - if (dump_hex) { > - fprintf(out, "0x%08x 0x%08x ", > - ((uint32_t *)insn)[1], > - ((uint32_t *)insn)[0]); > - } > - > - brw_uncompact_instruction(devinfo, &uncompacted, compacted); > - insn = &uncompacted; > - offset += 8; > + > + if (dump_hex) { > + fprintf(out, "0x%08x 0x%08x ", > + ((uint32_t *)insn)[1], > + ((uint32_t *)insn)[0]); > + } > + > + brw_uncompact_instruction(devinfo, &uncompacted, compacted); > + insn = &uncompacted; > } else { > - if (dump_hex) { > - fprintf(out, "0x%08x 0x%08x 0x%08x 0x%08x ", > - ((uint32_t *)insn)[3], > - ((uint32_t *)insn)[2], > - ((uint32_t *)insn)[1], > - ((uint32_t *)insn)[0]); > - } > - offset += 16; > + if (dump_hex) { > + fprintf(out, "0x%08x 0x%08x 0x%08x 0x%08x ", > + ((uint32_t *)insn)[3], > + ((uint32_t *)insn)[2], > + ((uint32_t *)insn)[1], > + ((uint32_t *)insn)[0]); Arguments are not indented properly. > + } > } > > - brw_disassemble_inst(out, devinfo, insn, compacted); > + brw_disassemble_inst(out, devinfo, insn, compacted, offset, root); > + offset += compacted ? 8 : 16; > } > + > + ralloc_free(mem_ctx); > } > > enum gen { > diff --git a/src/mesa/drivers/dri/i965/brw_eu.h > b/src/mesa/drivers/dri/i965/brw_eu.h > index c44896b..9f49eb7 100644 > --- a/src/mesa/drivers/dri/i965/brw_eu.h > +++ b/src/mesa/drivers/dri/i965/brw_eu.h > @@ -94,6 +94,12 @@ struct brw_codegen { > int loop_stack_array_size; > }; > > +struct brw_label { > + int offset; > + int number; > + struct brw_label *next; > +}; > + > void brw_pop_insn_state( struct brw_codegen *p ); > void brw_push_insn_state( struct brw_codegen *p ); > void brw_set_default_exec_size(struct brw_codegen *p, unsigned value); > @@ -114,6 +120,10 @@ void brw_set_default_acc_write_control(struct > brw_codegen *p, unsigned value); > > void brw_init_codegen(const struct gen_device_info *, struct brw_codegen *p, > void *mem_ctx); > +bool brw_has_jip(const struct gen_device_info *devinfo, enum opcode opcode); > +bool brw_has_uip(const struct gen_device_info *devinfo, enum opcode opcode); > +const struct brw_label *brw_find_label(struct brw_label *root, int offset); > +void brw_create_label(struct brw_label **labels, int offset, void *mem_ctx); > void brw_disassemble(const struct gen_device_info *devinfo, void *assembly, > int start, int end, FILE *out); > const unsigned *brw_get_program( struct brw_codegen *p, unsigned *sz ); > @@ -121,6 +131,7 @@ const unsigned *brw_get_program( struct brw_codegen *p, > unsigned *sz ); > brw_inst *brw_next_insn(struct brw_codegen *p, unsigned opcode); > void brw_set_dest(struct brw_codegen *p, brw_inst *insn, struct brw_reg > dest); > void brw_set_src0(struct brw_codegen *p, brw_inst *insn, struct brw_reg reg); > +void brw_set_src1(struct brw_codegen *p, brw_inst *insn, struct brw_reg reg); I see the prototype for brw_set_src1 is in an unexpected place in brw_eu.h. Moving it here would be fine, but not in this patch. > > void gen6_resolve_implied_move(struct brw_codegen *p, > struct brw_reg *src, > diff --git a/src/mesa/drivers/dri/i965/brw_eu_compact.c > b/src/mesa/drivers/dri/i965/brw_eu_compact.c > index 68321e7..d20c6d1 100644 > --- a/src/mesa/drivers/dri/i965/brw_eu_compact.c > +++ b/src/mesa/drivers/dri/i965/brw_eu_compact.c > @@ -1262,10 +1262,10 @@ void brw_debug_compact_uncompact(const struct > gen_device_info *devinfo, > devinfo->gen); > > fprintf(stderr, " before: "); > - brw_disassemble_inst(stderr, devinfo, orig, true); > + brw_disassemble_inst(stderr, devinfo, orig, true, 0, NULL); > > fprintf(stderr, " after: "); > - brw_disassemble_inst(stderr, devinfo, uncompacted, false); > + brw_disassemble_inst(stderr, devinfo, uncompacted, false, 0, NULL); > > uint32_t *before_bits = (uint32_t *)orig; > uint32_t *after_bits = (uint32_t *)uncompacted; > diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp > b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp > index 26ffbb1..79ff76b 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp > @@ -2101,8 +2101,12 @@ fs_generator::generate_code(const cfg_t *cfg, int > dispatch_width) > spill_count, fill_count, promoted_constants, before_size, > after_size, > 100.0f * (before_size - after_size) / before_size); > > - dump_assembly(p->store, annotation.ann_count, annotation.ann, > - p->devinfo); > + if ((INTEL_DEBUG & DEBUG_DISASM) != 0) > + brw_disassemble(p->devinfo, p->store, start_offset, start_offset + > after_size, stderr); > + else > + dump_assembly(p->store, annotation.ann_count, annotation.ann, > + p->devinfo); > + > ralloc_free(annotation.mem_ctx); > } > assert(validated); > diff --git a/src/mesa/drivers/dri/i965/intel_debug.c > b/src/mesa/drivers/dri/i965/intel_debug.c > index 33e8402..3d0bb62 100644 > --- a/src/mesa/drivers/dri/i965/intel_debug.c > +++ b/src/mesa/drivers/dri/i965/intel_debug.c > @@ -81,6 +81,7 @@ static const struct debug_control debug_control[] = { > { "l3", DEBUG_L3 }, > { "do32", DEBUG_DO32 }, > { "norbc", DEBUG_NO_RBC }, > + { "disasm", DEBUG_DISASM }, > { NULL, 0 } > }; > > diff --git a/src/mesa/drivers/dri/i965/intel_debug.h > b/src/mesa/drivers/dri/i965/intel_debug.h > index afca36e..191b9e4 100644 > --- a/src/mesa/drivers/dri/i965/intel_debug.h > +++ b/src/mesa/drivers/dri/i965/intel_debug.h > @@ -73,6 +73,7 @@ extern uint64_t INTEL_DEBUG; > #define DEBUG_L3 (1ull << 37) > #define DEBUG_DO32 (1ull << 38) > #define DEBUG_NO_RBC (1ull << 39) > +#define DEBUG_DISASM (1ull << 40) > > #ifdef HAVE_ANDROID_PLATFORM > #define LOG_TAG "INTEL-MESA" > diff --git a/src/mesa/drivers/dri/i965/test_eu_compact.c > b/src/mesa/drivers/dri/i965/test_eu_compact.c > index 874412c..aa9cd99 100644 > --- a/src/mesa/drivers/dri/i965/test_eu_compact.c > +++ b/src/mesa/drivers/dri/i965/test_eu_compact.c > @@ -49,7 +49,7 @@ test_compact_instruction(struct brw_codegen *p, brw_inst > src) > if (memcmp(&unchanged, &dst, sizeof(dst))) { > fprintf(stderr, "Failed to compact, but dst changed\n"); > fprintf(stderr, " Instruction: "); > - brw_disassemble_inst(stderr, p->devinfo, &src, false); > + (stderr, p->devinfo, &src, false, NULL); > return false; > } > } > -- > 2.7.4 Okay, there's a bunch of stuff going on here. Please remove the unrelated changes. That'll reduce the noise quite a bit. Write a commit message that explains what's going on. That'll help the reviewer to start on the same page. I think it would be good to split the SFID changes out into their own patch. _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
