void
disasm_insert_error(struct disasm_info *disasm, unsigned offset,
- const char *error)
+ unsigned inst_size, const char *error)
{
foreach_list_typed(struct inst_group, cur, link, &disasm->group_list) {
struct exec_node *next_node = exec_node_get_next(&cur->link);
if (next->offset <= offset)
continue;
- if (offset + sizeof(brw_inst) != next->offset) {
+ if (offset + inst_size != next->offset) {
struct inst_group *new = ralloc(disasm, struct inst_group);
memcpy(new, cur, sizeof(struct inst_group));
cur->error_length = 0;
cur->block_end = NULL;
- new->offset = offset + sizeof(brw_inst);
+ new->offset = offset + inst_size;
new->block_start = NULL;
exec_node_insert_after(&cur->link, &new->link);
void
disasm_insert_error(struct disasm_info *disasm, unsigned offset,
- const char *error);
+ unsigned inst_size, const char *error);
#ifdef __cplusplus
} /* extern "C" */
/* brw_eu_validate.c */
bool brw_validate_instruction(const struct brw_isa_info *isa,
const brw_inst *inst, int offset,
+ unsigned inst_size,
struct disasm_info *disasm);
bool brw_validate_instructions(const struct brw_isa_info *isa,
const void *assembly, int start_offset, int end_offset,
bool
brw_validate_instruction(const struct brw_isa_info *isa,
const brw_inst *inst, int offset,
+ unsigned inst_size,
struct disasm_info *disasm)
{
struct string error_msg = { .str = NULL, .len = 0 };
}
if (error_msg.str && disasm) {
- disasm_insert_error(disasm, offset, error_msg.str);
+ disasm_insert_error(disasm, offset, inst_size, error_msg.str);
}
free(error_msg.str);
inst = &uncompacted;
}
- bool v = brw_validate_instruction(isa, inst, src_offset, disasm);
+ bool v = brw_validate_instruction(isa, inst, src_offset,
+ inst_size, disasm);
valid = valid && v;
src_offset += inst_size;
clear_pad_bits(p->isa, &instr);
- if (!brw_validate_instruction(p->isa, &instr, 0, NULL))
+ if (!brw_validate_instruction(p->isa, &instr, 0, sizeof(brw_inst), NULL))
continue;
if (!test_compact_instruction(p, instr)) {