All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] tcg/arm: Expand epilogue inline
@ 2020-02-16  9:41 Richard Henderson
  2020-02-16  9:41 ` [PATCH v2 1/2] tcg/arm: Split out tcg_out_epilogue Richard Henderson
  2020-02-16  9:41 ` [PATCH v2 2/2] tcg/arm: Expand epilogue inline Richard Henderson
  0 siblings, 2 replies; 4+ messages in thread
From: Richard Henderson @ 2020-02-16  9:41 UTC (permalink / raw)
  To: qemu-devel; +Cc: philmd, Richard Henderson

From: Richard Henderson <rth@twiddle.net>

v1: http://patchwork.ozlabs.org/patch/1176721/
v2 splits the patch in half, as requested by Phil.


r~


Richard Henderson (2):
  tcg/arm: Split out tcg_out_epilogue
  tcg/arm: Expand epilogue inline

 tcg/arm/tcg-target.inc.c | 29 ++++++++++++-----------------
 1 file changed, 12 insertions(+), 17 deletions(-)

-- 
2.23.0



^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v2 1/2] tcg/arm: Split out tcg_out_epilogue
  2020-02-16  9:41 [PATCH v2 0/2] tcg/arm: Expand epilogue inline Richard Henderson
@ 2020-02-16  9:41 ` Richard Henderson
  2020-02-17  9:47   ` Philippe Mathieu-Daudé
  2020-02-16  9:41 ` [PATCH v2 2/2] tcg/arm: Expand epilogue inline Richard Henderson
  1 sibling, 1 reply; 4+ messages in thread
From: Richard Henderson @ 2020-02-16  9:41 UTC (permalink / raw)
  To: qemu-devel; +Cc: philmd, Richard Henderson

From: Richard Henderson <rth@twiddle.net>

We will shortly use this function from tcg_out_op as well.

Signed-off-by: Richard Henderson <rth@twiddle.net>
---
 tcg/arm/tcg-target.inc.c | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/tcg/arm/tcg-target.inc.c b/tcg/arm/tcg-target.inc.c
index fffb6611e2..e1aa740ba4 100644
--- a/tcg/arm/tcg-target.inc.c
+++ b/tcg/arm/tcg-target.inc.c
@@ -1746,6 +1746,7 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is64)
 }
 
 static tcg_insn_unit *tb_ret_addr;
+static void tcg_out_epilogue(TCGContext *s);
 
 static inline void tcg_out_op(TCGContext *s, TCGOpcode opc,
                 const TCGArg *args, const int *const_args)
@@ -2284,19 +2285,17 @@ static void tcg_out_nop_fill(tcg_insn_unit *p, int count)
       + TCG_TARGET_STACK_ALIGN - 1) \
      & -TCG_TARGET_STACK_ALIGN)
 
+#define STACK_ADDEND  (FRAME_SIZE - PUSH_SIZE)
+
 static void tcg_target_qemu_prologue(TCGContext *s)
 {
-    int stack_addend;
-
     /* Calling convention requires us to save r4-r11 and lr.  */
     /* stmdb sp!, { r4 - r11, lr } */
     tcg_out32(s, (COND_AL << 28) | 0x092d4ff0);
 
     /* Reserve callee argument and tcg temp space.  */
-    stack_addend = FRAME_SIZE - PUSH_SIZE;
-
     tcg_out_dat_rI(s, COND_AL, ARITH_SUB, TCG_REG_CALL_STACK,
-                   TCG_REG_CALL_STACK, stack_addend, 1);
+                   TCG_REG_CALL_STACK, STACK_ADDEND, 1);
     tcg_set_frame(s, TCG_REG_CALL_STACK, TCG_STATIC_CALL_ARGS_SIZE,
                   CPU_TEMP_BUF_NLONGS * sizeof(long));
 
@@ -2310,11 +2309,15 @@ static void tcg_target_qemu_prologue(TCGContext *s)
      */
     s->code_gen_epilogue = s->code_ptr;
     tcg_out_movi(s, TCG_TYPE_PTR, TCG_REG_R0, 0);
-
-    /* TB epilogue */
     tb_ret_addr = s->code_ptr;
+    tcg_out_epilogue(s);
+}
+
+static void tcg_out_epilogue(TCGContext *s)
+{
+    /* Release local stack frame.  */
     tcg_out_dat_rI(s, COND_AL, ARITH_ADD, TCG_REG_CALL_STACK,
-                   TCG_REG_CALL_STACK, stack_addend, 1);
+                   TCG_REG_CALL_STACK, STACK_ADDEND, 1);
 
     /* ldmia sp!, { r4 - r11, pc } */
     tcg_out32(s, (COND_AL << 28) | 0x08bd8ff0);
-- 
2.23.0



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v2 2/2] tcg/arm: Expand epilogue inline
  2020-02-16  9:41 [PATCH v2 0/2] tcg/arm: Expand epilogue inline Richard Henderson
  2020-02-16  9:41 ` [PATCH v2 1/2] tcg/arm: Split out tcg_out_epilogue Richard Henderson
@ 2020-02-16  9:41 ` Richard Henderson
  1 sibling, 0 replies; 4+ messages in thread
From: Richard Henderson @ 2020-02-16  9:41 UTC (permalink / raw)
  To: qemu-devel; +Cc: philmd, Richard Henderson

From: Richard Henderson <rth@twiddle.net>

It is, after all, just two instructions.

Profiling on a cortex-a15, using -d nochain to increase the number
of exit_tb that are executed, shows a minor improvement of 0.5%.

Signed-off-by: Richard Henderson <rth@twiddle.net>
---
 tcg/arm/tcg-target.inc.c | 12 ++----------
 1 file changed, 2 insertions(+), 10 deletions(-)

diff --git a/tcg/arm/tcg-target.inc.c b/tcg/arm/tcg-target.inc.c
index e1aa740ba4..6aa7757aac 100644
--- a/tcg/arm/tcg-target.inc.c
+++ b/tcg/arm/tcg-target.inc.c
@@ -1745,7 +1745,6 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is64)
 #endif
 }
 
-static tcg_insn_unit *tb_ret_addr;
 static void tcg_out_epilogue(TCGContext *s);
 
 static inline void tcg_out_op(TCGContext *s, TCGOpcode opc,
@@ -1756,14 +1755,8 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode opc,
 
     switch (opc) {
     case INDEX_op_exit_tb:
-        /* Reuse the zeroing that exists for goto_ptr.  */
-        a0 = args[0];
-        if (a0 == 0) {
-            tcg_out_goto(s, COND_AL, s->code_gen_epilogue);
-        } else {
-            tcg_out_movi32(s, COND_AL, TCG_REG_R0, args[0]);
-            tcg_out_goto(s, COND_AL, tb_ret_addr);
-        }
+        tcg_out_movi(s, TCG_TYPE_PTR, TCG_REG_R0, args[0]);
+        tcg_out_epilogue(s);
         break;
     case INDEX_op_goto_tb:
         {
@@ -2309,7 +2302,6 @@ static void tcg_target_qemu_prologue(TCGContext *s)
      */
     s->code_gen_epilogue = s->code_ptr;
     tcg_out_movi(s, TCG_TYPE_PTR, TCG_REG_R0, 0);
-    tb_ret_addr = s->code_ptr;
     tcg_out_epilogue(s);
 }
 
-- 
2.23.0



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v2 1/2] tcg/arm: Split out tcg_out_epilogue
  2020-02-16  9:41 ` [PATCH v2 1/2] tcg/arm: Split out tcg_out_epilogue Richard Henderson
@ 2020-02-17  9:47   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 4+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-02-17  9:47 UTC (permalink / raw)
  To: Richard Henderson, qemu-devel; +Cc: Richard Henderson

On 2/16/20 10:41 AM, Richard Henderson wrote:
> From: Richard Henderson <rth@twiddle.net>
> 
> We will shortly use this function from tcg_out_op as well.
> 
> Signed-off-by: Richard Henderson <rth@twiddle.net>
> ---
>   tcg/arm/tcg-target.inc.c | 19 +++++++++++--------
>   1 file changed, 11 insertions(+), 8 deletions(-)
> 
> diff --git a/tcg/arm/tcg-target.inc.c b/tcg/arm/tcg-target.inc.c
> index fffb6611e2..e1aa740ba4 100644
> --- a/tcg/arm/tcg-target.inc.c
> +++ b/tcg/arm/tcg-target.inc.c
> @@ -1746,6 +1746,7 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is64)
>   }
>   
>   static tcg_insn_unit *tb_ret_addr;
> +static void tcg_out_epilogue(TCGContext *s);
>   
>   static inline void tcg_out_op(TCGContext *s, TCGOpcode opc,
>                   const TCGArg *args, const int *const_args)
> @@ -2284,19 +2285,17 @@ static void tcg_out_nop_fill(tcg_insn_unit *p, int count)
>         + TCG_TARGET_STACK_ALIGN - 1) \
>        & -TCG_TARGET_STACK_ALIGN)
>   
> +#define STACK_ADDEND  (FRAME_SIZE - PUSH_SIZE)
> +
>   static void tcg_target_qemu_prologue(TCGContext *s)
>   {
> -    int stack_addend;
> -
>       /* Calling convention requires us to save r4-r11 and lr.  */
>       /* stmdb sp!, { r4 - r11, lr } */
>       tcg_out32(s, (COND_AL << 28) | 0x092d4ff0);
>   
>       /* Reserve callee argument and tcg temp space.  */
> -    stack_addend = FRAME_SIZE - PUSH_SIZE;
> -
>       tcg_out_dat_rI(s, COND_AL, ARITH_SUB, TCG_REG_CALL_STACK,
> -                   TCG_REG_CALL_STACK, stack_addend, 1);
> +                   TCG_REG_CALL_STACK, STACK_ADDEND, 1);
>       tcg_set_frame(s, TCG_REG_CALL_STACK, TCG_STATIC_CALL_ARGS_SIZE,
>                     CPU_TEMP_BUF_NLONGS * sizeof(long));
>   
> @@ -2310,11 +2309,15 @@ static void tcg_target_qemu_prologue(TCGContext *s)
>        */
>       s->code_gen_epilogue = s->code_ptr;
>       tcg_out_movi(s, TCG_TYPE_PTR, TCG_REG_R0, 0);
> -
> -    /* TB epilogue */
>       tb_ret_addr = s->code_ptr;
> +    tcg_out_epilogue(s);
> +}
> +
> +static void tcg_out_epilogue(TCGContext *s)
> +{
> +    /* Release local stack frame.  */
>       tcg_out_dat_rI(s, COND_AL, ARITH_ADD, TCG_REG_CALL_STACK,
> -                   TCG_REG_CALL_STACK, stack_addend, 1);
> +                   TCG_REG_CALL_STACK, STACK_ADDEND, 1);
>   
>       /* ldmia sp!, { r4 - r11, pc } */
>       tcg_out32(s, (COND_AL << 28) | 0x08bd8ff0);
> 

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

Thanks for splitting v1 :)



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-02-17  9:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-16  9:41 [PATCH v2 0/2] tcg/arm: Expand epilogue inline Richard Henderson
2020-02-16  9:41 ` [PATCH v2 1/2] tcg/arm: Split out tcg_out_epilogue Richard Henderson
2020-02-17  9:47   ` Philippe Mathieu-Daudé
2020-02-16  9:41 ` [PATCH v2 2/2] tcg/arm: Expand epilogue inline Richard Henderson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.