Lines Matching refs:iter

873 iter_more_fields(const struct intel_field_iterator *iter)
875 return iter->field != NULL && iter->field->next != NULL;
879 iter_array_offset_bits(const struct intel_field_iterator *iter)
881 if (iter->level == 0)
885 const struct intel_group *group = iter->groups[1];
886 for (int level = 1; level <= iter->level; level++, group = iter->groups[level]) {
887 uint32_t array_idx = iter->array_iter[level];
899 iter_push_array(struct intel_field_iterator *iter)
901 assert(iter->level >= 0);
903 iter->group = iter->field->array;
904 iter->level++;
905 assert(iter->level < DECODE_MAX_ARRAY_DEPTH);
906 iter->groups[iter->level] = iter->group;
907 iter->array_iter[iter->level] = 0;
909 assert(iter->group->fields != NULL); /* an empty <group> makes no sense */
910 iter->field = iter->group->fields;
911 iter->fields[iter->level] = iter->field;
915 iter_pop_array(struct intel_field_iterator *iter)
917 assert(iter->level > 0);
919 iter->level--;
920 iter->field = iter->fields[iter->level];
921 iter->group = iter->groups[iter->level];
925 iter_start_field(struct intel_field_iterator *iter, struct intel_field *field)
927 iter->field = field;
928 iter->fields[iter->level] = field;
930 while (iter->field->array)
931 iter_push_array(iter);
933 int array_member_offset = iter_array_offset_bits(iter);
935 iter->start_bit = array_member_offset + iter->field->start;
936 iter->end_bit = array_member_offset + iter->field->end;
937 iter->struct_desc = NULL;
941 iter_advance_array(struct intel_field_iterator *iter)
943 assert(iter->level > 0);
944 int lvl = iter->level;
946 if (iter->group->variable)
947 iter->array_iter[lvl]++;
949 if ((iter->array_iter[lvl] + 1) < iter->group->array_count) {
950 iter->array_iter[lvl]++;
954 iter_start_field(iter, iter->group->fields);
958 iter_more_array_elems(const struct intel_field_iterator *iter)
960 int lvl = iter->level;
963 if (iter->group->variable) {
964 int length = intel_group_get_length(iter->group, iter->p);
966 return iter_array_offset_bits(iter) + iter->group->array_item_size <
969 return (iter->array_iter[lvl] + 1) < iter->group->array_count;
974 iter_advance_field(struct intel_field_iterator *iter)
979 while (iter_more_fields(iter) || iter->level > 0) {
980 if (iter_more_fields(iter)) {
981 iter_start_field(iter, iter->field->next);
985 assert(iter->level >= 0);
987 if (iter_more_array_elems(iter)) {
988 iter_advance_array(iter);
996 iter_pop_array(iter);
1003 iter_decode_field_raw(struct intel_field_iterator *iter, uint64_t *qw)
1007 int field_start = iter->p_bit + iter->start_bit;
1008 int field_end = iter->p_bit + iter->end_bit;
1010 const uint32_t *p = iter->p + (iter->start_bit / 32);
1011 if (iter->p_end && p >= iter->p_end)
1015 if (!iter->p_end || (p + 1) < iter->p_end)
1026 if (iter->field->type.kind == INTEL_TYPE_ADDRESS ||
1027 iter->field->type.kind == INTEL_TYPE_OFFSET)
1034 iter_decode_field(struct intel_field_iterator *iter)
1041 if (iter->field->name)
1042 snprintf(iter->name, sizeof(iter->name), "%s", iter->field->name);
1044 memset(iter->name, 0, sizeof(iter->name));
1048 if (!iter_decode_field_raw(iter, &iter->raw_value))
1053 v.qw = iter->raw_value;
1054 switch (iter->field->type.kind) {
1057 snprintf(iter->value, sizeof(iter->value), "%"PRId64, v.qw);
1058 enum_name = intel_get_enum_name(&iter->field->inline_enum, v.qw);
1062 snprintf(iter->value, sizeof(iter->value), "%"PRIu64, v.qw);
1063 enum_name = intel_get_enum_name(&iter->field->inline_enum, v.qw);
1068 iter->print_colors ? "\e[0;35mtrue\e[0m" : "true";
1069 snprintf(iter->value, sizeof(iter->value), "%s",
1074 snprintf(iter->value, sizeof(iter->value), "%f", v.f);
1078 snprintf(iter->value, sizeof(iter->value), "0x%08"PRIx64, v.qw);
1081 snprintf(iter->value, sizeof(iter->value), "<struct %s>",
1082 iter->field->type.intel_struct->name);
1083 iter->struct_desc =
1084 intel_spec_find_struct(iter->group->spec,
1085 iter->field->type.intel_struct->name);
1088 snprintf(iter->value, sizeof(iter->value), "%f",
1089 (float) v.qw / (1 << iter->field->type.f));
1093 int bits = iter->field->type.i + iter->field->type.f + 1;
1095 snprintf(iter->value, sizeof(iter->value), "%f",
1096 (float) v_sign_extend / (1 << iter->field->type.f));
1102 snprintf(iter->value, sizeof(iter->value), "%"PRId64, v.qw);
1103 enum_name = intel_get_enum_name(iter->field->type.intel_enum, v.qw);
1108 if (strlen(iter->group->name) == 0) {
1109 int length = strlen(iter->name);
1110 assert(iter->level >= 0);
1113 char *buf = iter->name + length;
1114 while (level <= iter->level) {
1115 int printed = snprintf(buf, sizeof(iter->name) - length,
1116 "[%i]", iter->array_iter[level]);
1124 int length = strlen(iter->value);
1125 snprintf(iter->value + length, sizeof(iter->value) - length,
1127 } else if (strcmp(iter->name, "Surface Format") == 0 ||
1128 strcmp(iter->name, "Source Element Format") == 0) {
1131 int length = strlen(iter->value);
1132 snprintf(iter->value + length, sizeof(iter->value) - length,
1141 intel_field_iterator_init(struct intel_field_iterator *iter,
1146 memset(iter, 0, sizeof(*iter));
1148 iter->groups[iter->level] = group;
1149 iter->group = group;
1150 iter->p = p;
1151 iter->p_bit = p_bit;
1153 int length = intel_group_get_length(iter->group, iter->p);
1155 iter->p_end = length >= 0 ? &p[length] : NULL;
1156 iter->print_colors = print_colors;
1160 intel_field_iterator_next(struct intel_field_iterator *iter)
1163 if (!iter->field) {
1164 if (iter->group->fields)
1165 iter_start_field(iter, iter->group->fields);
1167 bool result = iter_decode_field(iter);
1168 if (!result && iter->p_end) {
1172 assert(iter->group->dw_length == 0);
1178 if (!iter_advance_field(iter))
1181 if (!iter_decode_field(iter))
1189 struct intel_field_iterator *iter,
1193 offset + 4 * dword, iter->p[dword], dword);
1216 struct intel_field_iterator iter;
1219 intel_field_iterator_init(&iter, group, p, p_bit, color);
1220 while (intel_field_iterator_next(&iter)) {
1221 int iter_dword = iter.end_bit / 32;
1224 print_dword_header(outfile, &iter, offset, i);
1227 if (!intel_field_is_header(iter.field)) {
1228 fprintf(outfile, " %s: %s\n", iter.name, iter.value);
1229 if (iter.struct_desc) {
1230 int struct_dword = iter.start_bit / 32;
1232 intel_print_group(outfile, iter.struct_desc, struct_offset,
1233 &p[struct_dword], iter.start_bit % 32, color);