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" <toni.lonnberg@intel.com>
Signed-off-by: Danylo Piliaiev <danylo.piliaiev@globallogic.com>
Reviewed-by: Sagar Ghuge <sagar.ghuge@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4245>
This commit is contained in:
Danylo Piliaiev
2019-06-03 12:10:09 +03:00
committed by Marge Bot
parent afa39d07e4
commit 6cbd4764cd
3 changed files with 57 additions and 0 deletions

View File

@@ -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)

View File

@@ -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,