ir_type *tp;
ident *name;
char buf[32];
- int offset, frame_size;
+ int offset;
+ unsigned frame_size = get_type_size_bytes(frame_type);
+ unsigned frame_align = get_type_alignment_bytes(frame_type);
static unsigned area_cnt = 0;
assert(is_frame_type(frame_type));
set_type_alignment_bytes(tp, alignment);
set_type_size_bytes(tp, size);
- frame_size = get_type_size_bytes(frame_type);
if (at_start) {
size_t i, n;
- unsigned frame_align = get_type_alignment_bytes(frame_type);
unsigned delta = (size + frame_align - 1) & ~(frame_align - 1);
/* fix all offsets so far */
for (i = 0, n = get_class_n_members(frame_type); i < n; ++i) {
/* calculate offset and new type size */
offset = 0;
frame_size += delta;
-
- /* increase size to match alignment... */
- if (alignment > frame_align) {
- frame_align = alignment;
- set_type_alignment_bytes(frame_type, frame_align);
- frame_size = (frame_size + frame_align - 1) & ~(frame_align - 1);
- }
} else {
/* calculate offset and new type size */
offset = (frame_size + alignment - 1) & ~(alignment - 1);
area = new_entity(frame_type, name, tp);
set_entity_offset(area, offset);
set_type_size_bytes(frame_type, frame_size);
+ if (alignment > frame_align) {
+ set_type_alignment_bytes(frame_type, alignment);
+ }
/* mark this entity as compiler generated */
set_entity_compiler_generated(area, 1);