mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-03-23 06:25:12 +00:00
tcg: Add preferred_reg argument to temp_sync
Pass this through to tcg_reg_alloc. Backports commit 98b4e186c1ccb8f1868c61a33a3be8c2b82654f3 from qemu
This commit is contained in:
parent
96b6640f3b
commit
c3aa567b03
|
@ -2401,8 +2401,8 @@ static inline void temp_dead(TCGContext *s, TCGTemp *ts)
|
|||
registers needs to be allocated to store a constant. If 'free_or_dead'
|
||||
is non-zero, subsequently release the temporary; if it is positive, the
|
||||
temp is dead; if it is negative, the temp is free. */
|
||||
static void temp_sync(TCGContext *s, TCGTemp *ts,
|
||||
TCGRegSet allocated_regs, int free_or_dead)
|
||||
static void temp_sync(TCGContext *s, TCGTemp *ts, TCGRegSet allocated_regs,
|
||||
TCGRegSet preferred_regs, int free_or_dead)
|
||||
{
|
||||
if (ts->fixed_reg) {
|
||||
return;
|
||||
|
@ -2422,7 +2422,7 @@ static void temp_sync(TCGContext *s, TCGTemp *ts,
|
|||
break;
|
||||
}
|
||||
temp_load(s, ts, s->tcg_target_available_regs[ts->type],
|
||||
allocated_regs, 0);
|
||||
allocated_regs, preferred_regs);
|
||||
/* fallthrough */
|
||||
|
||||
case TEMP_VAL_REG:
|
||||
|
@ -2449,7 +2449,7 @@ static void tcg_reg_free(TCGContext *s, TCGReg reg, TCGRegSet allocated_regs)
|
|||
{
|
||||
TCGTemp *ts = s->reg_to_temp[reg];
|
||||
if (ts != NULL) {
|
||||
temp_sync(s, ts, allocated_regs, -1);
|
||||
temp_sync(s, ts, allocated_regs, 0, -1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2629,7 +2629,7 @@ static void tcg_reg_alloc_do_movi(TCGContext *s, TCGTemp *ots,
|
|||
ots->val = val;
|
||||
ots->mem_coherent = 0;
|
||||
if (NEED_SYNC_ARG(0)) {
|
||||
temp_sync(s, ots, s->reserved_regs, IS_DEAD_ARG(0));
|
||||
temp_sync(s, ots, s->reserved_regs, 0, IS_DEAD_ARG(0));
|
||||
} else if (IS_DEAD_ARG(0)) {
|
||||
temp_dead(s, ots);
|
||||
}
|
||||
|
@ -2712,7 +2712,7 @@ static void tcg_reg_alloc_mov(TCGContext *s, const TCGOp *op)
|
|||
ots->mem_coherent = 0;
|
||||
s->reg_to_temp[ots->reg] = ots;
|
||||
if (NEED_SYNC_ARG(0)) {
|
||||
temp_sync(s, ots, allocated_regs, 0);
|
||||
temp_sync(s, ots, allocated_regs, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2882,7 +2882,7 @@ static void tcg_reg_alloc_op(TCGContext *s, const TCGOp *op)
|
|||
tcg_out_mov(s, ts->type, ts->reg, reg);
|
||||
}
|
||||
if (NEED_SYNC_ARG(i)) {
|
||||
temp_sync(s, ts, o_allocated_regs, IS_DEAD_ARG(i));
|
||||
temp_sync(s, ts, o_allocated_regs, 0, IS_DEAD_ARG(i));
|
||||
} else if (IS_DEAD_ARG(i)) {
|
||||
temp_dead(s, ts);
|
||||
}
|
||||
|
@ -3016,7 +3016,7 @@ static void tcg_reg_alloc_call(TCGContext *s, TCGOp *op)
|
|||
ts->mem_coherent = 0;
|
||||
s->reg_to_temp[reg] = ts;
|
||||
if (NEED_SYNC_ARG(i)) {
|
||||
temp_sync(s, ts, allocated_regs, IS_DEAD_ARG(i));
|
||||
temp_sync(s, ts, allocated_regs, 0, IS_DEAD_ARG(i));
|
||||
} else if (IS_DEAD_ARG(i)) {
|
||||
temp_dead(s, ts);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue