Message ID | 20191011155546.14342-20-richard.henderson@linaro.org |
---|---|
State | New |
Headers | show |
Series | target/arm: Reduce overhead of cpu_get_tb_cpu_state | expand |
Richard Henderson <richard.henderson@linaro.org> writes: > Continue setting, but not relying upon, env->hflags. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> > --- > target/arm/m_helper.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/target/arm/m_helper.c b/target/arm/m_helper.c > index 27cd2f3f96..f2512e448e 100644 > --- a/target/arm/m_helper.c > +++ b/target/arm/m_helper.c > @@ -494,6 +494,7 @@ void HELPER(v7m_bxns)(CPUARMState *env, uint32_t dest) > switch_v7m_security_state(env, dest & 1); > env->thumb = 1; > env->regs[15] = dest & ~1; > + arm_rebuild_hflags(env); > } > > void HELPER(v7m_blxns)(CPUARMState *env, uint32_t dest) > @@ -555,6 +556,7 @@ void HELPER(v7m_blxns)(CPUARMState *env, uint32_t dest) > switch_v7m_security_state(env, 0); > env->thumb = 1; > env->regs[15] = dest; > + arm_rebuild_hflags(env); > } > > static uint32_t *get_v7m_sp_ptr(CPUARMState *env, bool secure, bool threadmode, > @@ -895,6 +897,7 @@ static void v7m_exception_taken(ARMCPU *cpu, uint32_t lr, bool dotailchain, > env->regs[14] = lr; > env->regs[15] = addr & 0xfffffffe; > env->thumb = addr & 1; > + arm_rebuild_hflags(env); > } > > static void v7m_update_fpccr(CPUARMState *env, uint32_t frameptr, > @@ -1765,6 +1768,7 @@ static void do_v7m_exception_exit(ARMCPU *cpu) > > /* Otherwise, we have a successful exception exit. */ > arm_clear_exclusive(env); > + arm_rebuild_hflags(env); > qemu_log_mask(CPU_LOG_INT, "...successful exception return\n"); > } > > @@ -1837,6 +1841,7 @@ static bool do_v7m_function_return(ARMCPU *cpu) > xpsr_write(env, 0, XPSR_IT); > env->thumb = newpc & 1; > env->regs[15] = newpc & ~1; > + arm_rebuild_hflags(env); > > qemu_log_mask(CPU_LOG_INT, "...function return successful\n"); > return true; > @@ -1959,6 +1964,7 @@ static bool v7m_handle_execute_nsc(ARMCPU *cpu) > switch_v7m_security_state(env, true); > xpsr_write(env, 0, XPSR_IT); > env->regs[15] += 4; > + arm_rebuild_hflags(env); > return true; > > gen_invep: -- Alex Bennée
diff --git a/target/arm/m_helper.c b/target/arm/m_helper.c index 27cd2f3f96..f2512e448e 100644 --- a/target/arm/m_helper.c +++ b/target/arm/m_helper.c @@ -494,6 +494,7 @@ void HELPER(v7m_bxns)(CPUARMState *env, uint32_t dest) switch_v7m_security_state(env, dest & 1); env->thumb = 1; env->regs[15] = dest & ~1; + arm_rebuild_hflags(env); } void HELPER(v7m_blxns)(CPUARMState *env, uint32_t dest) @@ -555,6 +556,7 @@ void HELPER(v7m_blxns)(CPUARMState *env, uint32_t dest) switch_v7m_security_state(env, 0); env->thumb = 1; env->regs[15] = dest; + arm_rebuild_hflags(env); } static uint32_t *get_v7m_sp_ptr(CPUARMState *env, bool secure, bool threadmode, @@ -895,6 +897,7 @@ static void v7m_exception_taken(ARMCPU *cpu, uint32_t lr, bool dotailchain, env->regs[14] = lr; env->regs[15] = addr & 0xfffffffe; env->thumb = addr & 1; + arm_rebuild_hflags(env); } static void v7m_update_fpccr(CPUARMState *env, uint32_t frameptr, @@ -1765,6 +1768,7 @@ static void do_v7m_exception_exit(ARMCPU *cpu) /* Otherwise, we have a successful exception exit. */ arm_clear_exclusive(env); + arm_rebuild_hflags(env); qemu_log_mask(CPU_LOG_INT, "...successful exception return\n"); } @@ -1837,6 +1841,7 @@ static bool do_v7m_function_return(ARMCPU *cpu) xpsr_write(env, 0, XPSR_IT); env->thumb = newpc & 1; env->regs[15] = newpc & ~1; + arm_rebuild_hflags(env); qemu_log_mask(CPU_LOG_INT, "...function return successful\n"); return true; @@ -1959,6 +1964,7 @@ static bool v7m_handle_execute_nsc(ARMCPU *cpu) switch_v7m_security_state(env, true); xpsr_write(env, 0, XPSR_IT); env->regs[15] += 4; + arm_rebuild_hflags(env); return true; gen_invep:
Continue setting, but not relying upon, env->hflags. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/arm/m_helper.c | 6 ++++++ 1 file changed, 6 insertions(+) -- 2.17.1