intel/decoder: Convert the iterator to work entirely in bits
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 13 Dec 2017 00:51:54 +0000 (16:51 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 14 Dec 2017 21:27:01 +0000 (13:27 -0800)
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
src/intel/common/gen_decoder.c
src/intel/common/gen_decoder.h

index 9f4f50393945a93a13be2b9dde294d15b1b1c0b0..de4c506ac7b668bf3fd485fbca2fb9cab34b9d28 100644 (file)
@@ -840,9 +840,7 @@ iter_advance_field(struct gen_field_iterator *iter)
 
    int group_member_offset = iter_group_offset_bits(iter, iter->group_iter);
 
-   iter->start = group_member_offset + iter->field->start;
-   iter->end = group_member_offset + iter->field->end;
-   iter->dword = iter->start / 32;
+   iter->bit = group_member_offset + iter->field->start;
    iter->struct_desc = NULL;
 
    return true;
@@ -890,7 +888,7 @@ iter_decode_field(struct gen_field_iterator *iter)
    memset(&v, 0, sizeof(v));
 
    v.qw = iter_decode_field_raw(iter->field,
-                                &iter->p[iter->dword], iter->p_end);
+                                &iter->p[iter->bit / 32], iter->p_end);
 
    const char *enum_name = NULL;
 
@@ -1020,17 +1018,18 @@ gen_print_group(FILE *outfile, struct gen_group *group,
 
    gen_field_iterator_init(&iter, group, p, color);
    do {
-      if (last_dword != iter.dword) {
-         for (int i = last_dword + 1; i <= iter.dword; i++)
+      int iter_dword = iter.bit / 32;
+      if (last_dword != iter_dword) {
+         for (int i = last_dword + 1; i <= iter_dword; i++)
             print_dword_header(outfile, &iter, offset, i);
-         last_dword = iter.dword;
+         last_dword = iter_dword;
       }
       if (!gen_field_is_header(iter.field)) {
          fprintf(outfile, "    %s: %s\n", iter.name, iter.value);
          if (iter.struct_desc) {
-            uint64_t struct_offset = offset + 4 * iter.dword;
+            uint64_t struct_offset = offset + 4 * iter_dword;
             gen_print_group(outfile, iter.struct_desc, struct_offset,
-                            &p[iter.dword], color);
+                            &p[iter_dword], color);
          }
       }
    } while (gen_field_iterator_next(&iter));
index bf7cb424fc6bb626845597cf978d301ac6b4536f..a45e0a250d16428977b437036587c76cf2fe413c 100644 (file)
@@ -70,9 +70,7 @@ struct gen_field_iterator {
    struct gen_group *struct_desc;
    const uint32_t *p;
    const uint32_t *p_end;
-   int dword; /**< current field starts at &p[dword] */
-   int start; /**< current field starts at this bit number */
-   int end;   /**< current field ends at this bit number */
+   int bit; /**< current field starts at this bit offset into p */
 
    int group_iter;