+ DEBUG0("----------------");
+ DEBUG4("PRE s={size=%ld,align=%ld,asize=%ld} struct_boundary=%d",
+ struct_type->size[GRAS_THISARCH],
+ struct_type->alignment[GRAS_THISARCH],
+ struct_type->aligned_size[GRAS_THISARCH],
+ gras_arches[GRAS_THISARCH].struct_boundary);
+
+
+ for (arch=0; arch<gras_arch_count; arch ++) {
+ field->offset[arch] = aligned(struct_type->size[arch],
+ min(field_type->alignment[arch],
+ gras_arches[arch].struct_boundary));
+
+ struct_type->size[arch] = field->offset[arch] + field_type->size[arch];
+ struct_type->alignment[arch] = max(struct_type->alignment[arch],
+ field_type->alignment[arch]);
+ struct_type->aligned_size[arch] = aligned(struct_type->size[arch],
+ struct_type->alignment[arch]);
+ }
+ field->type = field_type;
+ field->pre = NULL;
+ field->post = NULL;
+
+ TRY(gras_dynar_push(struct_type->category.struct_data.fields, &field));
+
+ DEBUG3("Push a %s into %s at offset %ld.",
+ field_type->name, struct_type->name,field->offset[GRAS_THISARCH]);
+ DEBUG3(" f={size=%ld,align=%ld,asize=%ld}",
+ field_type->size[GRAS_THISARCH],
+ field_type->alignment[GRAS_THISARCH],
+ field_type->aligned_size[GRAS_THISARCH]);
+ DEBUG3(" s={size=%ld,align=%ld,asize=%ld}",
+ struct_type->size[GRAS_THISARCH],
+ struct_type->alignment[GRAS_THISARCH],
+ struct_type->aligned_size[GRAS_THISARCH]);
+ GRAS_OUT;