[PATCH v6 14/20] target/arm: Hoist store to cs_base in cpu_get_tb_cpu_state

Richard Henderson posted 20 patches 6 years, 4 months ago
Maintainers: Riku Voipio <riku.voipio@iki.fi>, Laurent Vivier <laurent@vivier.eu>, Peter Maydell <peter.maydell@linaro.org>
There is a newer version of this series
[PATCH v6 14/20] target/arm: Hoist store to cs_base in cpu_get_tb_cpu_state
Posted by Richard Henderson 6 years, 4 months ago
By performing this store early, we avoid having to save and restore
the register holding the address around any function calls.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/arm/helper.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/target/arm/helper.c b/target/arm/helper.c
index 3f7d3f257d..37424e3d4d 100644
--- a/target/arm/helper.c
+++ b/target/arm/helper.c
@@ -11225,6 +11225,7 @@ void cpu_get_tb_cpu_state(CPUARMState *env, target_ulong *pc,
 {
     uint32_t flags, pstate_for_ss;
 
+    *cs_base = 0;
     flags = rebuild_hflags_internal(env);
 
     if (is_a64(env)) {
@@ -11298,7 +11299,6 @@ void cpu_get_tb_cpu_state(CPUARMState *env, target_ulong *pc,
     }
 
     *pflags = flags;
-    *cs_base = 0;
 }
 
 #ifdef TARGET_AARCH64
-- 
2.17.1


Re: [PATCH v6 14/20] target/arm: Hoist store to cs_base in cpu_get_tb_cpu_state
Posted by Alex Bennée 6 years, 3 months ago
Richard Henderson <richard.henderson@linaro.org> writes:

> By performing this store early, we avoid having to save and restore
> the register holding the address around any function calls.

Been peeking at the assembly again ;-)

>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>

> ---
>  target/arm/helper.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/target/arm/helper.c b/target/arm/helper.c
> index 3f7d3f257d..37424e3d4d 100644
> --- a/target/arm/helper.c
> +++ b/target/arm/helper.c
> @@ -11225,6 +11225,7 @@ void cpu_get_tb_cpu_state(CPUARMState *env, target_ulong *pc,
>  {
>      uint32_t flags, pstate_for_ss;
>
> +    *cs_base = 0;
>      flags = rebuild_hflags_internal(env);
>
>      if (is_a64(env)) {
> @@ -11298,7 +11299,6 @@ void cpu_get_tb_cpu_state(CPUARMState *env, target_ulong *pc,
>      }
>
>      *pflags = flags;
> -    *cs_base = 0;
>  }
>
>  #ifdef TARGET_AARCH64


--
Alex Bennée