On 05/17/2011 11:46 AM, Aurelien Jarno wrote:
>> - tcg_set_frame(s, TCG_AREG0, offsetof(CPUState, temp_buf),
>> - CPU_TEMP_BUF_NLONGS * sizeof(long));
>> }
>
> Note that this patch is likely to break calls to helpers which need
> parameters on the stack, by judging at the current code (I haven't
> tested it in practice):
>
> | if (allocate_args) {
> | tcg_out_addi(s, TCG_REG_CALL_STACK, -STACK_DIR(call_stack_size));
> | }
>
> The stack register (esp) is decreased.
I don't think this ever happens in practice, given that we've already
allocated TCG_STATIC_CALL_ARGS_SIZE worth of stack for calls. For
i386, that's 32 int-sized arguments, well more than any helper needs.
This code in tcg.c is way too simplistic to actually work on targets
with non-trivial stack allocation policies, e.g. ppc64. The fact
that the target works at present is testament to the fact that this
code doesn't actually trigger. I would be just as happy to remove
this dynamic stack allocation code and replace it with an assert.
r~