v3d: Dump fields in CLIF output in increasing offset order.

Previously, we emitted in XML order, which I happen to type in the
decreasing offset order of the specifications.  However, the CLIF parser
wants increasing offsets.
This commit is contained in:
Eric Anholt 2018-06-26 12:57:16 -07:00
parent 95bafeeabf
commit a57770aa37

View file

@ -511,6 +511,13 @@ skip:
ctx->parse_depth++;
}
static int
field_offset_compare(const void *a, const void *b)
{
return ((*(const struct v3d_field **)a)->start -
(*(const struct v3d_field **)b)->start);
}
static void
end_element(void *data, const char *name)
{
@ -549,6 +556,13 @@ end_element(void *data, const char *name)
else if (strcmp(name, "register") == 0)
spec->registers[spec->nregisters++] = group;
/* Sort the fields in increasing offset order. The XML might
* be specified in any order, but we'll want to iterate from
* the bottom.
*/
qsort(group->fields, group->nfields, sizeof(*group->fields),
field_offset_compare);
assert(spec->ncommands < ARRAY_SIZE(spec->commands));
assert(spec->nstructs < ARRAY_SIZE(spec->structs));
assert(spec->nregisters < ARRAY_SIZE(spec->registers));