On Sat, Dec 9, 2017 at 12:22 AM, David Laight <David.Laight@xxxxxxxxxx> wrote: > 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. > Hi, David, Sorry, I'm not sure we're worrying about the cpu cost or codes style now ? For cpu cost, I think 0x848(%r13) operation must be better than the generated code of if-else. For the codes style, comparing to the if-else, I think this one is more readable. (ignore extendible stuff first, as probably no more new type of data chunk). -- To unsubscribe from this list: send the line "unsubscribe linux-sctp" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html