mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-22 09:10:11 +01:00
aubinator: Track the current field's starting dword offset.
The iterator code already computed this value, then we stored it in the structure name, strtok'd it back out, and also manually computed it when printing dword headers. Just put the value in the struct and use it. Way simpler. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
parent
e6f7357cab
commit
a1aa78cb45
3 changed files with 18 additions and 26 deletions
|
|
@ -96,23 +96,14 @@ valid_offset(uint32_t offset)
|
|||
}
|
||||
|
||||
static void
|
||||
print_dword_val(struct gen_field_iterator *iter, uint64_t offset,
|
||||
int *dword_num)
|
||||
print_dword_header(struct gen_field_iterator *iter, uint64_t offset)
|
||||
{
|
||||
struct gen_field *f;
|
||||
|
||||
f = iter->group->fields[iter->i - 1];
|
||||
const int dword = f->start / 32;
|
||||
|
||||
if (*dword_num != dword) {
|
||||
fprintf(outfile, "0x%08"PRIx64": 0x%08x : Dword %d\n",
|
||||
offset + 4 * dword, iter->p[dword], dword);
|
||||
*dword_num = dword;
|
||||
}
|
||||
fprintf(outfile, "0x%08"PRIx64": 0x%08x : Dword %d\n",
|
||||
offset + 4 * iter->dword, iter->p[iter->dword], iter->dword);
|
||||
}
|
||||
|
||||
static char *
|
||||
print_iterator_values(struct gen_field_iterator *iter, int *idx)
|
||||
print_iterator_values(struct gen_field_iterator *iter)
|
||||
{
|
||||
char *token = NULL;
|
||||
if (strstr(iter->value, "struct") == NULL) {
|
||||
|
|
@ -121,7 +112,6 @@ print_iterator_values(struct gen_field_iterator *iter, int *idx)
|
|||
token = strtok(iter->value, " ");
|
||||
if (token != NULL) {
|
||||
token = strtok(NULL, " ");
|
||||
*idx = atoi(strtok(NULL, ">"));
|
||||
} else {
|
||||
token = NULL;
|
||||
}
|
||||
|
|
@ -136,7 +126,7 @@ decode_group(struct gen_spec *spec, struct gen_group *strct,
|
|||
{
|
||||
struct gen_field_iterator iter;
|
||||
char *token = NULL;
|
||||
int idx = 0, dword_num = 0;
|
||||
int last_dword = 0;
|
||||
uint64_t offset = 0;
|
||||
|
||||
if (option_print_offsets)
|
||||
|
|
@ -147,15 +137,16 @@ decode_group(struct gen_spec *spec, struct gen_group *strct,
|
|||
gen_field_iterator_init(&iter, strct, p,
|
||||
option_color == COLOR_ALWAYS);
|
||||
while (gen_field_iterator_next(&iter)) {
|
||||
idx = 0;
|
||||
print_dword_val(&iter, offset, &dword_num);
|
||||
if (dword_num >= starting_dword)
|
||||
token = print_iterator_values(&iter, &idx);
|
||||
if (last_dword != iter.dword) {
|
||||
print_dword_header(&iter, offset);
|
||||
last_dword = iter.dword;
|
||||
}
|
||||
if (iter.dword >= starting_dword)
|
||||
token = print_iterator_values(&iter);
|
||||
if (token != NULL) {
|
||||
fprintf(outfile, "0x%08"PRIx64": 0x%08x : Dword %d\n",
|
||||
offset + 4 * idx, p[idx], idx);
|
||||
print_dword_header(&iter, offset);
|
||||
struct gen_group *struct_val = gen_spec_find_struct(spec, token);
|
||||
decode_group(spec, struct_val, &p[idx], 0);
|
||||
decode_group(spec, struct_val, &p[iter.dword], 0);
|
||||
token = NULL;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -752,12 +752,12 @@ gen_field_iterator_next(struct gen_field_iterator *iter)
|
|||
|
||||
f = iter->group->fields[iter->i++];
|
||||
iter->name = f->name;
|
||||
int index = f->start / 32;
|
||||
iter->dword = f->start / 32;
|
||||
|
||||
if ((f->end - f->start) > 32)
|
||||
v.qw = ((uint64_t) iter->p[index+1] << 32) | iter->p[index];
|
||||
v.qw = ((uint64_t) iter->p[iter->dword+1] << 32) | iter->p[iter->dword];
|
||||
else
|
||||
v.qw = iter->p[index];
|
||||
v.qw = iter->p[iter->dword];
|
||||
|
||||
const char *enum_name = NULL;
|
||||
|
||||
|
|
@ -794,7 +794,7 @@ gen_field_iterator_next(struct gen_field_iterator *iter)
|
|||
break;
|
||||
case GEN_TYPE_STRUCT:
|
||||
snprintf(iter->value, sizeof(iter->value),
|
||||
"<struct %s %d>", f->type.gen_struct->name, (f->start / 32));
|
||||
"<struct %s %d>", f->type.gen_struct->name, iter->dword);
|
||||
break;
|
||||
case GEN_TYPE_UFIXED:
|
||||
snprintf(iter->value, sizeof(iter->value),
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ struct gen_field_iterator {
|
|||
const char *name;
|
||||
char value[128];
|
||||
const uint32_t *p;
|
||||
int dword; /**< current field starts at &p[dword] */
|
||||
int i;
|
||||
bool print_colors;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue