Message ID | 20240326181028.332867-2-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | target/hppa: Tidy and extend diag instructions | expand |
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 --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)
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(-)