diff options
author | Richard Henderson <rth@twiddle.net> | 2014-09-16 12:55:12 -0700 |
---|---|---|
committer | Richard Henderson <rth@twiddle.net> | 2015-08-18 11:08:59 -0700 |
commit | 6c05d3ded7b51154e67c35e270c48784b7046883 (patch) | |
tree | 943fc2805f8742909c49f7de54d89a23df176528 /target-alpha/translate.c | |
parent | 2f458b7c311f8d79028b04930f8c820b326fbcdd (diff) |
target-alpha: Inline hw_ret
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
Diffstat (limited to 'target-alpha/translate.c')
-rw-r--r-- | target-alpha/translate.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/target-alpha/translate.c b/target-alpha/translate.c index 01e7f3577b..2849ede85c 100644 --- a/target-alpha/translate.c +++ b/target-alpha/translate.c @@ -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 |