On 28 March 2013 15:32, Richard Henderson <r...@twiddle.net> wrote: > The epilogue on ARM is one pop instruction, that pops the return > address into PC. Avoid the jump to jump for this case. Use the > standard movi32 routine for loading the return value if it's easy.
> @@ -2025,8 +2023,7 @@ static void tcg_target_qemu_prologue(TCGContext *s) > tcg_out_mov(s, TCG_TYPE_PTR, TCG_AREG0, tcg_target_call_iarg_regs[0]); > > tcg_out_bx(s, COND_AL, tcg_target_call_iarg_regs[1]); > - tb_ret_addr = s->code_ptr; > > /* ldmia sp!, { r4 - r12, pc } */ > - tcg_out32(s, (COND_AL << 28) | 0x08bd9ff0); > + tb_pop_ret = (COND_AL << 28) | 0x08bd9ff0; > } Why are we using a variable when it's always constant? Also, please add a comment to the bottom of the qemu_prologue() saying something like /* We never return here; we always return directly from generated * code to our caller. */ thanks -- PMM