diff mbox series

[v2,14/24] target/hppa: convert excp to raise_excp

Message ID 20260928052051.251-15-luoyonggang@gmail.com
State New
Headers show
Series accel/tcg: share raise_excp across TCG targets | expand

Commit Message

Yonggang Luo Sept. 28, 2026, 5:20 a.m. UTC
Drop TCG excp and call raise_excp. 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 <luoyonggang@gmail.com>
---
 target/hppa/helper.h     |  2 --
 target/hppa/op_helper.c  | 15 ++-------------
 target/hppa/sys_helper.c |  4 ++--
 target/hppa/translate.c  |  2 +-
 4 files changed, 5 insertions(+), 18 deletions(-)

Comments

Philippe Mathieu-Daudé Sept. 29, 2026, 5:21 a.m. UTC | #1
On 28/9/26 07:20, Yonggang Luo wrote:
> Drop TCG excp and call raise_excp. 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 <luoyonggang@gmail.com>
> ---
>   target/hppa/helper.h     |  2 --
>   target/hppa/op_helper.c  | 15 ++-------------
>   target/hppa/sys_helper.c |  4 ++--
>   target/hppa/translate.c  |  2 +-
>   4 files changed, 5 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);

cpu_loop_exit_excp() replacement is one logical change, ...

>   }
>   
>   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);

... removing helper_excp() and calling hppa_dynamic_excp()
another one. Please split in 2 distinct patches.

>       }
>       return (want & prot) != 0;
>   #endif
diff mbox series

Patch

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 41300c0dd73..35766e6ee06 100644
--- a/target/hppa/translate.c
+++ b/target/hppa/translate.c
@@ -726,7 +726,7 @@  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));
 }
 
 static void gen_excp(DisasContext *ctx, int exception)