Drop TCG excp and call gen_helper_raise_excp with restore 0. Keep C hppa_dynamic_excp and use cpu_loop_exit_excp. Route leftover C callers through hppa_dynamic_excp instead of helper_excp.
Signed-off-by: Yonggang Luo <[email protected]> --- target/hppa/helper.h | 2 -- target/hppa/op_helper.c | 15 ++------------- target/hppa/sys_helper.c | 4 ++-- target/hppa/translate.c | 3 ++- 4 files changed, 6 insertions(+), 18 deletions(-) diff --git a/target/hppa/helper.h b/target/hppa/helper.h index 8369855d78e..5ed39e01e31 100644 --- a/target/hppa/helper.h +++ b/target/hppa/helper.h @@ -1,5 +1,3 @@ -DEF_HELPER_2(excp, noreturn, env, int) - DEF_HELPER_FLAGS_3(stby_b, TCG_CALL_NO_WG, void, env, tl, tl) DEF_HELPER_FLAGS_3(stby_b_parallel, TCG_CALL_NO_WG, void, env, tl, tl) DEF_HELPER_FLAGS_3(stby_e, TCG_CALL_NO_WG, void, env, tl, tl) diff --git a/target/hppa/op_helper.c b/target/hppa/op_helper.c index 76a8d8a0d34..c4651f0d85a 100644 --- a/target/hppa/op_helper.c +++ b/target/hppa/op_helper.c @@ -30,20 +30,9 @@ #include "user/page-protection.h" #endif -G_NORETURN void HELPER(excp)(CPUHPPAState *env, int excp) -{ - CPUState *cs = env_cpu(env); - - cs->exception_index = excp; - cpu_loop_exit(cs); -} - G_NORETURN void hppa_dynamic_excp(CPUHPPAState *env, int excp, uintptr_t ra) { - CPUState *cs = env_cpu(env); - - cs->exception_index = excp; - cpu_loop_exit_restore(cs, ra); + cpu_loop_exit_excp(env_cpu(env), excp, ra); } static void atomic_store_mask32(CPUHPPAState *env, target_ulong addr, @@ -341,7 +330,7 @@ target_ulong HELPER(probe)(CPUHPPAState *env, target_ulong addr, if (excp == EXCP_DTLB_MISS) { excp = EXCP_NA_DTLB_MISS; } - helper_excp(env, excp); + hppa_dynamic_excp(env, excp, 0); } return (want & prot) != 0; #endif diff --git a/target/hppa/sys_helper.c b/target/hppa/sys_helper.c index 88109f0181a..dd3be1bfc90 100644 --- a/target/hppa/sys_helper.c +++ b/target/hppa/sys_helper.c @@ -51,13 +51,13 @@ void HELPER(write_interval_timer)(CPUHPPAState *env, target_ulong val) void HELPER(halt)(CPUHPPAState *env) { qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN); - helper_excp(env, EXCP_HLT); + hppa_dynamic_excp(env, EXCP_HLT, 0); } void HELPER(reset)(CPUHPPAState *env) { qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET); - helper_excp(env, EXCP_HLT); + hppa_dynamic_excp(env, EXCP_HLT, 0); } target_ulong HELPER(swap_system_mask)(CPUHPPAState *env, target_ulong nsm) diff --git a/target/hppa/translate.c b/target/hppa/translate.c index 002189ddfbd..6221c98fbf7 100644 --- a/target/hppa/translate.c +++ b/target/hppa/translate.c @@ -726,7 +726,8 @@ static void install_link(DisasContext *ctx, unsigned link, bool with_sr0) static void gen_excp_1(int exception) { - gen_helper_excp(tcg_env, tcg_constant_i32(exception)); + gen_helper_raise_excp(tcg_env, tcg_constant_i32(exception), + tcg_constant_i32(0)); } static void gen_excp(DisasContext *ctx, int exception) -- 2.52.0.windows.1
