mirror of
https://github.com/danog/ir.git
synced 2024-11-30 04:39:43 +01:00
Fix param offset calculation
This commit is contained in:
parent
96fc0fb520
commit
438c7801cf
39
ir_x86.dasc
39
ir_x86.dasc
@ -4037,37 +4037,32 @@ static void ir_emit_load_params(ir_ctx *ctx)
|
||||
use = *p;
|
||||
insn = &ctx->ir_base[use];
|
||||
if (insn->op == IR_PARAM) {
|
||||
if (ctx->vregs[use]) {
|
||||
if (IR_IS_TYPE_INT(insn->type)) {
|
||||
if (int_param_num < int_reg_params_count) {
|
||||
src_reg = int_reg_params[int_param_num];
|
||||
} else {
|
||||
src_reg = IR_REG_NONE;
|
||||
stack_offset += sizeof(void*);
|
||||
}
|
||||
int_param_num++;
|
||||
if (IR_IS_TYPE_INT(insn->type)) {
|
||||
if (int_param_num < int_reg_params_count) {
|
||||
src_reg = int_reg_params[int_param_num];
|
||||
} else {
|
||||
if (fp_param_num < fp_reg_params_count) {
|
||||
src_reg = fp_reg_params[fp_param_num];
|
||||
} else {
|
||||
src_reg = IR_REG_NONE;
|
||||
stack_offset += sizeof(void*);
|
||||
}
|
||||
fp_param_num++;
|
||||
src_reg = IR_REG_NONE;
|
||||
stack_offset += sizeof(void*);
|
||||
}
|
||||
int_param_num++;
|
||||
} else {
|
||||
if (fp_param_num < fp_reg_params_count) {
|
||||
src_reg = fp_reg_params[fp_param_num];
|
||||
} else {
|
||||
src_reg = IR_REG_NONE;
|
||||
stack_offset += sizeof(void*);
|
||||
}
|
||||
fp_param_num++;
|
||||
}
|
||||
if (ctx->vregs[use]) {
|
||||
dst_reg = IR_REG_NUM(ctx->regs[use][0]);
|
||||
IR_ASSERT(src_reg != IR_REG_NONE || dst_reg != IR_REG_NONE);
|
||||
if (src_reg != dst_reg) {
|
||||
ir_emit_param_move(ctx, insn->type, src_reg, dst_reg, use, stack_offset);
|
||||
}
|
||||
if (dst_reg != IR_REG_NONE && (ctx->regs[use][0] & IR_REG_SPILL_STORE)) {
|
||||
ir_emit_store(ctx, insn->type, use, dst_reg);
|
||||
}
|
||||
} else {
|
||||
if (IR_IS_TYPE_INT(insn->type)) {
|
||||
int_param_num++;
|
||||
} else {
|
||||
fp_param_num++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user