This is a list of changes between the released versions of LuaJIT. The current version is LuaJIT 1.1.6.
Please check the » Online Change History to see whether newer versions are available.
LuaJIT 1.1.6 — 2010-03-28
- Added fixes for the » currently known bugs in Lua 5.1.4.
- Removed wrong GC check in jit_createstate(). Thanks to Tim Mensch.
- Fixed bad assertions while compiling table.insert() and table.remove().
LuaJIT 1.1.5 — 2008-10-25
- Merged with Lua 5.1.4. Fixes all » known bugs in Lua 5.1.3.
LuaJIT 1.1.4 — 2008-02-05
- Merged with Lua 5.1.3. Fixes all » known bugs in Lua 5.1.2.
- Fixed possible (but unlikely) stack corruption while compiling k^x expressions.
- Fixed DynASM template for cmpss instruction.
LuaJIT 1.1.3 — 2007-05-24
- Merged with Lua 5.1.2. Fixes all » known bugs in Lua 5.1.1.
- Merged pending Lua 5.1.x fixes: "return -nil" bug, spurious count hook call.
- Remove a (sometimes) wrong assertion in luaJIT_findpc().
- DynASM now allows labels for displacements and .aword.
- Fix some compiler warnings for DynASM glue (internal API change).
- Correct naming for SSSE3 (temporarily known as SSE4) in DynASM and x86 disassembler.
- The loadable debug modules now handle redirection to stdout (e.g. -j trace=-).
LuaJIT 1.1.2 — 2006-06-24
- Fix MSVC inline assembly: use only local variables with lua_number2int().
- Fix "attempt to call a thread value" bug on Mac OS X: make values of consts used as lightuserdata keys unique to avoid joining by the compiler/linker.
LuaJIT 1.1.1 — 2006-06-20
- Merged with Lua 5.1.1. Fixes all » known bugs in Lua 5.1.
- Enforce (dynamic) linker error for EXE/DLL version mismatches.
- Minor changes to DynASM: faster preprocessing, smaller encoding for some immediates.
This release is in sync with Coco 1.1.1 (see the Coco Change History).
LuaJIT 1.1.0 — 2006-03-13
- Merged with Lua 5.1 (final).
- New JIT call frame setup:
- The C stack is kept 16 byte aligned (faster). Mandatory for Mac OS X on Intel, too.
- Faster calling conventions for internal C helper functions.
- Better instruction scheduling for function prologue, OP_CALL and OP_RETURN.
- Miscellaneous optimizations:
- Faster loads of FP constants. Remove narrow-to-wide store-to-load forwarding stalls.
- Use (scalar) SSE2 ops (if the CPU supports it) to speed up slot moves and FP to integer conversions.
- Optimized the two-argument form of OP_CONCAT (a..b).
- Inlined OP_MOD (a%b). With better accuracy than the C variant, too.
- Inlined OP_POW (a^b). Unroll x^k or use k^x = 2^(log2(k)*x) or call pow().
- Changes in the optimizer:
- Improved hinting for table keys derived from table values (t1[t2[x]]).
- Lookup hinting now works with arbitrary object types and supports index chains, too.
- Generate type hints for arithmetic and comparison operators, OP_LEN, OP_CONCAT and OP_FORPREP.
- Remove several hint definitions in favour of a generic COMBINE hint.
- Complete rewrite of jit.opt_inline module (ex jit.opt_lib).
- Use adaptive deoptimization:
- If runtime verification of a contract fails, the affected instruction is recompiled and patched on-the-fly. Regular programs will trigger deoptimization only occasionally.
- This avoids generating code for uncommon fallback cases most of the time. Generated code is up to 30% smaller compared to LuaJIT 1.0.3.
- Deoptimization is used for many opcodes and contracts:
- OP_CALL, OP_TAILCALL: type mismatch for callable.
- Inlined calls: closure mismatch, parameter number and type mismatches.
- OP_GETTABLE, OP_SETTABLE: table or key type and range mismatches.
- All arithmetic and comparison operators, OP_LEN, OP_CONCAT, OP_FORPREP: operand type and range mismatches.
- Complete redesign of the debug and traceback info (bytecode ↔ mcode) to support deoptimization. Much more flexible and needs only 50% of the space.
- The modules jit.trace, jit.dumphints and jit.dump handle deoptimization.
- Inlined many popular library functions
(for commonly used arguments only):
- Most math.* functions (the 18 most used ones) [2x-10x faster].
- string.len, string.sub and string.char [2x-10x faster].
- table.insert, table.remove and table.getn [3x-5x faster].
- coroutine.yield and coroutine.resume [3x-5x faster].
- pairs, ipairs and the corresponding iterators [8x-15x faster].
- Changes in the core and loadable modules and the stand-alone executable:
- Added jit.version, jit.version_num and jit.arch.
- Reorganized some internal API functions (jit.util.*mcode*).
- The -j dump output now shows JSUB names, too.
- New x86 disassembler module written in pure Lua. No dependency on ndisasm anymore. Flexible API, very compact (500 lines) and complete (x87, MMX, SSE, SSE2, SSE3, SSSE3, privileged instructions).
- luajit -v prints the LuaJIT version and copyright on a separate line.
- Added SSE, SSE2, SSE3 and SSSE3 support to DynASM.
- Miscellaneous doc changes. Added a section about embedding LuaJIT.
This release is in sync with Coco 1.1.0 (see the Coco Change History).
LuaJIT 1.0.3 — 2005-09-08
- Even more docs.
- Unified closure checks in jit.*.
- Fixed some range checks in jit.util.*.
- Fixed __newindex call originating from jit_settable_str().
- Merged with Lua 5.1 alpha (including early bugfixes).
This is the first public release of LuaJIT.
LuaJIT 1.0.2 — 2005-09-02
- Add support for flushing the Valgrind translation cache
(MYCFLAGS= -DUSE_VALGRIND). - Add support for freeing executable mcode memory to the mmap()-based variant for POSIX systems.
- Reorganized the C function signature handling in jit.opt_lib.
- Changed to index-based hints for inlining C functions. Still no support in the backend for inlining.
- Hardcode HEAP_CREATE_ENABLE_EXECUTE value if undefined.
- Misc. changes to the jit.* modules.
- Misc. changes to the Makefiles.
- Lots of new docs.
- Complete doc reorg.
Not released because Lua 5.1 alpha came out today.
LuaJIT 1.0.1 — 2005-08-31
- Missing GC step in OP_CONCAT.
- Fix result handling for C –> JIT calls.
- Detect CPU feature bits.
- Encode conditional moves (fucomip) only when supported.
- Add fallback instructions for FP compares.
- Add support for LUA_COMPAT_VARARG. Still disabled by default.
- MSVC needs a specific place for the CALLBACK attribute (David Burgess).
- Misc. doc updates.
Interim non-public release. Special thanks to Adam D. Moss for reporting most of the bugs.
LuaJIT 1.0.0 — 2005-08-29
This is the initial non-public release of LuaJIT.