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:

committed by
Marge Bot

parent
afa39d07e4
commit
6cbd4764cd
@@ -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)
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user