Skip to content
Dibyendu Majumdar edited this page May 2, 2015 · 26 revisions

Change Log

1-May-2015

Updated to build with LLVM 3.7

28-Apr-2015

Added ability to dump out the assembly code

26-Apr-20115

Added options for better control of auto compilation

24-Apr-2015

Added MAC OS X as a supported platform

20-Apr-2015

Restricted JIT execution to main thread to enable coroutines to work in interpreted mode

17-Apr-2015

Revised tbaa metadata to use struct path nodes consistently

14-Apr-2015

Added support for Ravi arrays in pairs() and ipairs()

12-Apr-2015

Implemented new opcodes to enable typed checking of upvalue operations

9-Apr-2015

Implemented faster version of fornum loop when index is integer and step is a positive constant

4-Apr-2015

Added API to control JIT optimisation levels

3-Apr-2015

Implemented OP_RAVI_TOARRAY? and OP_RAVI_MOVEA? opcodes in LLVM

30-Mar-2015

Implemented OP_RAVI_SETTABLE_A? and OP_RAVI_GETTABLE_A? in LLVM

28-Mar-2015

Implemented OP-CLOSURE, OP_CONCAT and OP_VARARG in LLVM

27-Mar-2015

Implemented OP_LOADKX, OP_SELF in LLVM

26-Mar-2015

Implemented OP_SETUPVAL and OP_SETUPTAB in LLVM

25-Mar-2015

Implemented OP_POW, OP_UNM in LLVM

24-Mar-2015

Implemented OP_LEN in LLVM

23-Mar-2015

Implemented OP_IDIV, OP_NOT and OP_MOD in LLVM

21-Mar-2015

Implemented OP_TFORCALL and OP_TFORLOOP in LLVM

20-Mar-2015

Implemented OP_NEWTABLE, OP_SELIST and OP_TAILCALL in LLVM

18-Mar-2015

Implemented OP_RAVI_NEWARRAY?, OP_GETUPVAL, OP_GETTABUP in LLVM

15-Mar-2015

Implemented OP_DIV, OP_ADD, OP_SUB, and OP_MUL in LLVM

12-Mar-2015

Implemented OP_TEST and OP_TESTSET in LLVM

8-Mar-2015

Several more op codes added. Plus an API added for compiling functions.

1-Mar-2015

Checked in implementation of OP_FORPREP, OP_FORLOOP and OP_MOVE in LLVM. Added simple forloop benchmark.

28-Feb-2015

Checked in implementation of FORPREP opcode in LLVM; reorganised some of the LLVM generation code

24-Feb-2015

Added tbaa decorations in LLVM IR to allow better optimization.

21-Feb-2015

Implemented LLVM code generation for OP_LOADK, OP_RETURN, OP_LT, OP_LE, OP_EQ, OP_JMP. A function with only these instructions is compiled before execution provided it was called from OP_CALL instruction in lvm.c.

13-Feb-2015

Checked in LLVM type definitions for major Lua structures that will need to be used by the JITed code.

7-Feb-2015

Created some basic structures for LLVM interface.

4-Feb-2015

LLVM is now a dependency of the build process.

29-Jan-2015

Removed some arithmetic operators as they were redundant. Added ADDFIRN and ADDIIRN for when the constant is small and can be set to operand C. More such cleanup needed for SUB & MUL operators.

28-Jan-2015

More changes to support array types. Also better support for inferring types in fornum statements.

27-Jan-2015

Added new op codes for creating int and double arrays. Made changes to the parser to recognize array declarations. Made changes to VM to handle array types. TODO - need to initialize array variables. Need to allow set a typed variable to a value of array element if types are same. Need to ensure that user cannot subvert the array type. Need to set extra elements to nil to ensure compatibility.

26-Jan-2015

Started work on supporting array type. Right now working on enhancing the table type to support specialized array operations.

24-Jan-2015

More fixes for how we identify the types for variable in local declaration statements. int and double variables initialized to 0 using new opcodes LOADIZ and LOADFZ. Also changed the type identification referred to below to use the 'nactvar' instead of relying on 'startpc'.

21-Jan-2015

Fixed an issue with type identification of registers - as Lua code can have declarations mixed with executable code, a reference to a local variable needs to be checked against the code range where the variable is 'visible'. The code that checks for the type of a register was missing this check and hence incorrectly identifying the type. Also added ability to control and generate debug messages at run time - focus is on parser and code generation.

17-Jan-2015

Added opcodes for coercing values to expected types after a function call. Expanded the arithmetic opcodes to include MUL, DIV and SUB operations.

16-Jan-2015

Working on figuring out a way to coerce types after a function call. This is necessary due to dynamic nature of Lua - the return type of a function is not known at compilation time.

11-Jan-2015

Added the ability to generate code for local variables with type decorations (only int and double) for now, and support for type specific instructions to perform arithmetic operations; also added code to validate types to ensure that variables that are typed do not get assigned values of wrong type.

09-Jan-2015

Went back to 32-bit instructions due to complexity of the 2-instruction approach.

07-Jan-2015

Added RAVI opcodes for eq, lt, le operators Enhanced parser to recognise local name:type syntax. But constants are not typed yet.

06-Jan-2015

Added RAVI opcode implementation in lvm.c for add, sub, mul and div operations.

05-Jan-2015

Added various opcodes in opcodes.h. OP_RAVI opcode introduces a 64-bit instruction where the real opcode is stored in 10 bits - and a,b & c take up 16 bits each.

02-Jan-2015

Added RAVI opcode UNMF to the VM - floating point unary minus.

01-Jan-2015

Need to add more opcodes. So as a first step modified the SIZE_OP to 8 bits and adjusted SIZE_B and SIZE_C in lopcodes.h. Also in luaconf.h change LUAI_FUNC to LUA_API so that we can write some test cases using internal routines.