On 12/31/2015 03:33 AM, Aurelien Jarno wrote: >> - if (ts->val_type == TEMP_VAL_REG) { >> - tcg_out_st(s, ts->type, ts->reg, TCG_REG_CALL_STACK, >> stack_offset); >> - } else if (ts->val_type == TEMP_VAL_MEM) { >> - reg = tcg_reg_alloc(s, tcg_target_available_regs[ts->type], >> - s->reserved_regs); >> - /* XXX: not correct if reading values from the stack */ > > Shouldn't we keep this comment by moving it to temp_load?
No, because I believe the comment to be inaccurate. > >> - tcg_out_ld(s, ts->type, reg, ts->mem_base->reg, >> ts->mem_offset); >> - tcg_out_st(s, ts->type, reg, TCG_REG_CALL_STACK, >> stack_offset); >> - } else if (ts->val_type == TEMP_VAL_CONST) { >> - reg = tcg_reg_alloc(s, tcg_target_available_regs[ts->type], >> - s->reserved_regs); >> - /* XXX: sign extend may be needed on some targets */ > > Same here. > >> - tcg_out_movi(s, ts->type, reg, ts->val); Likewise. If the target needs sign-extend, it will do it here in movi given the type. >> - tcg_out_st(s, ts->type, reg, TCG_REG_CALL_STACK, >> stack_offset); >> - } else { >> - tcg_abort(); >> - } >> + temp_load(s, ts, tcg_target_available_regs[ts->type], >> + s->reserved_regs); >> + tcg_out_st(s, ts->type, ts->reg, TCG_REG_CALL_STACK, >> stack_offset); >> } >> #ifndef TCG_TARGET_STACK_GROWSUP >> stack_offset += sizeof(tcg_target_long); >> @@ -2193,18 +2180,19 @@ static void tcg_reg_alloc_call(TCGContext *s, int >> nb_oargs, int nb_iargs, >> ts = &s->temps[arg]; >> reg = tcg_target_call_iarg_regs[i]; >> tcg_reg_free(s, reg); >> + >> if (ts->val_type == TEMP_VAL_REG) { >> if (ts->reg != reg) { >> tcg_out_mov(s, ts->type, reg, ts->reg); >> } >> - } else if (ts->val_type == TEMP_VAL_MEM) { >> - tcg_out_ld(s, ts->type, reg, ts->mem_base->reg, >> ts->mem_offset); >> - } else if (ts->val_type == TEMP_VAL_CONST) { >> - /* XXX: sign extend ? */ > > And here. > >> - tcg_out_movi(s, ts->type, reg, ts->val); Likewise. r~