This is a first step in not accessing the dwords through pointers. Signed-off-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> --- src/intel/common/gen_decoder.c | 29 +++++++++++++-------------- src/intel/common/gen_decoder.h | 2 +- src/intel/tools/aubinator.c | 2 +- src/intel/tools/aubinator_error_decode.c | 2 +- src/mesa/drivers/dri/i965/intel_batchbuffer.c | 2 +- 5 files changed, 18 insertions(+), 19 deletions(-)
diff --git a/src/intel/common/gen_decoder.c b/src/intel/common/gen_decoder.c index 736bfd6df16..b8f7c3c79a7 100644 --- a/src/intel/common/gen_decoder.c +++ b/src/intel/common/gen_decoder.c @@ -718,35 +718,34 @@ gen_group_find_field(struct gen_group *group, const char *name) } int -gen_group_get_length(struct gen_group *group, const uint32_t *p) +gen_group_get_length(struct gen_group *group, uint32_t dw0) { - uint32_t h = p[0]; - uint32_t type = field_value(h, 29, 31); + uint32_t type = field_value(dw0, 29, 31); switch (type) { case 0: /* MI */ { - uint32_t opcode = field_value(h, 23, 28); + uint32_t opcode = field_value(dw0, 23, 28); if (opcode < 16) return 1; else - return field_value(h, 0, 7) + 2; + return field_value(dw0, 0, 7) + 2; break; } case 2: /* BLT */ { - return field_value(h, 0, 7) + 2; + return field_value(dw0, 0, 7) + 2; } case 3: /* Render */ { - uint32_t subtype = field_value(h, 27, 28); - uint32_t opcode = field_value(h, 24, 26); - uint16_t whole_opcode = field_value(h, 16, 31); + uint32_t subtype = field_value(dw0, 27, 28); + uint32_t opcode = field_value(dw0, 24, 26); + uint16_t whole_opcode = field_value(dw0, 16, 31); switch (subtype) { case 0: if (whole_opcode == 0x6104 /* PIPELINE_SELECT_965 */) return 1; else if (opcode < 2) - return field_value(h, 0, 7) + 2; + return field_value(dw0, 0, 7) + 2; else return -1; case 1: @@ -756,9 +755,9 @@ gen_group_get_length(struct gen_group *group, const uint32_t *p) return -1; case 2: { if (opcode == 0) - return field_value(h, 0, 7) + 2; + return field_value(dw0, 0, 7) + 2; else if (opcode < 3) - return field_value(h, 0, 15) + 2; + return field_value(dw0, 0, 15) + 2; else return -1; } @@ -766,7 +765,7 @@ gen_group_get_length(struct gen_group *group, const uint32_t *p) if (whole_opcode == 0x780b) return 1; else if (opcode < 4) - return field_value(h, 0, 7) + 2; + return field_value(dw0, 0, 7) + 2; else return -1; } @@ -805,7 +804,7 @@ iter_more_groups(const struct gen_field_iterator *iter) { if (iter->group->variable) { return iter_group_offset_bits(iter, iter->group_iter + 1) < - (gen_group_get_length(iter->group, iter->p) * 32); + (gen_group_get_length(iter->group, iter->p[0]) * 32); } else { return (iter->group_iter + 1) < iter->group->group_count || iter->group->next != NULL; @@ -978,7 +977,7 @@ gen_field_iterator_init(struct gen_field_iterator *iter, else iter->field = group->next->fields; iter->p = p; - iter->p_end = &p[gen_group_get_length(iter->group, iter->p)]; + iter->p_end = &p[gen_group_get_length(iter->group, p[0])]; iter->print_colors = print_colors; iter_decode_field(iter); diff --git a/src/intel/common/gen_decoder.h b/src/intel/common/gen_decoder.h index 343d68b0eda..971fe04d2bd 100644 --- a/src/intel/common/gen_decoder.h +++ b/src/intel/common/gen_decoder.h @@ -56,7 +56,7 @@ struct gen_group *gen_spec_find_register(struct gen_spec *spec, uint32_t offset) struct gen_group *gen_spec_find_register_by_name(struct gen_spec *spec, const char *name); struct gen_enum *gen_spec_find_enum(struct gen_spec *spec, const char *name); -int gen_group_get_length(struct gen_group *group, const uint32_t *p); +int gen_group_get_length(struct gen_group *group, uint32_t dw0); const char *gen_group_get_name(struct gen_group *group); uint32_t gen_group_get_opcode(struct gen_group *group); struct gen_field *gen_group_find_field(struct gen_group *group, const char *name); diff --git a/src/intel/tools/aubinator.c b/src/intel/tools/aubinator.c index 728edad37ff..a5141c34d78 100644 --- a/src/intel/tools/aubinator.c +++ b/src/intel/tools/aubinator.c @@ -693,7 +693,7 @@ parse_commands(struct gen_spec *spec, uint32_t *cmds, int size, int engine) for (p = cmds; p < end; p += length) { inst = gen_spec_find_instruction(spec, p); - length = gen_group_get_length(inst, p); + length = gen_group_get_length(inst, p[0]); assert(inst == NULL || length > 0); length = MAX2(1, length); if (inst == NULL) { diff --git a/src/intel/tools/aubinator_error_decode.c b/src/intel/tools/aubinator_error_decode.c index 4035723b87d..fef85ffde1f 100644 --- a/src/intel/tools/aubinator_error_decode.c +++ b/src/intel/tools/aubinator_error_decode.c @@ -250,7 +250,7 @@ static void decode(struct gen_spec *spec, uint64_t offset = gtt_offset + 4 * (p - data); inst = gen_spec_find_instruction(spec, p); - length = gen_group_get_length(inst, p); + length = gen_group_get_length(inst, p[0]); assert(inst == NULL || length > 0); length = MAX2(1, length); if (inst == NULL) { diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c index 1a366c78b00..811f8a42f1e 100644 --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c @@ -455,7 +455,7 @@ do_batch_dump(struct brw_context *brw) for (uint32_t *p = batch_data; p < end; p += length) { struct gen_group *inst = gen_spec_find_instruction(spec, p); - length = gen_group_get_length(inst, p); + length = gen_group_get_length(inst, p[0]); assert(inst == NULL || length > 0); length = MAX2(1, length); if (inst == NULL) { -- 2.15.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev