On Sat, 2007-10-27 at 12:54 +0200, Richard Guenther wrote:
> On 10/27/07, Robert Dewar <[EMAIL PROTECTED]> wrote:
> > skaller wrote:
> >
> > > So I am guessing the Felix version is lucky there are
> > > no gratuitous temporaries to be saved when this happens,
> > > and the C code is unlucky and there are.
> > >
> > > Maybe someone who knows how the optimiser works can comment?
> >
> > One problem with departing from the ABI even on a local level
> > like this is that it wipes out lots of tools that depend on
> > ABI compliance for the entire call chain. I suspect the overall
> > gain is too small to be worth this hit.
> 
> If you make the function static then gcc can chose ABI-incompatible
> calling conventions.

Yes, but to do so is reasonably hard because the choice of ABI
now depends on usage, which is scoped to the whole translation unit.

With a nested local function, it is scoped only to the parent
function, and in the simple wrapper case there is only one
call from the parent to the nested child, which doesn't have
any performance constraints on it. So the only calls that
matter when chosing the parameter passing model are the 
recursive ones inside the local wrapper.

It is probably still 'hard' to choose a good parameter passing
model even then. I used to write a lot of assembler code
and always grappled with this.

-- 
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net

Reply via email to