mirror of
https://github.com/qemu/qemu.git
synced 2024-11-24 11:23:43 +08:00
target-alpha: Inline hw_ret
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net> Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
2f458b7c31
commit
6c05d3ded7
@ -91,8 +91,6 @@ DEF_HELPER_FLAGS_2(ieee_input_cmp, TCG_CALL_NO_WG, void, env, i64)
|
||||
DEF_HELPER_FLAGS_2(ieee_input_s, TCG_CALL_NO_WG, void, env, i64)
|
||||
|
||||
#if !defined (CONFIG_USER_ONLY)
|
||||
DEF_HELPER_2(hw_ret, void, env, i64)
|
||||
|
||||
DEF_HELPER_2(ldl_phys, i64, env, i64)
|
||||
DEF_HELPER_2(ldq_phys, i64, env, i64)
|
||||
DEF_HELPER_2(ldl_l_phys, i64, env, i64)
|
||||
|
@ -40,14 +40,6 @@ uint64_t helper_load_pcc(CPUAlphaState *env)
|
||||
|
||||
/* PALcode support special instructions */
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
void helper_hw_ret(CPUAlphaState *env, uint64_t a)
|
||||
{
|
||||
env->pc = a & ~3;
|
||||
env->intr_flag = 0;
|
||||
env->lock_addr = -1;
|
||||
env->pal_mode = a & 1;
|
||||
}
|
||||
|
||||
void helper_tbia(CPUAlphaState *env)
|
||||
{
|
||||
tlb_flush(CPU(alpha_env_get_cpu(env)), 1);
|
||||
|
@ -2635,13 +2635,18 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn)
|
||||
/* Pre-EV6 CPUs interpreted this as HW_REI, loading the return
|
||||
address from EXC_ADDR. This turns out to be useful for our
|
||||
emulation PALcode, so continue to accept it. */
|
||||
tmp = tcg_temp_new();
|
||||
tcg_gen_ld_i64(tmp, cpu_env, offsetof(CPUAlphaState, exc_addr));
|
||||
gen_helper_hw_ret(cpu_env, tmp);
|
||||
tcg_temp_free(tmp);
|
||||
ctx->lit = vb = tcg_temp_new();
|
||||
tcg_gen_ld_i64(vb, cpu_env, offsetof(CPUAlphaState, exc_addr));
|
||||
} else {
|
||||
gen_helper_hw_ret(cpu_env, load_gpr(ctx, rb));
|
||||
vb = load_gpr(ctx, rb);
|
||||
}
|
||||
tmp = tcg_temp_new();
|
||||
tcg_gen_movi_i64(tmp, 0);
|
||||
tcg_gen_st8_i64(tmp, cpu_env, offsetof(CPUAlphaState, intr_flag));
|
||||
tcg_gen_movi_i64(cpu_lock_addr, -1);
|
||||
tcg_gen_andi_i64(tmp, vb, 1);
|
||||
tcg_gen_st8_i64(tmp, cpu_env, offsetof(CPUAlphaState, pal_mode));
|
||||
tcg_gen_andi_i64(cpu_pc, vb, ~3);
|
||||
ret = EXIT_PC_UPDATED;
|
||||
break;
|
||||
#else
|
||||
|
Loading…
Reference in New Issue
Block a user