tcg/arm: Expand epilogue inline
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>
This commit is contained in:
parent
d6fa50f536
commit
fc1bfdfd0c
|
@ -1745,7 +1745,6 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is64)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static tcg_insn_unit *tb_ret_addr;
|
|
||||||
static void tcg_out_epilogue(TCGContext *s);
|
static void tcg_out_epilogue(TCGContext *s);
|
||||||
|
|
||||||
static inline void tcg_out_op(TCGContext *s, TCGOpcode opc,
|
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) {
|
switch (opc) {
|
||||||
case INDEX_op_exit_tb:
|
case INDEX_op_exit_tb:
|
||||||
/* Reuse the zeroing that exists for goto_ptr. */
|
tcg_out_movi(s, TCG_TYPE_PTR, TCG_REG_R0, args[0]);
|
||||||
a0 = args[0];
|
tcg_out_epilogue(s);
|
||||||
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);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case INDEX_op_goto_tb:
|
case INDEX_op_goto_tb:
|
||||||
{
|
{
|
||||||
|
@ -2309,7 +2302,6 @@ static void tcg_target_qemu_prologue(TCGContext *s)
|
||||||
*/
|
*/
|
||||||
s->code_gen_epilogue = s->code_ptr;
|
s->code_gen_epilogue = s->code_ptr;
|
||||||
tcg_out_movi(s, TCG_TYPE_PTR, TCG_REG_R0, 0);
|
tcg_out_movi(s, TCG_TYPE_PTR, TCG_REG_R0, 0);
|
||||||
tb_ret_addr = s->code_ptr;
|
|
||||||
tcg_out_epilogue(s);
|
tcg_out_epilogue(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue