This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Porting GCC troubles : about register window


On Tue, 30 Sep 2003, [gb2312] chen haibo wrote:
> > > But the call depth did exceed 16, then I
> > > should reserve all the registers to memory or each
> > set
> > > per time,and in my porting,I must each time to
> > > judge if the call depth exceeds 16.
> >
>  --- Hans-Peter Nilsson <hp@bitrange.com> µÄÕýÎÄ£º> On
> > I presume the register set pointer is a hidden
> > register, not
> > accessible from a program.
> >
> Yes,the register set pointer is part of a special
> register,say psw,and I can set it through some special
> instructions.

So you can test it in the function prologue (that the compiler
emits before the actual code in the function)?

> > >I think it is a
> > > very trouble thing,I wonder if the GCC porting
> > > mechanics has any interface to deal with it or if
> > any
> > > one know how to solve the problem.Wait for
> > help,Thanks all!
> >
> > Nothing other than the obvious: pass the call depth
> > as one of
> > the function parameters.
>
> But I don't think it pratical to force programmer to
> write a function with its call depth as a parameter
> and when we encounter a recursive function,we can not
> even know the exactly what the call depth is.

You're writing the compiler.  The point is that the *programmer*
doesn't do it; the *compiler* does it as part of the
function-call ABI, and the system that starts the program or the
startup code initializes it (and the function prologue when the
register set is moved to memory).

But I think it'd be better if checking the depth is done by
looking at the special register in the function prologue.

> I have seen that the INCOMING_REGNO,OUTGOING_REGNO and
> LOCAL_REGNO macro is used for register window,but I
> don't find it rather useful for my situation.

Those are mainly for mapping register numbers between caller and
callee, used when passing parameters.

brgds, H-P


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]