qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 07/20] tcg-arm: Fold epilogue into INDEX_op_e


From: Richard Henderson
Subject: Re: [Qemu-devel] [PATCH v3 07/20] tcg-arm: Fold epilogue into INDEX_op_exit_tb
Date: Thu, 28 Mar 2013 09:12:19 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130311 Thunderbird/17.0.4

On 03/28/2013 09:05 AM, Peter Maydell wrote:
> On 28 March 2013 15:32, Richard Henderson <address@hidden> 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?

I just wanted the comments for the stmia and ldmia to be the same, and near one
another.  Would it be better if tcg_target_qemu_prologue was moved up in the
file, and tb_ret_addr made a static const (which the compiler should fold)?

E.g.

/* ldmia sp!, { r4 - r12, pc }  @ See the stmia definition below.  */
static const uint32_t tb_pop_ret = ...;

static void tcg_target_qemu_prologue(TCGContext *s)
{
   /* comment */
   /* stmia sp!, {r4-r12, lr} */
   tcg_out32(...);
   ...
}

> 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.
>  */

Sure.


r~




reply via email to

[Prev in Thread] Current Thread [Next in Thread]