* [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
* 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
* [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
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 a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).