intel: decoder: simplify field_is_header()
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Thu, 28 Sep 2017 01:36:30 +0000 (02:36 +0100)
committerLionel Landwerlin <lionel.g.landwerlin@intel.com>
Wed, 1 Nov 2017 17:23:49 +0000 (17:23 +0000)
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Scott D Phillips <scott.d.phillips@intel.com>
src/intel/common/gen_decoder.c
src/intel/common/gen_decoder.h

index c0a46e5212e2a9ff2480b073156516ac2f000f60..760a8769c565afa0fdb4b7f378b2d8afbf30b335 100644 (file)
@@ -288,6 +288,7 @@ create_field(struct parser_context *ctx, const char **atts)
    struct gen_field *field;
 
    field = rzalloc(ctx->group, struct gen_field);
+   field->parent = ctx->group;
 
    for (int i = 0; atts[i]; i += 2) {
       char *p;
@@ -960,7 +961,7 @@ print_dword_header(FILE *outfile,
 }
 
 bool
-gen_group_header_is_header(struct gen_group *group, struct gen_field *field)
+gen_field_is_header(struct gen_field *field)
 {
    uint32_t bits;
 
@@ -970,7 +971,7 @@ gen_group_header_is_header(struct gen_group *group, struct gen_field *field)
    bits = (1U << (field->end - field->start + 1)) - 1;
    bits <<= field->start;
 
-   return (group->opcode_mask & bits) != 0;
+   return (field->parent->opcode_mask & bits) != 0;
 }
 
 void
@@ -987,7 +988,7 @@ gen_print_group(FILE *outfile, struct gen_group *group,
             print_dword_header(outfile, &iter, offset, i);
          last_dword = iter.dword;
       }
-      if (!gen_group_header_is_header(group, iter.field)) {
+      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;
index f2291f43e92181600edb78005e0883013e824539..9ee5fb51c2ea24daa94c97df641d9db62209c35b 100644 (file)
@@ -56,7 +56,7 @@ int gen_group_get_length(struct gen_group *group, const uint32_t *p);
 const char *gen_group_get_name(struct gen_group *group);
 uint32_t gen_group_get_opcode(struct gen_group *group);
 struct gen_enum *gen_spec_find_enum(struct gen_spec *spec, const char *name);
-bool gen_group_header_is_header(struct gen_group *group, struct gen_field *field);
+bool gen_field_is_header(struct gen_field *field);
 
 struct gen_field_iterator {
    struct gen_group *group;
@@ -145,6 +145,7 @@ struct gen_type {
 };
 
 struct gen_field {
+   struct gen_group *parent;
    struct gen_field *next;
 
    char *name;