At 6:13 PM +0200 10/20/04, Leopold Toetsch wrote:
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.

Good. Today I can manage eaiser. I'm not sure past 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.

'Kay, now I'm confused. I thought we were talking about removing the registers from out of the interpreter structure, which'd leave us needing two pointers, one for the interpreter struct and one for the registers. (With no link back from the register stack top to the interpreter) That not the case?
--
Dan


--------------------------------------it's like this-------------------
Dan Sugalski                          even samurai
[EMAIL PROTECTED]                         have teddy bears and even
                                      teddy bears get drunk

Reply via email to