#include "gen_disasm.h"
-uint64_t INTEL_DEBUG;
-
struct gen_disasm {
struct gen_device_info devinfo;
};
}
static int
-gen_disasm_find_end(struct gen_disasm *disasm, void *assembly, int start)
+gen_disasm_find_end(struct gen_disasm *disasm,
+ const void *assembly, int start)
{
struct gen_device_info *devinfo = &disasm->devinfo;
int offset = start;
/* This loop exits when send-with-EOT or when opcode is 0 */
while (true) {
- brw_inst *insn = assembly + offset;
+ const brw_inst *insn = assembly + offset;
if (brw_inst_cmpt_control(devinfo, insn)) {
offset += 8;
}
void
-gen_disasm_disassemble(struct gen_disasm *disasm, void *assembly,
+gen_disasm_disassemble(struct gen_disasm *disasm, const void *assembly,
int start, FILE *out)
{
struct gen_device_info *devinfo = &disasm->devinfo;
brw_validate_instructions(devinfo, assembly, start, end, disasm_info);
+ void *mem_ctx = ralloc_context(NULL);
+ const struct brw_label *root_label =
+ brw_label_assembly(devinfo, assembly, start, end, mem_ctx);
+
foreach_list_typed(struct inst_group, group, link,
&disasm_info->group_list) {
struct exec_node *next_node = exec_node_get_next(&group->link);
int start_offset = group->offset;
int end_offset = next->offset;
- brw_disassemble(devinfo, assembly, start_offset, end_offset, out);
+ brw_disassemble(devinfo, assembly, start_offset, end_offset,
+ root_label, out);
if (group->error) {
fputs(group->error, out);
}
}
+ ralloc_free(mem_ctx);
ralloc_free(disasm_info);
}
gd->devinfo = *devinfo;
- brw_init_compaction_tables(&gd->devinfo);
-
return gd;
}