logo       

Re: register allocation questions: msg#00571

lang.perl.perl6.internals

Subject: Re: register allocation questions

At 11:09 AM +0200 10/26/04, Leopold Toetsch wrote:
Bill Coffman <bill.coffman@xxxxxxxxx> wrote:
> 1) In the existing parrot code, when a register is assigned, it uses
the following code:

int c = (color + MAX_COLOR/2) % MAX_COLOR;

Thus, it seems to prefer to use register #16 and up, first, before it
uses 0-15. This is mistifying to me, since it's not so trivial to
code it this way,

Well, some time ago, register allocation started at zero. The split of
register frames in upper and lower halfs *plus* the premature
optimization to save only the upper half of registers made it necessary
to allocate from 16 up.

But things are a bit more compilcated. For function calls, we are
passing arguments from register x5 ..x15 and I0..I4 plus some more have
a special meaning. See docs/ppds/pdd03_calling_conventions for all the
details. The same convention is used for function returns.

So, if you want that really super efficient, you would allocate
registers around function calls directly to that wanted register number,
which should be in the SymReg's want_regno.

While true, in the general case leaving 0-15 as non-preferred registers will probably make things easier. Those registers, especially the PMC ones, are going to see a lot of thrash as function calls are made, and it'll probably be easier to have them as scratch registers.

It's distinctly possible, of course, that there'll be very little pressure to actually *use* them for most code, as we've got plenty of registers in general. That's the hope, at least.

--
Dan

--------------------------------------it's like this-------------------
Dan Sugalski even samurai
dan@xxxxxxxxx have teddy bears and even
teddy bears get drunk



<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise