diff mbox series

[v2,1/3] target/hppa: Generate getshadowregs inline

Message ID 20240326181028.332867-2-richard.henderson@linaro.org
State Superseded
Headers show
Series target/hppa: Tidy and extend diag instructions | expand

Commit Message

Richard Henderson March 26, 2024, 6:10 p.m. UTC
This operation is trivial and does not require a helper.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/hppa/helper.h     |  1 -
 target/hppa/sys_helper.c |  4 ++--
 target/hppa/translate.c  | 17 +++++++++++++----
 3 files changed, 15 insertions(+), 7 deletions(-)

Comments

Helge Deller March 26, 2024, 8:26 p.m. UTC | #1
On 3/26/24 19:10, Richard Henderson wrote:
> This operation is trivial and does not require a helper.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

Reviewed-by: Helge Deller <deller@gmx.de>

Helge

> ---
>   target/hppa/helper.h     |  1 -
>   target/hppa/sys_helper.c |  4 ++--
>   target/hppa/translate.c  | 17 +++++++++++++----
>   3 files changed, 15 insertions(+), 7 deletions(-)
>
> diff --git a/target/hppa/helper.h b/target/hppa/helper.h
> index 8fd7ba65d8..5900fd70bc 100644
> --- a/target/hppa/helper.h
> +++ b/target/hppa/helper.h
> @@ -86,7 +86,6 @@ DEF_HELPER_FLAGS_0(read_interval_timer, TCG_CALL_NO_RWG, tl)
>   #ifndef CONFIG_USER_ONLY
>   DEF_HELPER_1(halt, noreturn, env)
>   DEF_HELPER_1(reset, noreturn, env)
> -DEF_HELPER_1(getshadowregs, void, env)
>   DEF_HELPER_1(rfi, void, env)
>   DEF_HELPER_1(rfi_r, void, env)
>   DEF_HELPER_FLAGS_2(write_interval_timer, TCG_CALL_NO_RWG, void, env, tl)
> diff --git a/target/hppa/sys_helper.c b/target/hppa/sys_helper.c
> index 4a31748342..208e51c086 100644
> --- a/target/hppa/sys_helper.c
> +++ b/target/hppa/sys_helper.c
> @@ -95,7 +95,7 @@ void HELPER(rfi)(CPUHPPAState *env)
>       cpu_hppa_put_psw(env, env->cr[CR_IPSW]);
>   }
>
> -void HELPER(getshadowregs)(CPUHPPAState *env)
> +static void getshadowregs(CPUHPPAState *env)
>   {
>       env->gr[1] = env->shadow[0];
>       env->gr[8] = env->shadow[1];
> @@ -108,7 +108,7 @@ void HELPER(getshadowregs)(CPUHPPAState *env)
>
>   void HELPER(rfi_r)(CPUHPPAState *env)
>   {
> -    helper_getshadowregs(env);
> +    getshadowregs(env);
>       helper_rfi(env);
>   }
>
> diff --git a/target/hppa/translate.c b/target/hppa/translate.c
> index 6da9503f33..29e4a64e40 100644
> --- a/target/hppa/translate.c
> +++ b/target/hppa/translate.c
> @@ -2385,14 +2385,23 @@ static bool trans_reset(DisasContext *ctx, arg_reset *a)
>   #endif
>   }
>
> -static bool trans_getshadowregs(DisasContext *ctx, arg_getshadowregs *a)
> +static bool do_getshadowregs(DisasContext *ctx)
>   {
>       CHECK_MOST_PRIVILEGED(EXCP_PRIV_OPR);
> -#ifndef CONFIG_USER_ONLY
>       nullify_over(ctx);
> -    gen_helper_getshadowregs(tcg_env);
> +    tcg_gen_ld_i64(cpu_gr[1], tcg_env, offsetof(CPUHPPAState, shadow[0]));
> +    tcg_gen_ld_i64(cpu_gr[8], tcg_env, offsetof(CPUHPPAState, shadow[1]));
> +    tcg_gen_ld_i64(cpu_gr[9], tcg_env, offsetof(CPUHPPAState, shadow[2]));
> +    tcg_gen_ld_i64(cpu_gr[16], tcg_env, offsetof(CPUHPPAState, shadow[3]));
> +    tcg_gen_ld_i64(cpu_gr[17], tcg_env, offsetof(CPUHPPAState, shadow[4]));
> +    tcg_gen_ld_i64(cpu_gr[24], tcg_env, offsetof(CPUHPPAState, shadow[5]));
> +    tcg_gen_ld_i64(cpu_gr[25], tcg_env, offsetof(CPUHPPAState, shadow[6]));
>       return nullify_end(ctx);
> -#endif
> +}
> +
> +static bool trans_getshadowregs(DisasContext *ctx, arg_getshadowregs *a)
> +{
> +    return do_getshadowregs(ctx);
>   }
>
>   static bool trans_nop_addrx(DisasContext *ctx, arg_ldst *a)
diff mbox series

Patch

diff --git a/target/hppa/helper.h b/target/hppa/helper.h
index 8fd7ba65d8..5900fd70bc 100644
--- a/target/hppa/helper.h
+++ b/target/hppa/helper.h
@@ -86,7 +86,6 @@  DEF_HELPER_FLAGS_0(read_interval_timer, TCG_CALL_NO_RWG, tl)
 #ifndef CONFIG_USER_ONLY
 DEF_HELPER_1(halt, noreturn, env)
 DEF_HELPER_1(reset, noreturn, env)
-DEF_HELPER_1(getshadowregs, void, env)
 DEF_HELPER_1(rfi, void, env)
 DEF_HELPER_1(rfi_r, void, env)
 DEF_HELPER_FLAGS_2(write_interval_timer, TCG_CALL_NO_RWG, void, env, tl)
diff --git a/target/hppa/sys_helper.c b/target/hppa/sys_helper.c
index 4a31748342..208e51c086 100644
--- a/target/hppa/sys_helper.c
+++ b/target/hppa/sys_helper.c
@@ -95,7 +95,7 @@  void HELPER(rfi)(CPUHPPAState *env)
     cpu_hppa_put_psw(env, env->cr[CR_IPSW]);
 }
 
-void HELPER(getshadowregs)(CPUHPPAState *env)
+static void getshadowregs(CPUHPPAState *env)
 {
     env->gr[1] = env->shadow[0];
     env->gr[8] = env->shadow[1];
@@ -108,7 +108,7 @@  void HELPER(getshadowregs)(CPUHPPAState *env)
 
 void HELPER(rfi_r)(CPUHPPAState *env)
 {
-    helper_getshadowregs(env);
+    getshadowregs(env);
     helper_rfi(env);
 }
 
diff --git a/target/hppa/translate.c b/target/hppa/translate.c
index 6da9503f33..29e4a64e40 100644
--- a/target/hppa/translate.c
+++ b/target/hppa/translate.c
@@ -2385,14 +2385,23 @@  static bool trans_reset(DisasContext *ctx, arg_reset *a)
 #endif
 }
 
-static bool trans_getshadowregs(DisasContext *ctx, arg_getshadowregs *a)
+static bool do_getshadowregs(DisasContext *ctx)
 {
     CHECK_MOST_PRIVILEGED(EXCP_PRIV_OPR);
-#ifndef CONFIG_USER_ONLY
     nullify_over(ctx);
-    gen_helper_getshadowregs(tcg_env);
+    tcg_gen_ld_i64(cpu_gr[1], tcg_env, offsetof(CPUHPPAState, shadow[0]));
+    tcg_gen_ld_i64(cpu_gr[8], tcg_env, offsetof(CPUHPPAState, shadow[1]));
+    tcg_gen_ld_i64(cpu_gr[9], tcg_env, offsetof(CPUHPPAState, shadow[2]));
+    tcg_gen_ld_i64(cpu_gr[16], tcg_env, offsetof(CPUHPPAState, shadow[3]));
+    tcg_gen_ld_i64(cpu_gr[17], tcg_env, offsetof(CPUHPPAState, shadow[4]));
+    tcg_gen_ld_i64(cpu_gr[24], tcg_env, offsetof(CPUHPPAState, shadow[5]));
+    tcg_gen_ld_i64(cpu_gr[25], tcg_env, offsetof(CPUHPPAState, shadow[6]));
     return nullify_end(ctx);
-#endif
+}
+
+static bool trans_getshadowregs(DisasContext *ctx, arg_getshadowregs *a)
+{
+    return do_getshadowregs(ctx);
 }
 
 static bool trans_nop_addrx(DisasContext *ctx, arg_ldst *a)