Lines Matching refs:iter

876 iter_more_fields(const struct intel_field_iterator *iter)
878 return iter->field != NULL && iter->field->next != NULL;
882 iter_array_offset_bits(const struct intel_field_iterator *iter)
884 if (iter->level == 0)
888 const struct intel_group *group = iter->groups[1];
889 for (int level = 1; level <= iter->level; level++, group = iter->groups[level]) {
890 uint32_t array_idx = iter->array_iter[level];
902 iter_push_array(struct intel_field_iterator *iter)
904 assert(iter->level >= 0);
906 iter->group = iter->field->array;
907 iter->level++;
908 assert(iter->level < DECODE_MAX_ARRAY_DEPTH);
909 iter->groups[iter->level] = iter->group;
910 iter->array_iter[iter->level] = 0;
912 assert(iter->group->fields != NULL); /* an empty <group> makes no sense */
913 iter->field = iter->group->fields;
914 iter->fields[iter->level] = iter->field;
918 iter_pop_array(struct intel_field_iterator *iter)
920 assert(iter->level > 0);
922 iter->level--;
923 iter->field = iter->fields[iter->level];
924 iter->group = iter->groups[iter->level];
928 iter_start_field(struct intel_field_iterator *iter, struct intel_field *field)
930 iter->field = field;
931 iter->fields[iter->level] = field;
933 while (iter->field->array)
934 iter_push_array(iter);
936 int array_member_offset = iter_array_offset_bits(iter);
938 iter->start_bit = array_member_offset + iter->field->start;
939 iter->end_bit = array_member_offset + iter->field->end;
940 iter->struct_desc = NULL;
944 iter_advance_array(struct intel_field_iterator *iter)
946 assert(iter->level > 0);
947 int lvl = iter->level;
949 if (iter->group->variable)
950 iter->array_iter[lvl]++;
952 if ((iter->array_iter[lvl] + 1) < iter->group->array_count) {
953 iter->array_iter[lvl]++;
957 iter_start_field(iter, iter->group->fields);
961 iter_more_array_elems(const struct intel_field_iterator *iter)
963 int lvl = iter->level;
966 if (iter->group->variable) {
967 int length = intel_group_get_length(iter->group, iter->p);
969 return iter_array_offset_bits(iter) + iter->group->array_item_size <
972 return (iter->array_iter[lvl] + 1) < iter->group->array_count;
977 iter_advance_field(struct intel_field_iterator *iter)
982 while (iter_more_fields(iter) || iter->level > 0) {
983 if (iter_more_fields(iter)) {
984 iter_start_field(iter, iter->field->next);
988 assert(iter->level >= 0);
990 if (iter_more_array_elems(iter)) {
991 iter_advance_array(iter);
999 iter_pop_array(iter);
1006 iter_decode_field_raw(struct intel_field_iterator *iter, uint64_t *qw)
1010 int field_start = iter->p_bit + iter->start_bit;
1011 int field_end = iter->p_bit + iter->end_bit;
1013 const uint32_t *p = iter->p + (iter->start_bit / 32);
1014 if (iter->p_end && p >= iter->p_end)
1018 if (!iter->p_end || (p + 1) < iter->p_end)
1029 if (iter->field->type.kind == INTEL_TYPE_ADDRESS ||
1030 iter->field->type.kind == INTEL_TYPE_OFFSET)
1037 iter_decode_field(struct intel_field_iterator *iter)
1044 if (iter->field->name)
1045 snprintf(iter->name, sizeof(iter->name), "%s", iter->field->name);
1047 memset(iter->name, 0, sizeof(iter->name));
1051 if (!iter_decode_field_raw(iter, &iter->raw_value))
1056 v.qw = iter->raw_value;
1057 switch (iter->field->type.kind) {
1060 snprintf(iter->value, sizeof(iter->value), "%"PRId64, v.qw);
1061 enum_name = intel_get_enum_name(&iter->field->inline_enum, v.qw);
1066 snprintf(iter->value, sizeof(iter->value), "%"PRIu64, v.qw);
1067 enum_name = intel_get_enum_name(&iter->field->inline_enum, v.qw);
1072 iter->print_colors ? "\e[0;35mtrue\e[0m" : "true";
1073 snprintf(iter->value, sizeof(iter->value), "%s",
1078 snprintf(iter->value, sizeof(iter->value), "%f", v.f);
1082 snprintf(iter->value, sizeof(iter->value), "0x%08"PRIx64, v.qw);
1085 snprintf(iter->value, sizeof(iter->value), "<struct %s>",
1086 iter->field->type.intel_struct->name);
1087 iter->struct_desc =
1088 intel_spec_find_struct(iter->group->spec,
1089 iter->field->type.intel_struct->name);
1092 snprintf(iter->value, sizeof(iter->value), "%f",
1093 (float) v.qw / (1 << iter->field->type.f));
1097 int bits = iter->field->type.i + iter->field->type.f + 1;
1099 snprintf(iter->value, sizeof(iter->value), "%f",
1100 (float) v_sign_extend / (1 << iter->field->type.f));
1106 snprintf(iter->value, sizeof(iter->value), "%"PRId64, v.qw);
1107 enum_name = intel_get_enum_name(iter->field->type.intel_enum, v.qw);
1112 if (strlen(iter->group->name) == 0) {
1113 int length = strlen(iter->name);
1114 assert(iter->level >= 0);
1117 char *buf = iter->name + length;
1118 while (level <= iter->level) {
1119 int printed = snprintf(buf, sizeof(iter->name) - length,
1120 "[%i]", iter->array_iter[level]);
1128 int length = strlen(iter->value);
1129 snprintf(iter->value + length, sizeof(iter->value) - length,
1131 } else if (strcmp(iter->name, "Surface Format") == 0 ||
1132 strcmp(iter->name, "Source Element Format") == 0) {
1135 int length = strlen(iter->value);
1136 snprintf(iter->value + length, sizeof(iter->value) - length,
1145 intel_field_iterator_init(struct intel_field_iterator *iter,
1150 memset(iter, 0, sizeof(*iter));
1152 iter->groups[iter->level] = group;
1153 iter->group = group;
1154 iter->p = p;
1155 iter->p_bit = p_bit;
1157 int length = intel_group_get_length(iter->group, iter->p);
1159 iter->p_end = length >= 0 ? &p[length] : NULL;
1160 iter->print_colors = print_colors;
1164 intel_field_iterator_next(struct intel_field_iterator *iter)
1167 if (!iter->field) {
1168 if (iter->group->fields)
1169 iter_start_field(iter, iter->group->fields);
1171 bool result = iter_decode_field(iter);
1172 if (!result && iter->p_end) {
1176 assert(iter->group->dw_length == 0);
1182 if (!iter_advance_field(iter))
1185 if (!iter_decode_field(iter))
1193 struct intel_field_iterator *iter,
1197 offset + 4 * dword, iter->p[dword], dword);
1220 struct intel_field_iterator iter;
1223 intel_field_iterator_init(&iter, group, p, p_bit, color);
1224 while (intel_field_iterator_next(&iter)) {
1225 int iter_dword = iter.end_bit / 32;
1228 print_dword_header(outfile, &iter, offset, i);
1231 if (!intel_field_is_header(iter.field)) {
1232 fprintf(outfile, " %s: %s\n", iter.name, iter.value);
1233 if (iter.struct_desc) {
1234 int struct_dword = iter.start_bit / 32;
1236 intel_print_group(outfile, iter.struct_desc, struct_offset,
1237 &p[struct_dword], iter.start_bit % 32, color);