Dan Sugalski wrote:
At 9:16 AM +0200 10/20/04, Leopold Toetsch wrote:

Right. Any time an actual continuation is created we need to walk back up the call chain and mark all the pending return continuations as non-recyclable.

Ok.

If we're not saving much on the register stacks (and with the switch in calls we won't be, which means we can drop the pushtop/poptop stuff on calls) it's easier to go with a one-frame-per-chunk setup.

Yep, it's easier. Let's start with that.

r16 = BP_OFFS(r13) # get base bointer from interpreter

What, we have two registers dedicated? One for the interpreter pointer and one for the start of registers? I didn't realize that. If so, then nevermind.

Well, not quite ;) But it's absolutely no problem for e.g. PPC. It got plenty of callee-saved registers. For i386 the frame-pointer is currently being created in %ebx, interpreter access, which is basically rare, needs:


  mov -16(%ebp), %eax       # get interpreter

And that's needed too for getting the new frame pointer

  mov BP_OFFS(%eax), %ebx   # only for reload after invoke

Accessing e.g. a non-mapped I2 is already:

  mov 8(%ebx), %eax

which isn't worse then the old absolute address thingy.

leo



Reply via email to