From: Danylo Piliaiev Date: Mon, 3 Jun 2019 09:10:09 +0000 (+0300) Subject: intel/disasm: brw_label and support functions X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6cbd4764cd93d5b103778a223651084eaeda64f8;p=mesa.git intel/disasm: brw_label and support functions Pre-work for shader disassembly label support. Introduction of the structures and functions used by the shader disassembly jump target labeling. From: "Lonnberg, Toni" Signed-off-by: Danylo Piliaiev Reviewed-by: Sagar Ghuge Reviewed-by: Matt Turner Part-of: --- diff --git a/src/intel/compiler/brw_eu.cpp b/src/intel/compiler/brw_eu.cpp index 78272f27fbf..596894e434e 100644 --- a/src/intel/compiler/brw_eu.cpp +++ b/src/intel/compiler/brw_eu.cpp @@ -409,6 +409,54 @@ bool brw_try_override_assembly(struct brw_codegen *p, int start_offset, return true; } +const struct brw_label * +brw_find_label(const struct brw_label *root, int offset) +{ + const 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, const void *assembly, int start, int end, FILE *out) diff --git a/src/intel/compiler/brw_eu.h b/src/intel/compiler/brw_eu.h index 18567155fd6..c08f3b877b9 100644 --- a/src/intel/compiler/brw_eu.h +++ b/src/intel/compiler/brw_eu.h @@ -137,6 +137,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 ); unsigned brw_get_default_exec_size(struct brw_codegen *p); @@ -164,6 +170,8 @@ 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(const struct brw_label *root, int offset); +void brw_create_label(struct brw_label **labels, int offset, void *mem_ctx); int brw_disassemble_inst(FILE *file, const struct gen_device_info *devinfo, const struct brw_inst *inst, bool is_compacted); void brw_disassemble(const struct gen_device_info *devinfo, diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index 6cf3769c9a3..7d39ba881d8 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -147,6 +147,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,