This is the mail archive of the
mailing list for the GCC project.
Re: Porting GCC troubles : about register window
- From: Hans-Peter Nilsson <hp at bitrange dot com>
- To: chen haibo <chbchb1130 at yahoo dot com dot cn>
- Cc: gcc at gcc dot gnu dot org
- Date: Tue, 30 Sep 2003 02:56:43 -0400 (EDT)
- Subject: 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 <email@example.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
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.