avr-gcc-list
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [avr-gcc-list] Not naked but "topless" functions?


From: Kang Tin LAI
Subject: Re: [avr-gcc-list] Not naked but "topless" functions?
Date: Fri, 18 Oct 2002 23:59:42 +0800

Long time ago I browsed gcc home site, there was a new register allocator by
Denis, may be already an improvement for this case you found, but not know
whether or not applied to version >= 3.2

-- 
---
Kang Tin LAI <address@hidden>
-----

Larry Barello wrote:
> 
> Avr-gcc has only 8 temporary registers available.  It steals a few others as
> conditions permit (e.g. if there is no frame, it can use Y, it can also use
> just about everything else if conditions permit)  It also does a *very* good
> job of recycling registers throughout the function.  That is why you can
> declare many more local variables than actually get allocated.  However,
> just try to declare a structure with more than 8 bytes and see what happens,
> or have an endless loop (while(1) { ... }) and use automatics to hold state
> variables (variables that never go out of scope) and recycling is no longer
> possible and when you hit the 8 byte limit stuff *will* go onto the stack.
> 
> I may have the details off a bit, but the general idea holds: Naked is
> broken except in restricted circumstances, Kang's version of "naked"
> (actually "noreturn") should be in GCC as it covers "naked" and allows frame
> variables.
> 
> Cheers!
> 
> ----- Original Message -----
> From: "Kang Tin LAI" <address@hidden>
> > >
> > > Only 8? Once I tested how many register variables I can have, and when I
> used
> > > 30 of them, compiler put only 5 of them on the stack!? When I used 20,
> none
> > > was on the stack. Is there an fixed number of available registers? Some
> are
> > > reserved like r0,r1. All other registers are free or not?
> > >
> >
> >
> > It is depended on what type of local vars, for example:
> >
> > char a, b, c, d;
> >
> > If in your function, no "address" operation, such as &a; then all vars
> should be
> > hold by register, another case, in your function, a function call for
> example,
> > takes a address of a vars as argument:
> >
> > swap(&a, &b);
> >
> > then a and b will be allocated in the stack.
> >
> > I believe that number of register allocated for local vars is not a
> concern.
> 
> avr-gcc-list at http://avr1.org
avr-gcc-list at http://avr1.org



reply via email to

[Prev in Thread] Current Thread [Next in Thread]