diff mbox series

[v6,19/20] target/arm: Rebuild hflags for M-profile.

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

Commit Message

Richard Henderson Oct. 11, 2019, 3:55 p.m. UTC
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

Comments

Alex Bennée Oct. 14, 2019, 7:08 p.m. UTC | #1
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 mbox series

Patch

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: