target/hppa: prevent trashing of temporary in trans_mtctl()
nullify_over() calls brcond which destroys all temporaries. Signed-off-by: Sven Schnelle <svens@stackframe.org> Message-Id: <20190913101714.29019-2-svens@stackframe.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
85182c96de
commit
4845f01518
@ -2214,10 +2214,11 @@ static bool trans_mtsp(DisasContext *ctx, arg_mtsp *a)
|
||||
static bool trans_mtctl(DisasContext *ctx, arg_mtctl *a)
|
||||
{
|
||||
unsigned ctl = a->t;
|
||||
TCGv_reg reg = load_gpr(ctx, a->r);
|
||||
TCGv_reg reg;
|
||||
TCGv_reg tmp;
|
||||
|
||||
if (ctl == CR_SAR) {
|
||||
reg = load_gpr(ctx, a->r);
|
||||
tmp = tcg_temp_new();
|
||||
tcg_gen_andi_reg(tmp, reg, TARGET_REGISTER_BITS - 1);
|
||||
save_or_nullify(ctx, cpu_sar, tmp);
|
||||
@ -2232,6 +2233,8 @@ static bool trans_mtctl(DisasContext *ctx, arg_mtctl *a)
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
nullify_over(ctx);
|
||||
reg = load_gpr(ctx, a->r);
|
||||
|
||||
switch (ctl) {
|
||||
case CR_IT:
|
||||
gen_helper_write_interval_timer(cpu_env, reg);
|
||||
|
Loading…
Reference in New Issue
Block a user