]> git.proxmox.com Git - mirror_qemu.git/commitdiff
tcg: Improve call argument loading
authorRichard Henderson <richard.henderson@linaro.org>
Tue, 11 Dec 2018 16:25:02 +0000 (10:25 -0600)
committerRichard Henderson <richard.henderson@linaro.org>
Tue, 25 Dec 2018 19:58:43 +0000 (06:58 +1100)
Free the argument register only after we have verified that the
temporary is not already in that register.  This case is likely
now that we are back propagating the preferred register.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
tcg/tcg.c

index 5f8c09b0b436152cf72f7a3ebfbd46c30a6311e2..c54b1190208f6be8d039555a8d78c0111897496a 100644 (file)
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -3611,15 +3611,16 @@ static void tcg_reg_alloc_call(TCGContext *s, TCGOp *op)
         if (arg != TCG_CALL_DUMMY_ARG) {
             ts = arg_temp(arg);
             reg = tcg_target_call_iarg_regs[i];
-            tcg_reg_free(s, reg, allocated_regs);
 
             if (ts->val_type == TEMP_VAL_REG) {
                 if (ts->reg != reg) {
+                    tcg_reg_free(s, reg, allocated_regs);
                     tcg_out_mov(s, ts->type, reg, ts->reg);
                 }
             } else {
                 TCGRegSet arg_set = 0;
 
+                tcg_reg_free(s, reg, allocated_regs);
                 tcg_regset_set_reg(arg_set, reg);
                 temp_load(s, ts, arg_set, allocated_regs, 0);
             }