if (type != firm_unknown_type && get_type_size_bytes(type) != 1) {
ir_tarval *tv = new_tarval_from_long(get_type_size_bytes(type), mode_Iu);
ir_node *cnst = new_rd_Const(dbg, irg, tv);
- ir_node *mul = new_rd_Mul(dbg, block, get_Free_size(free),
+ ir_node *mul = new_rd_Mul(dbg, block, get_Free_count(free),
cnst, mode_Iu);
size = mul;
} else {
- size = get_Free_size(free);
+ size = get_Free_count(free);
}
stack_alignment = 1 << arch_env->stack_alignment;
ir_type *method_type, ir_entity ***param_map)
{
struct obstack *obst = be_get_be_obst(irg);
- ir_type *frame_type = get_irg_frame_type(irg);
- size_t n_params = get_method_n_params(method_type);
- size_t n_frame_members = get_compound_n_members(frame_type);
+ ir_type *frame_type = get_irg_frame_type(irg);
+ size_t n_params = get_method_n_params(method_type);
+ size_t n_frame_members = get_compound_n_members(frame_type);
+ ir_entity *va_start_entity = NULL;
size_t f;
int ofs = 0;
if (!is_parameter_entity(entity))
continue;
num = get_entity_parameter_number(entity);
+ if (num == IR_VA_START_PARAMETER_NUMBER) {
+ /* move entity to new arg_type */
+ set_entity_owner(entity, res);
+ va_start_entity = entity;
+ continue;
+ }
assert(num < n_params);
if (map[num] != NULL)
panic("multiple entities for parameter %u in %+F found", f, irg);
- if (!get_call_arg(call, 0, num, 1)->on_stack) {
+ if (num != n_params && !get_call_arg(call, 0, num, 1)->on_stack) {
/* don't move this entity */
continue;
}
ofs += get_type_size_bytes(param_type);
arg->stack_ent = entity;
}
+ if (va_start_entity != NULL) {
+ set_entity_offset(va_start_entity, ofs);
+ }
set_type_size_bytes(res, ofs);
set_type_state(res, layout_fixed);
+
return res;
}