At 11:09 AM +0200 10/26/04, Leopold Toetsch wrote:
Bill Coffman <[EMAIL PROTECTED]> 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
[EMAIL PROTECTED]                         have teddy bears and even
                                      teddy bears get drunk

Reply via email to