Lines Matching refs:iter
859 iter_more_fields(const struct gen_field_iterator *iter)
861 return iter->field != NULL && iter->field->next != NULL;
865 iter_group_offset_bits(const struct gen_field_iterator *iter,
868 return iter->group->group_offset + (group_iter * iter->group->group_size);
872 iter_more_groups(const struct gen_field_iterator *iter)
874 if (iter->group->variable) {
875 int length = gen_group_get_length(iter->group, iter->p);
877 return iter_group_offset_bits(iter, iter->group_iter + 1) <
880 return (iter->group_iter + 1) < iter->group->group_count ||
881 iter->group->next != NULL;
886 iter_start_field(struct gen_field_iterator *iter, struct gen_field *field)
888 iter->field = field;
890 int group_member_offset = iter_group_offset_bits(iter, iter->group_iter);
892 iter->start_bit = group_member_offset + iter->field->start;
893 iter->end_bit = group_member_offset + iter->field->end;
894 iter->struct_desc = NULL;
898 iter_advance_group(struct gen_field_iterator *iter)
900 if (iter->group->variable)
901 iter->group_iter++;
903 if ((iter->group_iter + 1) < iter->group->group_count) {
904 iter->group_iter++;
906 iter->group = iter->group->next;
907 iter->group_iter = 0;
911 iter_start_field(iter, iter->group->fields);
915 iter_advance_field(struct gen_field_iterator *iter)
917 if (iter_more_fields(iter)) {
918 iter_start_field(iter, iter->field->next);
920 if (!iter_more_groups(iter))
923 iter_advance_group(iter);
929 iter_decode_field_raw(struct gen_field_iterator *iter, uint64_t *qw)
933 int field_start = iter->p_bit + iter->start_bit;
934 int field_end = iter->p_bit + iter->end_bit;
936 const uint32_t *p = iter->p + (iter->start_bit / 32);
937 if (iter->p_end && p >= iter->p_end)
941 if (!iter->p_end || (p + 1) < iter->p_end)
952 if (iter->field->type.kind == GEN_TYPE_ADDRESS ||
953 iter->field->type.kind == GEN_TYPE_OFFSET)
960 iter_decode_field(struct gen_field_iterator *iter)
967 if (iter->field->name)
968 snprintf(iter->name, sizeof(iter->name), "%s", iter->field->name);
970 memset(iter->name, 0, sizeof(iter->name));
974 if (!iter_decode_field_raw(iter, &iter->raw_value))
979 v.qw = iter->raw_value;
980 switch (iter->field->type.kind) {
983 snprintf(iter->value, sizeof(iter->value), "%"PRId64, v.qw);
984 enum_name = gen_get_enum_name(&iter->field->inline_enum, v.qw);
988 snprintf(iter->value, sizeof(iter->value), "%"PRIu64, v.qw);
989 enum_name = gen_get_enum_name(&iter->field->inline_enum, v.qw);
994 iter->print_colors ? "\e[0;35mtrue\e[0m" : "true";
995 snprintf(iter->value, sizeof(iter->value), "%s",
1000 snprintf(iter->value, sizeof(iter->value), "%f", v.f);
1004 snprintf(iter->value, sizeof(iter->value), "0x%08"PRIx64, v.qw);
1007 snprintf(iter->value, sizeof(iter->value), "<struct %s>",
1008 iter->field->type.gen_struct->name);
1009 iter->struct_desc =
1010 gen_spec_find_struct(iter->group->spec,
1011 iter->field->type.gen_struct->name);
1014 snprintf(iter->value, sizeof(iter->value), "%f",
1015 (float) v.qw / (1 << iter->field->type.f));
1019 int bits = iter->field->type.i + iter->field->type.f + 1;
1021 snprintf(iter->value, sizeof(iter->value), "%f",
1022 (float) v_sign_extend / (1 << iter->field->type.f));
1028 snprintf(iter->value, sizeof(iter->value), "%"PRId64, v.qw);
1029 enum_name = gen_get_enum_name(iter->field->type.gen_enum, v.qw);
1034 if (strlen(iter->group->name) == 0) {
1035 int length = strlen(iter->name);
1036 snprintf(iter->name + length, sizeof(iter->name) - length,
1037 "[%i]", iter->group_iter);
1041 int length = strlen(iter->value);
1042 snprintf(iter->value + length, sizeof(iter->value) - length,
1044 } else if (strcmp(iter->name, "Surface Format") == 0 ||
1045 strcmp(iter->name, "Source Element Format") == 0) {
1048 int length = strlen(iter->value);
1049 snprintf(iter->value + length, sizeof(iter->value) - length,
1058 gen_field_iterator_init(struct gen_field_iterator *iter,
1063 memset(iter, 0, sizeof(*iter));
1065 iter->group = group;
1066 iter->p = p;
1067 iter->p_bit = p_bit;
1069 int length = gen_group_get_length(iter->group, iter->p);
1071 iter->p_end = length >= 0 ? &p[length] : NULL;
1072 iter->print_colors = print_colors;
1076 gen_field_iterator_next(struct gen_field_iterator *iter)
1079 if (!iter->field) {
1080 if (iter->group->fields)
1081 iter_start_field(iter, iter->group->fields);
1083 iter_start_field(iter, iter->group->next->fields);
1085 bool result = iter_decode_field(iter);
1086 if (!result && iter->p_end) {
1090 assert(iter->group->dw_length == 0);
1096 if (!iter_advance_field(iter))
1099 if (!iter_decode_field(iter))
1107 struct gen_field_iterator *iter,
1111 offset + 4 * dword, iter->p[dword], dword);
1132 struct gen_field_iterator iter;
1135 gen_field_iterator_init(&iter, group, p, p_bit, color);
1136 while (gen_field_iterator_next(&iter)) {
1137 int iter_dword = iter.end_bit / 32;
1140 print_dword_header(outfile, &iter, offset, i);
1143 if (!gen_field_is_header(iter.field)) {
1144 fprintf(outfile, " %s: %s\n", iter.name, iter.value);
1145 if (iter.struct_desc) {
1146 int struct_dword = iter.start_bit / 32;
1148 gen_print_group(outfile, iter.struct_desc, struct_offset,
1149 &p[struct_dword], iter.start_bit % 32, color);