[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Compile LUA Opcodes
- From: Eero Pajarre <epajarre@...>
- Date: Fri, 03 Oct 2003 10:57:07 +0300
Jason P wrote:
I don't know if anyone else would be interested, but I would like to see
a dynamic JIT style compiler for LUA opcodes to machine code. It would
be callable inside the LUA via a 'JIT_Compile(<function>)' interface
perhaps? This is one method I have thought about implementing:
Look through/Learn the LUA internal Opcode C Source.
Bundle TinyCC with LUA.
Write a routine to parse LUA opcodes into one C source program, wrapped
as a LUA function.
Pass that program to TinyCC to compile dynamically.
Get the function symbol back from TinyCC and register it with LUA.
I have also considered (offline) compilation of Lua byte codes to
C-code. In addition to the metamethod problem which LHF mentioned
I have been worried about the added bouncing between C and Lua
language environments and its cost.
My first try on the code generation would basically unroll
the loop in luaV_execute for each instruction (each instruction
would be a constant value for this unrolled program), and let
the C optimizer do its work. Obviously dropping the
unused branches from the main opcode switch would clean the resulting
mess a lot.
This might give noticeable performance benefits, because currently
on my profiling the expensive part of the interpreter is that
the code in luaV_execute has lots of branches which are
impossible to guess correctly by the processor. With
a compile time constant opcode the compiler should get rid of these
Btw. TinyCC seems to be under LGPL license so I would not touch it
for my current projects.