From: Xin Long
> Sent: 08 December 2017 16:18
>
...
> >> Alternatively you could preform the dereference in two steps (i.e. declare
> >> an si
> >> pointer on the stack and set it equal to asoc->stream.si, then deref
> >> si->make_datafrag at call time. That will at least give the compiler an
> >> opportunity to preload the first pointer.
You want to save the function pointer itself.
...
> Another small difference:
> as you can see, comparing to (X), (Y) is using 0x28(%rsp) in the loop,
> instead of %r13.
>
> So that's what I can see from the related generated code.
> If 0x848(%r13) is not worse than 0x28(%rsp) for cpu, I think
> asoc->stream.si->make_datafrag() is even better. No ?
That code must have far too many life local variables.
Otherwise there's be a caller saved register available.
David