I don't know why, but I rebuilt the toolchain and now it is working (i.e. it generates leaf procedures). I repeat, it is one of the strangest behaviors I have ever noticed. Thank you anyway! Josef --- On Fri, 10/22/10, Jorge PEREZ <jorge.perez@xxxxxxxx> wrote: > From: Jorge PEREZ <jorge.perez@xxxxxxxx> > Subject: Re: GCC and SPARC leaf procedures > To: "Josef Ahmad" <josef_ahm@xxxxxxxxx> > Cc: gcc-help@xxxxxxxxxxx > Date: Friday, October 22, 2010, 11:59 AM > I checked something else, -O0 gives > me this > > 40001168 <myleafp>: > 40001168:  9d e3 bf 98 > ÂÂÂsave %sp, -104, %sp > 4000116c:  81 c7 e0 08 > ÂÂÂret > 40001170:  81 e8 00 00 > ÂÂÂrestore > > 40001174 <main>: > 40001174:  9d e3 bf 98 > ÂÂÂsave %sp, -104, %sp > 40001178:  7f ff ff fc > ÂÂÂcall 40001168 <myleafp> > 4000117c:  01 00 00 00 > ÂÂÂnop > 40001180:  82 10 20 00 > ÂÂÂclr %g1  ! 0 > <_trap_table-0x40000000> > 40001184:  b0 10 00 01 > ÂÂÂmov %g1, %i0 > 40001188:  81 c7 e0 08 > ÂÂÂret > 4000118c:  81 e8 00 00 > ÂÂÂrestore > > but -O2 gives the same as -Os, i.e. > > 40001168 <myleafp>: > 40001168:  81 c3 e0 08 > ÂÂÂretl > 4000116c:  01 00 00 00 > ÂÂÂnop > > 40001170 <main>: > 40001170:  81 c3 e0 08 > ÂÂÂretl > 40001174:  90 10 20 00 > ÂÂÂclr %o0  ! 0 > <_trap_table-0x40000000> > > so I guess it's not normal that you don't obtain the > optimization when > you use -O2 > > I confirm, I use sparc-elf 3.4.4 > > > Cheers, > > > George > > > > Josef Ahmad wrote: > > No, I looked out for any kind of errors during the > build of the cross-compiler version 3.4.4, I am quite sure > the tools are well built. Moreover, the leaf optimization > procedure is embedded with other back-end routines (I mean, > they reside into the same source files) and if something > went wrong during the build, the whole cross-compiler would > have been broken. > > > > Well, I give you an example of the generated code with > my gcc 3.4.4 cross-compiler (host: i686, target:sparc-elf). > > > > > - - - C source - - - > > void myleafp() { return; } > > > > int main(){ > >ÂÂÂmyleafp(); > >ÂÂÂreturn 0; > > } > > - - - > > > > sparc-elf-gcc issued with -O0 and -O2 gives the same > machine code: > > > > - - - obj dump - - - > > 40001170 <myleafp>: > > 40001170:  9d e3 bf 98 > ÂÂÂsave %sp, -104, %sp > > 40001174:  81 c7 e0 08 > ÂÂÂret > > 40001178:  81 e8 00 00 > ÂÂÂrestore > > > > 4000117c <main>: > > 4000117c:  9d e3 bf 98 > ÂÂÂsave %sp, -104, %sp > > 40001180:  7f ff ff fc > ÂÂÂcall 40001170 <myleafp> > > 40001184:  01 00 00 00 > ÂÂÂnop > > 40001188:  82 10 20 00 > ÂÂÂclr %g1  ! 0 > <_trap_table-0x40000000> > > 4000118c:  b0 10 00 01 > ÂÂÂmov %g1, %i0 > > 40001190:  81 c7 e0 08 > ÂÂÂret > > 40001194:  81 e8 00 00 > ÂÂÂrestore > > - - - > > > > Does your disassembly show a leaf procedure > optimization? > > > > Josef > > > > --- On Fri, 10/22/10, Jorge PEREZ <jorge.perez@xxxxxxxx> > wrote: > > > > > >> From: Jorge PEREZ <jorge.perez@xxxxxxxx> > >> Subject: Re: GCC and SPARC leaf procedures > >> To: "Josef Ahmad" <josef_ahm@xxxxxxxxx>, > gcc-help@xxxxxxxxxxx > >> Date: Friday, October 22, 2010, 10:44 AM > >> No problem Josef, > >> > >> however, I have tested that with GCC 3.4.4 and I'm > pretty > >> sure it does > >> the optimization there too. Maybe you had an error > during > >> the > >> cross-compiler build? > >> > >> > >> PS: please always reply to the mailing list > >> > >> > >> > >> > >> Josef Ahmad wrote: > >> Â > >>> Eh, you gave me the solution: I was using the > version > >>>  Â > >> 3.4.4 of gcc. > >> Â > >>> I've just tried to compile my source code with > gcc > >>>  Â > >> 4.4.2 and the optimization works. > >> Â > >>> It's kind of weird, because there is an > implementation > >>>  Â > >> for the leaf procedures optimization even in the > former > >> version, but perhaps it did not work yet. > >> Â > >>> Now the problem is partially solved, because I > am > >>>  Â > >> using a porting of gcc based on the version 3.4.4, > and I > >> would like to know how to obtain a leaf procedure > >> optimization (if possible) on that version. > Otherwise, I > >> think I have to plan to update the porting to a > newest > >> version of gcc. > >> Â > >>> Thank you! > >>> > >>> Josef > >>> > >>> --- On Fri, 10/22/10, Jorge PEREZ <jorge.perez@xxxxxxxx> > >>>  Â > >> wrote: > >> Â > >>>  > >>>  Â > >>>> From: Jorge PEREZ <jorge.perez@xxxxxxxx> > >>>> Subject: GCC and SPARC leaf procedures > >>>> To: gcc-help@xxxxxxxxxxx > >>>> Cc: josef_ahm@xxxxxxxxx > >>>> Date: Friday, October 22, 2010, 10:03 AM > >>>> Hello Josef > >>>> > >>>> I was intrigued by your email since I > actually > >>>>   Â > >> think that > >> Â > >>>> GCC performs > >>>> the leaf procedure optimization as > indicated by > >>>>   Â > >> the SPARC > >> Â > >>>> V8 manual ( > >>>> www.*sparc*.org/standards/*V8*.pdf p. > 194) > >>>> > >>>> However, note that there are certain > conditions > >>>>   Â > >> that must > >> Â > >>>> be met in > >>>> order to allow such optimizations, quoting > the > >>>>   Â > >> above > >> Â > >>>> referenced manual: > >>>> > >>>> Some leaf procedures can be made to > operate > >>>>   Â > >> without their > >> Â > >>>> own register > >>>> window > >>>> or stack frame, using their callerâs > instead. > >>>>   Â > >> This can be > >> Â > >>>> done when the > >>>> candidate > >>>> leaf procedure meets all of the following > >>>>   Â > >> conditions13: > >> Â > >>>> Contains no references to %sp, except in > its SAVE > >>>> instruction > >>>> Contains no references to %fp > >>>> Refers to (or can be made to refer to) no > more > >>>>   Â > >> than 8 of > >> Â > >>>> the 32 integer > >>>> regis- > >>>> ters14, inclusive of %o7 (the âreturn > >>>>   Â > >> addressâ). > >> Â > >>>> Actually there is a good example in a > recent > >>>>   Â > >> thread > >> Â > >>>> http://gcc.gnu.org/ml/gcc-help/2010-10/msg00249.html > >>>> where you can see that in the function > "somme", > >>>>   Â > >> which I > >> Â > >>>> think is a leaf > >>>> procedure, the SAVE and RESTORE > instructions have > >>>>   Â > >> been > >> Â > >>>> removed. What do > >>>> you think? > >>>> > >>>> > >>>> Otherwise, which GCC version are you > using? I > >>>>   Â > >> don't think > >> Â > >>>> that can be > >>>> related to that, but just to be sure. > >>>> > >>>> Cheers, > >>>> > >>>> > >>>> George > >>>> > >>>> > >>>>   > >>>>   Â > >>>    > >>> > >>>  > >>>  Â > >> > >> Â > > > > > > > > > > > > >