diff options
Diffstat (limited to 'src/intel')
-rw-r--r-- | src/intel/tools/aubinator.c | 35 | ||||
-rw-r--r-- | src/intel/tools/decoder.c | 8 | ||||
-rw-r--r-- | src/intel/tools/decoder.h | 1 |
3 files changed, 18 insertions, 26 deletions
diff --git a/src/intel/tools/aubinator.c b/src/intel/tools/aubinator.c index 1f6a1fe4b1d..fc2efd3e46e 100644 --- a/src/intel/tools/aubinator.c +++ b/src/intel/tools/aubinator.c @@ -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; } } diff --git a/src/intel/tools/decoder.c b/src/intel/tools/decoder.c index ec94ae4d92a..8838eb2500c 100644 --- a/src/intel/tools/decoder.c +++ b/src/intel/tools/decoder.c @@ -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), diff --git a/src/intel/tools/decoder.h b/src/intel/tools/decoder.h index 7b14ef4a647..700ce21f033 100644 --- a/src/intel/tools/decoder.h +++ b/src/intel/tools/decoder.h @@ -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; }; |