A long overdue change is now committed dicussed around more then a year ago.

The short story:

* interpreter->code is now a PackFile_ByteCode pointer
* the "shortcut" pointers to prederef or jit_info are gone
* switching a bytecode segment for a function call or return is now basically just one C instruction:


   interpreter->code = prev_segment;   // return only

The longer story:

interpreter->code used to be a PackFile pointer. The PackFile had shortcuts to byte_code or const_table. But code segments are created or loaded in terms of PackFile_ByteCode, which has it's own pointers to code start, constant table and what not.

We had a mixture of both bytecode addressing schemes and additional shortcuts to get rid of some indirections. This caused a rather complicated sequence to switch to another code segment. See Parrot_switch_to_cs() (or the diff thereof).

Unfortunately but not surprisingly interpreter->code is used all over the interpreter and in platform code like JIT or EXEC core. This makes the patch rather big and worse: I couldn't test all the changes.

I did replace all the obvious pieces in JIT and EXEC code, but I might have missed some so that it won't even compile. Needed changes are basically:

  interpreter->code->byte_code   => interpreter->code->base.data
  interpreter->jit_info          => interpreter->code->jit_info

But some of the former might be hidden in assembly generating code or even macros.

I've tested it on i386/linux and ppc/OS X. If some other platforms stop compiling or JIT doesn't work anymore please have a look at changes for i386 or ppc - or just mail a bug report.

Sorry for the inconvenience,
leo



Reply via email to