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