Revisión | 6c05d3ded7b51154e67c35e270c48784b7046883 (tree) |
---|---|
Tiempo | 2015-08-19 03:08:59 |
Autor | Richard Henderson <rth@twid...> |
Commiter | Richard Henderson |
target-alpha: Inline hw_ret
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
@@ -91,8 +91,6 @@ DEF_HELPER_FLAGS_2(ieee_input_cmp, TCG_CALL_NO_WG, void, env, i64) | ||
91 | 91 | DEF_HELPER_FLAGS_2(ieee_input_s, TCG_CALL_NO_WG, void, env, i64) |
92 | 92 | |
93 | 93 | #if !defined (CONFIG_USER_ONLY) |
94 | -DEF_HELPER_2(hw_ret, void, env, i64) | |
95 | - | |
96 | 94 | DEF_HELPER_2(ldl_phys, i64, env, i64) |
97 | 95 | DEF_HELPER_2(ldq_phys, i64, env, i64) |
98 | 96 | DEF_HELPER_2(ldl_l_phys, i64, env, i64) |
@@ -40,14 +40,6 @@ uint64_t helper_load_pcc(CPUAlphaState *env) | ||
40 | 40 | |
41 | 41 | /* PALcode support special instructions */ |
42 | 42 | #ifndef CONFIG_USER_ONLY |
43 | -void helper_hw_ret(CPUAlphaState *env, uint64_t a) | |
44 | -{ | |
45 | - env->pc = a & ~3; | |
46 | - env->intr_flag = 0; | |
47 | - env->lock_addr = -1; | |
48 | - env->pal_mode = a & 1; | |
49 | -} | |
50 | - | |
51 | 43 | void helper_tbia(CPUAlphaState *env) |
52 | 44 | { |
53 | 45 | tlb_flush(CPU(alpha_env_get_cpu(env)), 1); |
@@ -2635,13 +2635,18 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn) | ||
2635 | 2635 | /* Pre-EV6 CPUs interpreted this as HW_REI, loading the return |
2636 | 2636 | address from EXC_ADDR. This turns out to be useful for our |
2637 | 2637 | emulation PALcode, so continue to accept it. */ |
2638 | - tmp = tcg_temp_new(); | |
2639 | - tcg_gen_ld_i64(tmp, cpu_env, offsetof(CPUAlphaState, exc_addr)); | |
2640 | - gen_helper_hw_ret(cpu_env, tmp); | |
2641 | - tcg_temp_free(tmp); | |
2638 | + ctx->lit = vb = tcg_temp_new(); | |
2639 | + tcg_gen_ld_i64(vb, cpu_env, offsetof(CPUAlphaState, exc_addr)); | |
2642 | 2640 | } else { |
2643 | - gen_helper_hw_ret(cpu_env, load_gpr(ctx, rb)); | |
2641 | + vb = load_gpr(ctx, rb); | |
2644 | 2642 | } |
2643 | + tmp = tcg_temp_new(); | |
2644 | + tcg_gen_movi_i64(tmp, 0); | |
2645 | + tcg_gen_st8_i64(tmp, cpu_env, offsetof(CPUAlphaState, intr_flag)); | |
2646 | + tcg_gen_movi_i64(cpu_lock_addr, -1); | |
2647 | + tcg_gen_andi_i64(tmp, vb, 1); | |
2648 | + tcg_gen_st8_i64(tmp, cpu_env, offsetof(CPUAlphaState, pal_mode)); | |
2649 | + tcg_gen_andi_i64(cpu_pc, vb, ~3); | |
2645 | 2650 | ret = EXIT_PC_UPDATED; |
2646 | 2651 | break; |
2647 | 2652 | #else |