-print_dword_val(struct gen_field_iterator *iter, uint64_t offset,
- int *dword_num)
-{
- struct gen_field *f;
-
- f = iter->group->fields[iter->i - 1];
- const int dword = f->start / 32;
-
- if (*dword_num != dword) {
- printf("0x%08"PRIx64": 0x%08x : Dword %d\n",
- offset + 4 * dword, iter->p[dword], dword);
- *dword_num = dword;
- }
-}
-
-static char *
-print_iterator_values(struct gen_field_iterator *iter, int *idx)
-{
- char *token = NULL;
- if (strstr(iter->value, "struct") == NULL) {
- printf(" %s: %s\n", iter->name, iter->value);
- } else {
- token = strtok(iter->value, " ");
- if (token != NULL) {
- token = strtok(NULL, " ");
- *idx = atoi(strtok(NULL, ">"));
- } else {
- token = NULL;
- }
- printf(" %s:<struct %s>\n", iter->name, token);
- }
- return token;
-}
-
-static void
-decode_structure(struct gen_spec *spec, struct gen_group *strct,
- const uint32_t *p)
-{
- struct gen_field_iterator iter;
- char *token = NULL;
- int idx = 0, dword_num = 0;
- uint64_t offset = 0;
-
- if (option_print_offsets)
- offset = (void *) p - gtt;
- else
- offset = 0;
-
- gen_field_iterator_init(&iter, strct, p);
- while (gen_field_iterator_next(&iter)) {
- idx = 0;
- print_dword_val(&iter, offset, &dword_num);
- token = print_iterator_values(&iter, &idx);
- if (token != NULL) {
- struct gen_group *struct_val = gen_spec_find_struct(spec, token);
- decode_structure(spec, struct_val, &p[idx]);
- token = NULL;
- }
- }
-}
-
-static void
-handle_struct_decode(struct gen_spec *spec, char *struct_name, uint32_t *p)