Message ID | 20191011155546.14342-16-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | target/arm: Reduce overhead of cpu_get_tb_cpu_state | expand |
Richard Henderson <richard.henderson@linaro.org> writes: > This functions are given the mode and el state of the cpu > and writes the computed value to env->hflags. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> > --- > target/arm/helper.h | 4 ++++ > target/arm/helper.c | 24 ++++++++++++++++++++++++ > 2 files changed, 28 insertions(+) > > diff --git a/target/arm/helper.h b/target/arm/helper.h > index 1fb2cb5a77..3d4ec267a2 100644 > --- a/target/arm/helper.h > +++ b/target/arm/helper.h > @@ -90,6 +90,10 @@ DEF_HELPER_4(msr_banked, void, env, i32, i32, i32) > DEF_HELPER_2(get_user_reg, i32, env, i32) > DEF_HELPER_3(set_user_reg, void, env, i32, i32) > > +DEF_HELPER_FLAGS_2(rebuild_hflags_m32, TCG_CALL_NO_RWG, void, env, > int) > +DEF_HELPER_FLAGS_2(rebuild_hflags_a32, TCG_CALL_NO_RWG, void, env, int) > +DEF_HELPER_FLAGS_2(rebuild_hflags_a64, TCG_CALL_NO_RWG, void, env, int) > + > DEF_HELPER_1(vfp_get_fpscr, i32, env) > DEF_HELPER_2(vfp_set_fpscr, void, env, i32) > > diff --git a/target/arm/helper.c b/target/arm/helper.c > index 37424e3d4d..b2d701cf00 100644 > --- a/target/arm/helper.c > +++ b/target/arm/helper.c > @@ -11220,6 +11220,30 @@ void arm_rebuild_hflags(CPUARMState *env) > env->hflags = rebuild_hflags_internal(env); > } > > +void HELPER(rebuild_hflags_m32)(CPUARMState *env, int el) > +{ > + int fp_el = fp_exception_el(env, el); > + ARMMMUIdx mmu_idx = arm_mmu_idx_el(env, el); > + > + env->hflags = rebuild_hflags_m32(env, fp_el, mmu_idx); > +} > + > +void HELPER(rebuild_hflags_a32)(CPUARMState *env, int el) > +{ > + int fp_el = fp_exception_el(env, el); > + ARMMMUIdx mmu_idx = arm_mmu_idx_el(env, el); > + > + env->hflags = rebuild_hflags_a32(env, fp_el, mmu_idx); > +} > + > +void HELPER(rebuild_hflags_a64)(CPUARMState *env, int el) > +{ > + int fp_el = fp_exception_el(env, el); > + ARMMMUIdx mmu_idx = arm_mmu_idx_el(env, el); > + > + env->hflags = rebuild_hflags_a64(env, el, fp_el, mmu_idx); > +} > + > void cpu_get_tb_cpu_state(CPUARMState *env, target_ulong *pc, > target_ulong *cs_base, uint32_t *pflags) > { -- Alex Bennée
diff --git a/target/arm/helper.h b/target/arm/helper.h index 1fb2cb5a77..3d4ec267a2 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -90,6 +90,10 @@ DEF_HELPER_4(msr_banked, void, env, i32, i32, i32) DEF_HELPER_2(get_user_reg, i32, env, i32) DEF_HELPER_3(set_user_reg, void, env, i32, i32) +DEF_HELPER_FLAGS_2(rebuild_hflags_m32, TCG_CALL_NO_RWG, void, env, int) +DEF_HELPER_FLAGS_2(rebuild_hflags_a32, TCG_CALL_NO_RWG, void, env, int) +DEF_HELPER_FLAGS_2(rebuild_hflags_a64, TCG_CALL_NO_RWG, void, env, int) + DEF_HELPER_1(vfp_get_fpscr, i32, env) DEF_HELPER_2(vfp_set_fpscr, void, env, i32) diff --git a/target/arm/helper.c b/target/arm/helper.c index 37424e3d4d..b2d701cf00 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -11220,6 +11220,30 @@ void arm_rebuild_hflags(CPUARMState *env) env->hflags = rebuild_hflags_internal(env); } +void HELPER(rebuild_hflags_m32)(CPUARMState *env, int el) +{ + int fp_el = fp_exception_el(env, el); + ARMMMUIdx mmu_idx = arm_mmu_idx_el(env, el); + + env->hflags = rebuild_hflags_m32(env, fp_el, mmu_idx); +} + +void HELPER(rebuild_hflags_a32)(CPUARMState *env, int el) +{ + int fp_el = fp_exception_el(env, el); + ARMMMUIdx mmu_idx = arm_mmu_idx_el(env, el); + + env->hflags = rebuild_hflags_a32(env, fp_el, mmu_idx); +} + +void HELPER(rebuild_hflags_a64)(CPUARMState *env, int el) +{ + int fp_el = fp_exception_el(env, el); + ARMMMUIdx mmu_idx = arm_mmu_idx_el(env, el); + + env->hflags = rebuild_hflags_a64(env, el, fp_el, mmu_idx); +} + void cpu_get_tb_cpu_state(CPUARMState *env, target_ulong *pc, target_ulong *cs_base, uint32_t *pflags) {
This functions are given the mode and el state of the cpu and writes the computed value to env->hflags. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/arm/helper.h | 4 ++++ target/arm/helper.c | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) -- 2.17.1