GCC and SPARC leaf procedures
Josef Ahmad
josef_ahm@yahoo.com
Tue Oct 26 13:34:00 GMT 2010
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@invia.fr> wrote:
> From: Jorge PEREZ <jorge.perez@invia.fr>
> Subject: Re: GCC and SPARC leaf procedures
> To: "Josef Ahmad" <josef_ahm@yahoo.com>
> Cc: gcc-help@gcc.gnu.org
> 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@invia.fr>
> wrote:
> >
> >
> >> From: Jorge PEREZ <jorge.perez@invia.fr>
> >> Subject: Re: GCC and SPARC leaf procedures
> >> To: "Josef Ahmad" <josef_ahm@yahoo.com>,
> gcc-help@gcc.gnu.org
> >> 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@invia.fr>
> >>>
> >> wrote:
> >>
> >>>
> >>>
> >>>> From: Jorge PEREZ <jorge.perez@invia.fr>
> >>>> Subject: GCC and SPARC leaf procedures
> >>>> To: gcc-help@gcc.gnu.org
> >>>> Cc: josef_ahm@yahoo.com
> >>>> 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
> >>>>
> >>>>
> >>>>
> >>>>
> >>>
> >>>
> >>>
> >>>
> >>
> >>
> >
> >
> >
> >
> >
>
>
>
More information about the Gcc-help
mailing list