On Mon, May 23, 2016 at 07:17:38PM +0200, Gabriel Paubert wrote: > On Mon, May 23, 2016 at 10:46:02AM +0200, Christophe Leroy wrote: > > current_stack_pointeur() is a single instruction function. it > > It is not worth breaking the execution flow with a bl/blr for a > > single instruction > > Are you sure that the result is always the same? > > Calling an external function prevents the compiler from considering the > caller of of current_stack_pointer a leaf function, which certainly > does not help the compiler, but in a leaf function the compiler is free > not to establish a new frame. > > If the compiler decides to establishes a new frame (typically with > "stwu r1,-frame_size(r1)"), *r1 is the previous stack pointer, or > the caller's stack pointer, or the current function frame pointer if > I remember correctly the ABI definitions. > > However, if the compiler decides that it can get away without a frame > for the function, *r1 is the stack pointer of the caller's caller. > > Depending on the application, this may or may not be important.
Right. I think I wrote the original current_stack_pointer() implementation, and that I deliberately didn't make it an inline so that the caller would have to establish its own stack frame, and thus its stack pointer value would be a well-defined thing. Paul. _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev