I've started now the final changes to switch to variable-sized register frames. And while I've said that no JIT code will break, this is only true for correct and well-behaved JIT code.

About a year ago the base-pointer (interpreter->ctx.bp) for register addressing was introduced and src/jit.c supports offset-based functions for moving registers from cpu to parrot and v.v.

But this code is obviously only used inside jit/i386. Anyway I can test JIT only on PPC and x86. 'make testj' on other platforms might already be broken with rev 9513.

I've committed an intermediate fix for PPC. While it still uses &REG_INT(x) and such, these absolute addresses are converted immediately back to offsets relative to interpreter->ctx.bp and then used as offsets relative to 'r13', the base pointer at runtime.

Similar fixes can probably be applied to other JIT platforms too.
A simpler way is just to use offsets in the first place.

See also: src/jit.c JIT_USE_OFFS and macros ROFFS_INT(), REG_OFFS_INT(), ...

leo

Reply via email to