1 <!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4 <title>LuaJIT Change History
</title>
5 <meta http-equiv=
"Content-Type" content=
"text/html; charset=iso-8859-1">
6 <meta name=
"Author" content=
"Mike Pall">
7 <meta name=
"Copyright" content=
"Copyright (C) 2005-2016, Mike Pall">
8 <meta name=
"Language" content=
"en">
9 <link rel=
"stylesheet" type=
"text/css" href=
"bluequad.css" media=
"screen">
10 <link rel=
"stylesheet" type=
"text/css" href=
"bluequad-print.css" media=
"print">
11 <style type=
"text/css">
12 div
.major
{ max-width: 600px; padding: 1em; margin: 1em 0 1em 0; }
17 <a href=
"http://luajit.org"><span>Lua
<span id=
"logo">JIT
</span></span></a>
20 <h1>LuaJIT Change History
</h1>
24 <a href=
"luajit.html">LuaJIT
</a>
26 <a href=
"http://luajit.org/download.html">Download
<span class=
"ext">»</span></a>
28 <a href=
"install.html">Installation
</a>
30 <a href=
"running.html">Running
</a>
33 <a href=
"extensions.html">Extensions
</a>
35 <a href=
"ext_ffi.html">FFI Library
</a>
37 <a href=
"ext_ffi_tutorial.html">FFI Tutorial
</a>
39 <a href=
"ext_ffi_api.html">ffi.* API
</a>
41 <a href=
"ext_ffi_semantics.html">FFI Semantics
</a>
44 <a href=
"ext_jit.html">jit.* Library
</a>
46 <a href=
"ext_c_api.html">Lua/C API
</a>
49 <a href=
"status.html">Status
</a>
51 <a class=
"current" href=
"changes.html">Changes
</a>
54 <a href=
"faq.html">FAQ
</a>
56 <a href=
"http://luajit.org/performance.html">Performance
<span class=
"ext">»</span></a>
58 <a href=
"http://wiki.luajit.org/">Wiki
<span class=
"ext">»</span></a>
60 <a href=
"http://luajit.org/list.html">Mailing List
<span class=
"ext">»</span></a>
65 This is a list of changes between the released versions of LuaJIT.
<br>
66 The current
<span style=
"color: #0000c0;">stable version
</span> is
<strong>LuaJIT
2.0.4</strong>.
<br>
70 <a href=
"http://luajit.org/changes.html"><span class=
"ext">»</span> Online Change History
</a>
71 to see whether newer versions are available.
74 <div class=
"major" style=
"background: #d0d0ff;">
75 <h2 id=
"LuaJIT-2.0.4">LuaJIT
2.0.4 — 2015-
05-
14</h2>
77 <li>Fix stack check in narrowing optimization.
</li>
78 <li>Fix Lua/C API typecheck error for special indexes.
</li>
79 <li>Fix string to number conversion.
</li>
80 <li>Fix lexer error for chunks without tokens.
</li>
81 <li>Don't compile
<tt>IR_RETF
</tt> after
<tt>CALLT
</tt> to ff with-side effects.
</li>
82 <li>Fix
<tt>BC_UCLO
</tt>/
<tt>BC_JMP
</tt> join optimization in Lua parser.
</li>
83 <li>Fix corner case in string to number conversion.
</li>
84 <li>Gracefully handle
<tt>lua_error()
</tt> for a suspended coroutine.
</li>
85 <li>Avoid error messages when building with Clang.
</li>
86 <li>Fix snapshot #
0 handling for traces with a stack check on entry.
</li>
87 <li>Fix fused constant loads under high register pressure.
</li>
88 <li>Invalidate backpropagation cache after DCE.
</li>
89 <li>Fix ABC elimination.
</li>
90 <li>Fix debug info for main chunk of stripped bytecode.
</li>
91 <li>Fix FOLD rule for
<tt>string.sub(s, ...) == k
</tt>.
</li>
92 <li>Fix FOLD rule for
<tt>STRREF
</tt> of
<tt>SNEW
</tt>.
</li>
93 <li>Fix frame traversal while searching for error function.
</li>
94 <li>Prevent GC estimate miscalculation due to buffer growth.
</li>
95 <li>Prevent adding side traces for stack checks.
</li>
96 <li>Fix top slot calculation for snapshots with continuations.
</li>
97 <li>Fix check for reuse of SCEV results in
<tt>FORL
</tt>.
</li>
98 <li>Add PS Vita port.
</li>
99 <li>Fix compatibility issues with Illumos.
</li>
100 <li>Fix DragonFly build (unsupported).
</li>
101 <li>OpenBSD/x86: Better executable memory allocation for W^X mode.
</li>
102 <li>x86: Fix argument checks for
<tt>ipairs()
</tt> iterator.
</li>
103 <li>x86:
<tt>lj_math_random_step()
</tt> clobbers XMM regs on OSX Clang.
</li>
104 <li>x86: Fix code generation for unused result of
<tt>math.random()
</tt>.
</li>
105 <li>x64: Allow building with
<tt>LUAJIT_USE_SYSMALLOC
</tt> and
<tt>LUAJIT_USE_VALGRIND
</tt>.
</li>
106 <li>x86/x64: Fix argument check for bit shifts.
</li>
107 <li>x86/x64: Fix code generation for fused test/arith ops.
</li>
108 <li>ARM: Fix write barrier check in
<tt>BC_USETS
</tt>.
</li>
109 <li>PPC: Fix red zone overflow in machine code generation.
</li>
110 <li>PPC: Don't use
<tt>mcrxr
</tt> on PPE.
</li>
111 <li>Various archs: Fix excess stack growth in interpreter.
</li>
112 <li>FFI: Fix FOLD rule for
<tt>TOBIT
</tt> +
<tt>CONV num.u32
</tt>.
</li>
113 <li>FFI: Prevent DSE across
<tt>ffi.string()
</tt>.
</li>
114 <li>FFI: No meta fallback when indexing pointer to incomplete struct.
</li>
115 <li>FFI: Fix initialization of unions of subtypes.
</li>
116 <li>FFI: Fix cdata vs. non-cdata arithmetic and comparisons.
</li>
117 <li>FFI: Fix
<tt>__index
</tt>/
<tt>__newindex
</tt> metamethod resolution for ctypes.
</li>
118 <li>FFI: Fix compilation of reference field access.
</li>
119 <li>FFI: Fix frame traversal for backtraces with FFI callbacks.
</li>
120 <li>FFI: Fix recording of indexing a struct pointer ctype object itself.
</li>
121 <li>FFI: Allow non-scalar cdata to be compared for equality by address.
</li>
122 <li>FFI: Fix pseudo type conversions for type punning.
</li>
125 <h2 id=
"LuaJIT-2.0.3">LuaJIT
2.0.3 — 2014-
03-
12</h2>
127 <li>Add PS4 port.
</li>
128 <li>Add support for multilib distro builds.
</li>
129 <li>Fix OSX build.
</li>
130 <li>Fix MinGW build.
</li>
131 <li>Fix Xbox
360 build.
</li>
132 <li>Improve ULOAD forwarding for open upvalues.
</li>
133 <li>Fix GC steps threshold handling when called by JIT-compiled code.
</li>
134 <li>Fix argument checks for
<tt>math.deg()
</tt> and
<tt>math.rad()
</tt>.
</li>
135 <li>Fix
<tt>jit.flush(func|true)
</tt>.
</li>
136 <li>Respect
<tt>jit.off(func)
</tt> when returning to a function, too.
</li>
137 <li>Fix compilation of
<tt>string.byte(s, nil, n)
</tt>.
</li>
138 <li>Fix line number for relocated bytecode after closure fixup
</li>
139 <li>Fix frame traversal for backtraces.
</li>
140 <li>Fix ABC elimination.
</li>
141 <li>Fix handling of redundant PHIs.
</li>
142 <li>Fix snapshot restore for exit to function header.
</li>
143 <li>Fix type punning alias analysis for constified pointers
</li>
144 <li>Fix call unroll checks in the presence of metamethod frames.
</li>
145 <li>Fix initial maxslot for down-recursive traces.
</li>
146 <li>Prevent BASE register coalescing if parent uses
<tt>IR_RETF
</tt>.
</li>
147 <li>Don't purge modified function from stack slots in
<tt>BC_RET
</tt>.
</li>
148 <li>Fix recording of
<tt>BC_VARG
</tt>.
</li>
149 <li>Don't access dangling reference to reallocated IR.
</li>
150 <li>Fix frame depth display for bytecode dump in
<tt>-jdump
</tt>.
</li>
151 <li>ARM: Fix register allocation when rematerializing FPRs.
</li>
152 <li>x64: Fix store to upvalue for lightuserdata values.
</li>
153 <li>FFI: Add missing GC steps for callback argument conversions.
</li>
154 <li>FFI: Properly unload loaded DLLs.
</li>
155 <li>FFI: Fix argument checks for
<tt>ffi.string()
</tt>.
</li>
156 <li>FFI/x64: Fix passing of vector arguments to calls.
</li>
157 <li>FFI: Rehash finalizer table after GC cycle, if needed.
</li>
158 <li>FFI: Fix
<tt>cts-
>L
</tt> for cdata unsinking in snapshot restore.
</li>
161 <h2 id=
"LuaJIT-2.0.2">LuaJIT
2.0.2 — 2013-
06-
03</h2>
163 <li>Fix memory access check for fast string interning.
</li>
164 <li>Fix MSVC intrinsics for older versions.
</li>
165 <li>Add missing GC steps for
<tt>io.*
</tt> functions.
</li>
166 <li>Fix spurious red zone overflows in machine code generation.
</li>
167 <li>Fix jump-range constrained mcode allocation.
</li>
168 <li>Inhibit DSE for implicit loads via calls.
</li>
169 <li>Fix builtin string to number conversion for overflow digits.
</li>
170 <li>Fix optional argument handling while recording builtins.
</li>
171 <li>Fix optional argument handling in
<tt>table.concat()
</tt>.
</li>
172 <li>Add partial support for building with MingW64 GCC
4.8-SEH.
</li>
173 <li>Add missing PHI barrier to
<tt>string.sub(str, a, b) == kstr
</tt> FOLD rule.
</li>
174 <li>Fix compatibility issues with Illumos.
</li>
175 <li>ARM: Fix cache flush/sync for exit stubs of JIT-compiled code.
</li>
176 <li>MIPS: Fix cache flush/sync for JIT-compiled code jump area.
</li>
177 <li>PPC: Add
<tt>plt
</tt> suffix for external calls from assembler code.
</li>
178 <li>FFI: Fix snapshot substitution in SPLIT pass.
</li>
179 <li>FFI/x86: Fix register allocation for
64 bit comparisons.
</li>
180 <li>FFI: Fix tailcall in lowest frame to C
function with bool result.
</li>
181 <li>FFI: Ignore
<tt>long
</tt> type specifier in
<tt>ffi.istype()
</tt>.
</li>
182 <li>FFI: Fix calling conventions for
32 bit OSX and iOS simulator (struct returns).
</li>
183 <li>FFI: Fix calling conventions for ARM hard-float EABI (nested structs).
</li>
184 <li>FFI: Improve error messages for arithmetic and comparison operators.
</li>
185 <li>FFI: Insert no-op type conversion for pointer to integer cast.
</li>
186 <li>FFI: Fix unroll limit for
<tt>ffi.fill()
</tt>.
</li>
187 <li>FFI: Must sink
<tt>XBAR
</tt> together with
<tt>XSTORE
</tt>s.
</li>
188 <li>FFI: Preserve intermediate string for
<tt>const
char
*
</tt> conversion.
</li>
191 <h2 id=
"LuaJIT-2.0.1">LuaJIT
2.0.1 — 2013-
02-
19</h2>
193 <li>Don't clear frame for out-of-memory error.
</li>
194 <li>Leave hook when resume catches error thrown from hook.
</li>
195 <li>Add missing GC steps for template table creation.
</li>
196 <li>Fix discharge order of comparisons in Lua parser.
</li>
197 <li>Improve buffer handling for
<tt>io.read()
</tt>.
</li>
198 <li>OSX: Add support for Mach-O object files to
<tt>-b
</tt> option.
</li>
199 <li>Fix PS3 port.
</li>
200 <li>Fix/enable Xbox
360 port.
</li>
201 <li>x86/x64: Always mark ref for shift count as non-weak.
</li>
202 <li>x64: Don't fuse implicitly
32-to-
64 extended operands.
</li>
203 <li>ARM: Fix armhf call argument handling.
</li>
204 <li>ARM: Fix code generation for integer math.min/math.max.
</li>
205 <li>PPC/e500: Fix
<tt>lj_vm_floor()
</tt> for Inf/NaN.
</li>
206 <li>FFI: Change priority of table initializer variants for structs.
</li>
207 <li>FFI: Fix code generation for bool call result check on x86/x64.
</li>
208 <li>FFI: Load FFI library on-demand for bytecode with cdata literals.
</li>
209 <li>FFI: Fix handling of qualified transparent structs/unions.
</li>
212 <h2 id=
"LuaJIT-2.0.0">LuaJIT
2.0.0 — 2012-
11-
08</h2>
214 <li>Correctness and completeness:
216 <li>Fix Android/x86 build.
</li>
217 <li>Fix recording of equality comparisons with
<tt>__eq
</tt> metamethods.
</li>
218 <li>Fix detection of immutable upvalues.
</li>
219 <li>Replace error with PANIC for callbacks from JIT-compiled code.
</li>
220 <li>Fix builtin string to number conversion for
<tt>INT_MIN
</tt>.
</li>
221 <li>Don't create unneeded array part for template tables.
</li>
222 <li>Fix
<tt>CONV.num.int
</tt> sinking.
</li>
223 <li>Don't propagate implicitly widened number to index metamethods.
</li>
224 <li>ARM: Fix ordered comparisons of number vs. non-number.
</li>
225 <li>FFI: Fix code generation for replay of sunk float fields.
</li>
226 <li>FFI: Fix signedness of bool.
</li>
227 <li>FFI: Fix recording of bool call result check on x86/x64.
</li>
228 <li>FFI: Fix stack-adjustment for
<tt>__thiscall
</tt> callbacks.
</li>
232 <h2 id=
"LuaJIT-2.0.0-beta11">LuaJIT
2.0.0-beta11
— 2012-
10-
16</h2>
236 <li>Use ARM VFP instructions, if available (build-time detection).
</li>
237 <li>Add support for ARM hard-float EABI (
<tt>armhf
</tt>).
</li>
238 <li>Add PS3 port.
</li>
239 <li>Add many features from Lua
5.2, e.g.
<tt>goto
</tt>/labels.
240 Refer to
<a href=
"extensions.html#lua52">this list
</a>.
</li>
241 <li>FFI: Add parameterized C types.
</li>
242 <li>FFI: Add support for copy constructors.
</li>
243 <li>FFI: Equality comparisons never raise an error (treat as unequal instead).
</li>
244 <li>FFI: Box all accessed or returned enums.
</li>
245 <li>FFI: Check for
<tt>__new
</tt> metamethod when calling a constructor.
</li>
246 <li>FFI: Handle
<tt>__pairs
</tt>/
<tt>__ipairs
</tt> metamethods for cdata objects.
</li>
247 <li>FFI: Convert
<tt>io.*
</tt> file handle to
<tt>FILE *
</tt> pointer (but as a
<tt>void *
</tt>).
</li>
248 <li>FFI: Detect and support type punning through unions.
</li>
249 <li>FFI: Improve various error messages.
</li>
251 <li>Build-system reorganization:
253 <li>Reorganize directory layout:
<br>
254 <tt>lib/*
</tt> → <tt>src/jit/*
</tt><br>
255 <tt>src/buildvm_*.dasc
</tt> → <tt>src/vm_*.dasc
</tt><br>
256 <tt>src/buildvm_*.h
</tt> → removed
<br>
257 <tt>src/buildvm*
</tt> → <tt>src/host/*
</tt></li>
258 <li>Add minified Lua interpreter plus Lua BitOp (
<tt>minilua
</tt>) to run DynASM.
</li>
259 <li>Change DynASM bit operations to use Lua BitOp
</li>
260 <li>Translate only
<tt>vm_*.dasc
</tt> for detected target architecture.
</li>
261 <li>Improve target detection for
<tt>msvcbuild.bat
</tt>.
</li>
262 <li>Fix build issues on Cygwin and MinGW with optional MSys.
</li>
263 <li>Handle cross-compiles with FPU/no-FPU or hard-fp/soft-fp ABI mismatch.
</li>
264 <li>Remove some library functions for no-JIT/no-FFI builds.
</li>
265 <li>Add uninstall target to top-level Makefile.
</li>
267 <li>Correctness and completeness:
269 <li>Preserve snapshot #
0 PC for all traces.
</li>
270 <li>Fix argument checks for
<tt>coroutine.create()
</tt>.
</li>
271 <li>Command line prints version and JIT status to
<tt>stdout
</tt>, not
<tt>stderr
</tt>.
</li>
272 <li>Fix userdata
<tt>__gc
</tt> separations at Lua state close.
</li>
273 <li>Fix
<tt>TDUP
</tt> to
<tt>HLOAD
</tt> forwarding for
<tt>LJ_DUALNUM
</tt> builds.
</li>
274 <li>Fix buffer check in bytecode writer.
</li>
275 <li>Make
<tt>os.date()
</tt> thread-safe.
</li>
276 <li>Add missing declarations for MSVC intrinsics.
</li>
277 <li>Fix dispatch table modifications for return hooks.
</li>
278 <li>Workaround for MSVC conversion bug (
<tt>double
</tt> → <tt>uint32_t
</tt> → <tt>int32_t
</tt>).
</li>
279 <li>Fix FOLD rule
<tt>(i-j)-i =
> 0-j
</tt>.
</li>
280 <li>Never use DWARF unwinder on Windows.
</li>
281 <li>Fix shrinking of direct mapped blocks in builtin allocator.
</li>
282 <li>Limit recursion depth in
<tt>string.match()
</tt> et al.
</li>
283 <li>Fix late despecialization of
<tt>ITERN
</tt> after loop has been entered.
</li>
284 <li>Fix
<tt>'f'
</tt> and
<tt>'L'
</tt> options for
<tt>debug.getinfo()
</tt> and
<tt>lua_getinfo()
</tt>.
</li>
285 <li>Fix
<tt>package.searchpath()
</tt>.
</li>
286 <li>OSX: Change dylib names to be consistent with other platforms.
</li>
287 <li>Android: Workaround for broken
<tt>sprintf(
"%g",
-
0.0)
</tt>.
</li>
288 <li>x86: Remove support for ancient CPUs without
<tt>CMOV
</tt> (before Pentium Pro).
</li>
289 <li>x86: Fix register allocation for calls returning register pair.
</li>
290 <li>x86/x64: Fix fusion of unsigned byte comparisons with swapped operands.
</li>
291 <li>ARM: Fix
<tt>tonumber()
</tt> argument check.
</li>
292 <li>ARM: Fix modulo operator and
<tt>math.floor()
</tt>/
<tt>math.ceil()
</tt> for
<tt>inf
</tt>/
<tt>nan
</tt>.
</li>
293 <li>ARM: Invoke SPLIT pass for leftover
<tt>IR_TOBIT
</tt>.
</li>
294 <li>ARM: Fix BASE register coalescing.
</li>
295 <li>PPC: Fix interpreter state setup in callbacks.
</li>
296 <li>PPC: Fix
<tt>string.sub()
</tt> range check.
</li>
297 <li>MIPS: Support generation of MIPS/MIPSEL bytecode object files.
</li>
298 <li>MIPS: Fix calls to
<tt>floor()
</tt>/
<tt>ceil()
</tt><tt>/trunc()
</tt>.
</li>
299 <li>ARM/PPC: Detect more target architecture variants.
</li>
300 <li>ARM/PPC/e500/MIPS: Fix tailcalls from fast functions, esp.
<tt>tostring()
</tt>.
</li>
301 <li>ARM/PPC/MIPS: Fix rematerialization of FP constants.
</li>
302 <li>FFI: Don't call
<tt>FreeLibrary()
</tt> on our own EXE/DLL.
</li>
303 <li>FFI: Resolve metamethods for constructors, too.
</li>
304 <li>FFI: Properly disable callbacks on iOS (would require executable memory).
</li>
305 <li>FFI: Fix cdecl string parsing during recording.
</li>
306 <li>FFI: Show address pointed to for
<tt>tostring(ref)
</tt>, too.
</li>
307 <li>FFI: Fix alignment of C call argument/return structure.
</li>
308 <li>FFI: Initialize all fields of standard types.
</li>
309 <li>FFI: Fix callback handling when new C
types are declared in callback.
</li>
310 <li>FFI: Fix recording of constructors for pointers.
</li>
311 <li>FFI: Always resolve metamethods for pointers to structs.
</li>
312 <li>FFI: Correctly propagate alignment when interning nested types.
</li>
314 <li>Structural and performance enhancements:
316 <li>Add allocation sinking and store sinking optimization.
</li>
317 <li>Constify immutable upvalues.
</li>
318 <li>Add builtin string to integer or FP number conversion. Improves cross-platform consistency and correctness.
</li>
319 <li>Create string hash slots in template tables for non-const values, too. Avoids later table resizes.
</li>
320 <li>Eliminate
<tt>HREFK
</tt> guard for template table references.
</li>
321 <li>Add various new FOLD rules.
</li>
322 <li>Don't use stack unwinding for
<tt>lua_yield()
</tt> (slow on x64).
</li>
323 <li>ARM, PPC, MIPS: Improve
<tt>XLOAD
</tt> operand fusion and register hinting.
</li>
324 <li>PPC, MIPS: Compile
<tt>math.sqrt()
</tt> to sqrt instruction, if available.
</li>
325 <li>FFI: Fold
<tt>KPTR
</tt> + constant offset in SPLIT pass.
</li>
326 <li>FFI: Optimize/inline
<tt>ffi.copy()
</tt> and
<tt>ffi.fill()
</tt>.
</li>
327 <li>FFI: Compile and optimize array/struct copies.
</li>
328 <li>FFI: Compile
<tt>ffi.typeof(cdata|ctype)
</tt>,
<tt>ffi.sizeof()
</tt>,
<tt>ffi.alignof()
</tt>,
<tt>ffi.offsetof()
</tt> and
<tt>ffi.gc()
</tt>.
</li>
332 <h2 id=
"LuaJIT-2.0.0-beta10">LuaJIT
2.0.0-beta10
— 2012-
05-
09</h2>
336 <li>The MIPS of LuaJIT is complete. It requires a CPU conforming to the
337 MIPS32
R1 architecture with hardware FPU. O32 hard-fp ABI,
338 little-endian or big-endian.
</li>
339 <li>Auto-detect target arch via cross-compiler. No need for
340 <tt>TARGET=arch
</tt> anymore.
</li>
341 <li>Make DynASM compatible with Lua
5.2.
</li>
342 <li>From Lua
5.2: Try
<tt>__tostring
</tt> metamethod on non-string error
345 <li>Correctness and completeness:
347 <li>Fix parsing of hex literals with exponents.
</li>
348 <li>Fix bytecode dump for certain number constants.
</li>
349 <li>Fix argument type in error message for relative arguments.
</li>
350 <li>Fix argument error handling on Lua stacks without a frame.
</li>
351 <li>Add missing mcode limit check in assembler backend.
</li>
352 <li>Fix compilation on OpenBSD.
</li>
353 <li>Avoid recursive GC steps after GC-triggered trace exit.
</li>
354 <li>Replace
<tt><unwind.h
></tt> definitions with our own.
</li>
355 <li>Fix OSX build issues. Bump minimum required OSX version to
10.4.
</li>
356 <li>Fix discharge order of comparisons in Lua parser.
</li>
357 <li>Ensure running
<tt>__gc
</tt> of userdata created in
<tt>__gc
</tt>
359 <li>Limit number of userdata
<tt>__gc
</tt> separations at state close.
</li>
360 <li>Fix bytecode
<tt>JMP
</tt> slot range when optimizing
361 <tt>and
</tt>/
<tt>or
</tt> with constant LHS.
</li>
362 <li>Fix DSE of
<tt>USTORE
</tt>.
</li>
363 <li>Make
<tt>lua_concat()
</tt> work from C
hook with partial frame.
</li>
364 <li>Add required PHIs for implicit conversions, e.g. via
<tt>XREF
</tt>
366 <li>Add more comparison variants to Valgrind suppressions file.
</li>
367 <li>Disable loading bytecode with an extra header (BOM or
<tt>#!
</tt>).
</li>
368 <li>Fix PHI stack slot syncing.
</li>
369 <li>ARM: Reorder type/value tests to silence Valgrind.
</li>
370 <li>ARM: Fix register allocation for
<tt>ldrd
</tt>-optimized
372 <li>ARM: Fix conditional branch fixup for
<tt>OBAR
</tt>.
</li>
373 <li>ARM: Invoke SPLIT pass for
<tt>double
</tt> args in FFI call.
</li>
374 <li>ARM: Handle all
<tt>CALL*
</tt> ops with
<tt>double
</tt> results in
376 <li>ARM: Fix rejoin of
<tt>POW
</tt> in SPLIT pass.
</li>
377 <li>ARM: Fix compilation of
<tt>math.sinh
</tt>,
<tt>math.cosh
</tt>,
378 <tt>math.tanh
</tt>.
</li>
379 <li>ARM, PPC: Avoid pointless arg clearing in
<tt>BC_IFUNCF
</tt>.
</li>
380 <li>PPC: Fix resume after yield from hook.
</li>
381 <li>PPC: Fix argument checking for
<tt>rawget()
</tt>.
</li>
382 <li>PPC: Fix fusion of floating-point
<tt>XLOAD
</tt>/
<tt>XSTORE
</tt>.
</li>
383 <li>PPC: Fix
<tt>HREFK
</tt> code generation for huge tables.
</li>
384 <li>PPC: Use builtin D-Cache/I-Cache sync code.
</li>
388 <li>Ignore empty statements in
<tt>ffi.cdef()
</tt>.
</li>
389 <li>Ignore number parsing errors while skipping definitions.
</li>
390 <li>Don't touch frame in callbacks with tailcalls to fast functions.
</li>
391 <li>Fix library unloading on POSIX systems.
</li>
392 <li>Finalize cdata before userdata when closing the state.
</li>
393 <li>Change
<tt>ffi.load()
</tt> library name resolution for Cygwin.
</li>
394 <li>Fix resolving of function name redirects on Windows/x86.
</li>
395 <li>Fix symbol resolving error messages on Windows.
</li>
396 <li>Fix blacklisting of C functions calling callbacks.
</li>
397 <li>Fix result type of pointer difference.
</li>
398 <li>Use correct PC in FFI metamethod error message.
</li>
399 <li>Allow
<tt>'typedef _Bool int BOOL;'
</tt> for the Windows API.
</li>
400 <li>Don't record test for bool result of call, if ignored.
</li>
404 <h2 id=
"LuaJIT-2.0.0-beta9">LuaJIT
2.0.0-beta9
— 2011-
12-
14</h2>
408 <li>PPC port of LuaJIT is complete. Default is the dual-number port
409 (usually faster). Single-number port selectable via
<tt>src/Makefile
</tt>
411 <li>Add FFI callback support.
</li>
412 <li>Extend
<tt>-b
</tt> to generate
<tt>.c
</tt>,
<tt>.h
</tt> or
<tt>.obj/.o
</tt>
413 files with embedded bytecode.
</li>
414 <li>Allow loading embedded bytecode with
<tt>require()
</tt>.
</li>
415 <li>From Lua
5.2: Change to
<tt>'\z'
</tt> escape. Reject undefined escape
418 <li>Correctness and completeness:
420 <li>Fix OSX
10.7 build. Fix
<tt>install_name
</tt> and versioning on OSX.
</li>
421 <li>Fix iOS build.
</li>
422 <li>Install
<tt>dis_arm.lua
</tt>, too.
</li>
423 <li>Mark installed shared library as executable.
</li>
424 <li>Add debug option to
<tt>msvcbuild.bat
</tt> and improve error handling.
</li>
425 <li>Fix data-flow analysis for iterators.
</li>
426 <li>Fix forced unwinding triggered by external unwinder.
</li>
427 <li>Record missing
<tt>for
</tt> loop slot loads (return to lower frame).
</li>
428 <li>Always use ANSI variants of Windows system functions.
</li>
429 <li>Fix GC barrier for multi-result table constructor (
<tt>TSETM
</tt>).
</li>
430 <li>Fix/add various FOLD rules.
</li>
431 <li>Add potential PHI for number conversions due to type instability.
</li>
432 <li>Do not eliminate PHIs only referenced from other PHIs.
</li>
433 <li>Correctly anchor implicit number to string conversions in Lua/C API.
</li>
434 <li>Fix various stack limit checks.
</li>
435 <li>x64: Use thread-safe exceptions for external unwinding (GCC platforms).
</li>
436 <li>x64: Fix result type of cdata index conversions.
</li>
437 <li>x64: Fix
<tt>math.random()
</tt> and
<tt>bit.bswap()
</tt> code generation.
</li>
438 <li>x64: Fix
<tt>lightuserdata
</tt> comparisons.
</li>
439 <li>x64: Always extend stack-passed arguments to pointer size.
</li>
440 <li>ARM: Many fixes to code generation backend.
</li>
441 <li>PPC/e500: Fix dispatch for binop metamethods.
</li>
442 <li>PPC/e500: Save/restore condition registers when entering/leaving the VM.
</li>
443 <li>PPC/e500: Fix write barrier in stores of strings to upvalues.
</li>
447 <li>Fix C comment parsing.
</li>
448 <li>Fix snapshot optimization for cdata comparisons.
</li>
449 <li>Fix recording of const/enum lookups in namespaces.
</li>
450 <li>Fix call argument and return handling for
<tt>I8/U8/I16/U16
</tt> types.
</li>
451 <li>Fix unfused loads of float fields.
</li>
452 <li>Fix
<tt>ffi.string()
</tt> recording.
</li>
453 <li>Save
<tt>GetLastError()
</tt> around
<tt>ffi.load()
</tt> and symbol
455 <li>Improve ld script detection in
<tt>ffi.load()
</tt>.
</li>
456 <li>Record loads/stores to external variables in namespaces.
</li>
457 <li>Compile calls to stdcall, fastcall and vararg functions.
</li>
458 <li>Treat function ctypes like pointers in comparisons.
</li>
459 <li>Resolve
<tt>__call
</tt> metamethod for pointers, too.
</li>
460 <li>Record C function calls with bool return values.
</li>
461 <li>Record
<tt>ffi.errno()
</tt>.
</li>
462 <li>x86: Fix number to
<tt>uint32_t
</tt> conversion rounding.
</li>
463 <li>x86: Fix
64 bit arithmetic in assembler backend.
</li>
464 <li>x64: Fix struct-by-value calling conventions.
</li>
465 <li>ARM: Ensure invocation of SPLIT pass for float conversions.
</li>
467 <li>Structural and performance enhancements:
469 <li>Display trace types with
<tt>-jv
</tt> and
<tt>-jdump
</tt>.
</li>
470 <li>Record isolated calls. But prefer recording loops over calls.
</li>
471 <li>Specialize to prototype for non-monomorphic functions. Solves the
472 trace-explosion problem for closure-heavy programming styles.
</li>
473 <li>Always generate a portable
<tt>vmdef.lua
</tt>. Easier for distros.
</li>
477 <h2 id=
"LuaJIT-2.0.0-beta8">LuaJIT
2.0.0-beta8
— 2011-
06-
23</h2>
481 <li>Soft-float ARM port of LuaJIT is complete.
</li>
482 <li>Add support for bytecode loading/saving and
<tt>-b
</tt> command line
484 <li>From Lua
5.2:
<tt>__len
</tt> metamethod for tables
485 (disabled by default).
</li>
487 <li>Correctness and completeness:
489 <li>ARM: Misc. fixes for interpreter.
</li>
490 <li>x86/x64: Fix
<tt>bit.*
</tt> argument checking in interpreter.
</li>
491 <li>Catch early out-of-memory in memory allocator initialization.
</li>
492 <li>Fix data-flow analysis for paths leading to an upvalue close.
</li>
493 <li>Fix check for missing arguments in
<tt>string.format()
</tt>.
</li>
494 <li>Fix Solaris/x86 build (note: not a supported target).
</li>
495 <li>Fix recording of loops with instable directions in side traces.
</li>
496 <li>x86/x64: Fix fusion of comparisons with
<tt>u8
</tt>/
<tt>u16
</tt>
498 <li>x86/x64: Fix register allocation for variable shifts.
</li>
502 <li>Add
<tt>ffi.errno()
</tt>. Save
<tt>errno
</tt>/
<tt>GetLastError()
</tt>
503 around allocations etc.
</li>
504 <li>Fix
<tt>__gc
</tt> for VLA/VLS cdata objects.
</li>
505 <li>Fix recording of casts from
32 bit cdata pointers to integers.
</li>
506 <li><tt>tonumber(cdata)
</tt> returns
<tt>nil
</tt> for non-numbers.
</li>
507 <li>Show address pointed to for
<tt>tostring(pointer)
</tt>.
</li>
508 <li>Print
<tt>NULL
</tt> pointers as
<tt>"cdata<... *>: NULL"</tt>.
</li>
509 <li>Support
<tt>__tostring
</tt> metamethod for pointers to structs, too.
</li>
511 <li>Structural and performance enhancements:
513 <li>More tuning for loop unrolling heuristics.
</li>
514 <li>Flatten and compress in-memory debug info (saves ~
70%).
</li>
518 <h2 id=
"LuaJIT-2.0.0-beta7">LuaJIT
2.0.0-beta7
— 2011-
05-
05</h2>
522 <li>ARM port of the LuaJIT interpreter is complete.
</li>
523 <li>FFI library: Add
<tt>ffi.gc()
</tt>,
<tt>ffi.metatype()
</tt>,
524 <tt>ffi.istype()
</tt>.
</li>
525 <li>FFI library: Resolve ld script redirection in
<tt>ffi.load()
</tt>.
</li>
526 <li>From Lua
5.2:
<tt>package.searchpath()
</tt>,
<tt>fp:read(
"*L")
</tt>,
527 <tt>load(string)
</tt>.
</li>
528 <li>From Lua
5.2, disabled by default: empty statement,
529 <tt>table.unpack()
</tt>, modified
<tt>coroutine.running()
</tt>.
</li>
531 <li>Correctness and completeness:
533 <li>FFI library: numerous fixes.
</li>
534 <li>Fix type mismatches in store-to-load forwarding.
</li>
535 <li>Fix error handling within metamethods.
</li>
536 <li>Fix
<tt>table.maxn()
</tt>.
</li>
537 <li>Improve accuracy of
<tt>x^-k
</tt> on x64.
</li>
538 <li>Fix code generation for Intel Atom in x64 mode.
</li>
539 <li>Fix narrowing of POW.
</li>
540 <li>Fix recording of retried fast functions.
</li>
541 <li>Fix code generation for
<tt>bit.bnot()
</tt> and multiplies.
</li>
542 <li>Fix error location within cpcall frames.
</li>
543 <li>Add workaround for old libgcc unwind bug.
</li>
544 <li>Fix
<tt>lua_yield()
</tt> and
<tt>getmetatable(lightuserdata)
</tt> on x64.
</li>
545 <li>Misc. fixes for PPC/e500 interpreter.
</li>
546 <li>Fix stack slot updates for down-recursion.
</li>
548 <li>Structural and performance enhancements:
550 <li>Add dual-number mode (int/double) for the VM. Enabled for ARM.
</li>
551 <li>Improve narrowing of arithmetic operators and
<tt>for
</tt> loops.
</li>
552 <li>Tune loop unrolling heuristics and increase trace recorder limits.
</li>
553 <li>Eliminate dead slots in snapshots using bytecode data-flow analysis.
</li>
554 <li>Avoid phantom stores to proxy tables.
</li>
555 <li>Optimize lookups in empty proxy tables.
</li>
556 <li>Improve bytecode optimization of
<tt>and
</tt>/
<tt>or
</tt> operators.
</li>
560 <h2 id=
"LuaJIT-2.0.0-beta6">LuaJIT
2.0.0-beta6
— 2011-
02-
11</h2>
564 <li>PowerPC/e500v2 port of the LuaJIT interpreter is complete.
</li>
565 <li>Various minor features from Lua
5.2: Hex escapes in literals,
566 <tt>'\*'
</tt> escape, reversible
<tt>string.format(
"%q",s)
</tt>,
567 <tt>"%g"</tt> pattern,
<tt>table.sort
</tt> checks callbacks,
568 <tt>os.exit(status|true|false[,close])
</tt>.
</li>
569 <li>Lua
5.2 <tt>__pairs
</tt> and
<tt>__ipairs
</tt> metamethods
570 (disabled by default).
</li>
571 <li>Initial release of the FFI library.
</li>
573 <li>Correctness and completeness:
575 <li>Fix
<tt>string.format()
</tt> for non-finite numbers.
</li>
576 <li>Fix memory leak when compiled to use the built-in allocator.
</li>
577 <li>x86/x64: Fix unnecessary resize in
<tt>TSETM
</tt> bytecode.
</li>
578 <li>Fix various GC issues with traces and
<tt>jit.flush()
</tt>.
</li>
579 <li>x64: Fix fusion of indexes for array references.
</li>
580 <li>x86/x64: Fix stack overflow handling for coroutine results.
</li>
581 <li>Enable low-
2GB memory allocation on FreeBSD/x64.
</li>
582 <li>Fix
<tt>collectgarbage(
"count")
</tt> result if more than
2GB is in use.
</li>
583 <li>Fix parsing of hex floats.
</li>
584 <li>x86/x64: Fix loop branch inversion with trailing
585 <tt>HREF+NE/EQ
</tt>.
</li>
586 <li>Add
<tt>jit.os
</tt> string.
</li>
587 <li><tt>coroutine.create()
</tt> permits running C functions, too.
</li>
588 <li>Fix OSX build to work with newer ld64 versions.
</li>
589 <li>Fix bytecode optimization of
<tt>and
</tt>/
<tt>or
</tt> operators.
</li>
591 <li>Structural and performance enhancements:
593 <li>Emit specialized bytecode for
<tt>pairs()
</tt>/
<tt>next()
</tt>.
</li>
594 <li>Improve bytecode coalescing of
<tt>nil
</tt> constants.
</li>
595 <li>Compile calls to vararg functions.
</li>
596 <li>Compile
<tt>select()
</tt>.
</li>
597 <li>Improve alias analysis, esp. for loads from allocations.
</li>
598 <li>Tuning of various compiler heuristics.
</li>
599 <li>Refactor and extend IR conversion instructions.
</li>
600 <li>x86/x64: Various backend enhancements related to the FFI.
</li>
601 <li>Add SPLIT pass to split
64 bit IR instructions for
32 bit CPUs.
</li>
605 <h2 id=
"LuaJIT-2.0.0-beta5">LuaJIT
2.0.0-beta5
— 2010-
08-
24</h2>
607 <li>Correctness and completeness:
609 <li>Fix trace exit dispatch to function headers.
</li>
610 <li>Fix Windows and OSX builds with LUAJIT_DISABLE_JIT.
</li>
611 <li>Reorganize and fix placement of generated machine code on x64.
</li>
612 <li>Fix TNEW in x64 interpreter.
</li>
613 <li>Do not eliminate PHIs for values only referenced from side exits.
</li>
614 <li>OS-independent canonicalization of strings for non-finite numbers.
</li>
615 <li>Fix
<tt>string.char()
</tt> range check on x64.
</li>
616 <li>Fix
<tt>tostring()
</tt> resolving within
<tt>print()
</tt>.
</li>
617 <li>Fix error handling for
<tt>next()
</tt>.
</li>
618 <li>Fix passing of constant arguments to external calls on x64.
</li>
619 <li>Fix interpreter argument check for two-argument SSE math functions.
</li>
620 <li>Fix C frame chain corruption caused by
<tt>lua_cpcall()
</tt>.
</li>
621 <li>Fix return from
<tt>pcall()
</tt> within active hook.
</li>
623 <li>Structural and performance enhancements:
625 <li>Replace on-trace GC frame syncing with interpreter exit.
</li>
626 <li>Improve hash lookup specialization by not removing dead keys during GC.
</li>
627 <li>Turn traces into true GC objects.
</li>
628 <li>Avoid starting a GC cycle immediately after library init.
</li>
629 <li>Add weak guards to improve dead-code elimination.
</li>
630 <li>Speed up string interning.
</li>
634 <h2 id=
"LuaJIT-2.0.0-beta4">LuaJIT
2.0.0-beta4
— 2010-
03-
28</h2>
636 <li>Correctness and completeness:
638 <li>Fix precondition for on-trace creation of table keys.
</li>
639 <li>Fix
<tt>{f()}
</tt> on x64 when table is resized.
</li>
640 <li>Fix folding of ordered comparisons with same references.
</li>
641 <li>Fix snapshot restores for multi-result bytecodes.
</li>
642 <li>Fix potential hang when recording bytecode with nested closures.
</li>
643 <li>Fix recording of
<tt>getmetatable()
</tt>,
<tt>tonumber()
</tt> and bad argument types.
</li>
644 <li>Fix SLOAD fusion across returns to lower frames.
</li>
646 <li>Structural and performance enhancements:
648 <li>Add array bounds check elimination.
<tt>-Oabc
</tt> is enabled by default.
</li>
649 <li>More tuning for x64, e.g. smaller table objects.
</li>
653 <h2 id=
"LuaJIT-2.0.0-beta3">LuaJIT
2.0.0-beta3
— 2010-
03-
07</h2>
657 <li>Port integrated memory allocator to Linux/x64, Windows/x64 and OSX/x64.
</li>
658 <li>Port interpreter and JIT compiler to x64.
</li>
659 <li>Port DynASM to x64.
</li>
660 <li>Many
32/
64 bit cleanups in the VM.
</li>
661 <li>Allow building the interpreter with either x87 or SSE2 arithmetics.
</li>
662 <li>Add external unwinding and C++ exception interop (default on x64).
</li>
664 <li>Correctness and completeness:
666 <li>Fix constructor bytecode generation for certain conditional values.
</li>
667 <li>Fix some cases of ordered string comparisons.
</li>
668 <li>Fix
<tt>lua_tocfunction()
</tt>.
</li>
669 <li>Fix cutoff register in JMP bytecode for some conditional expressions.
</li>
670 <li>Fix PHI marking algorithm for references from variant slots.
</li>
671 <li>Fix
<tt>package.cpath
</tt> for non-default PREFIX.
</li>
672 <li>Fix DWARF2 frame unwind information for interpreter on OSX.
</li>
673 <li>Drive the GC forward on string allocations in the parser.
</li>
674 <li>Implement call/return hooks (zero-cost if disabled).
</li>
675 <li>Implement yield from C hooks.
</li>
676 <li>Disable JIT compiler on older non-SSE2 CPUs instead of aborting.
</li>
678 <li>Structural and performance enhancements:
680 <li>Compile recursive code (tail-, up- and down-recursion).
</li>
681 <li>Improve heuristics for bytecode penalties and blacklisting.
</li>
682 <li>Split CALL/FUNC recording and clean up fast function call semantics.
</li>
683 <li>Major redesign of internal function call handling.
</li>
684 <li>Improve FOR loop const specialization and integerness checks.
</li>
685 <li>Switch to pre-initialized stacks. Avoid frame-clearing.
</li>
686 <li>Colocation of prototypes and related data: bytecode, constants, debug info.
</li>
687 <li>Cleanup parser and streamline bytecode generation.
</li>
688 <li>Add support for weak IR references to register allocator.
</li>
689 <li>Switch to compressed, extensible snapshots.
</li>
690 <li>Compile returns to frames below the start frame.
</li>
691 <li>Improve alias analysis of upvalues using a disambiguation hash value.
</li>
692 <li>Compile floor/ceil/trunc to SSE2 helper calls or SSE4.1 instructions.
</li>
693 <li>Add generic C call handling to IR and backend.
</li>
694 <li>Improve KNUM fuse vs. load heuristics.
</li>
695 <li>Compile various
<tt>io.*()
</tt> functions.
</li>
696 <li>Compile
<tt>math.sinh()
</tt>,
<tt>math.cosh()
</tt>,
<tt>math.tanh()
</tt>
697 and
<tt>math.random()
</tt>.
</li>
701 <h2 id=
"LuaJIT-2.0.0-beta2">LuaJIT
2.0.0-beta2
— 2009-
11-
09</h2>
703 <li>Reorganize build system. Build static+shared library on POSIX.
</li>
704 <li>Allow C++ exception conversion on all platforms
705 using a wrapper function.
</li>
706 <li>Automatically catch C++ exceptions and rethrow Lua error
708 <li>Check for the correct x87 FPU precision at strategic points.
</li>
709 <li>Always use wrappers for libm functions.
</li>
710 <li>Resurrect metamethod name strings before copying them.
</li>
711 <li>Mark current trace, even if compiler is idle.
</li>
712 <li>Ensure FILE metatable is created only once.
</li>
713 <li>Fix type comparisons when different integer types are involved.
</li>
714 <li>Fix
<tt>getmetatable()
</tt> recording.
</li>
715 <li>Fix TDUP with dead keys in template table.
</li>
716 <li><tt>jit.flush(tr)
</tt> returns status.
717 Prevent manual flush of a trace that's still linked.
</li>
718 <li>Improve register allocation heuristics for invariant references.
</li>
719 <li>Compile the push/pop variants of
<tt>table.insert()
</tt> and
720 <tt>table.remove()
</tt>.
</li>
721 <li>Compatibility with MSVC
<tt>link /debug
</tt>.
</li>
722 <li>Fix
<tt>lua_iscfunction()
</tt>.
</li>
723 <li>Fix
<tt>math.random()
</tt> when compiled with
<tt>-fpic
</tt> (OSX).
</li>
724 <li>Fix
<tt>table.maxn()
</tt>.
</li>
725 <li>Bump
<tt>MACOSX_DEPLOYMENT_TARGET
</tt> to
<tt>10.4</tt></li>
726 <li><tt>luaL_check*()
</tt> and
<tt>luaL_opt*()
</tt> now support
727 negative arguments, too.
<br>
728 This matches the behavior of Lua
5.1, but not the specification.
</li>
731 <h2 id=
"LuaJIT-2.0.0-beta1">LuaJIT
2.0.0-beta1
— 2009-
10-
31</h2>
733 <li>This is the first public release of LuaJIT
2.0.
</li>
734 <li>The whole VM has been rewritten from the ground up, so there's
735 no point in listing differences over earlier versions.
</li>
739 <div class=
"major" style=
"background: #ffff80;">
740 <h2 id=
"LuaJIT-1.1.8">LuaJIT
1.1.8 — 2012-
04-
16</h2>
742 <li>Merged with Lua
5.1.5. Also integrated fixes for all
743 <a href=
"http://www.lua.org/bugs.html#5.1.5"><span class=
"ext">»</span> <span class=
"ext">»</span> currently known bugs in Lua
5.1.5</a>.
</li>
746 <h2 id=
"LuaJIT-1.1.7">LuaJIT
1.1.7 — 2011-
05-
05</h2>
748 <li>Added fixes for the
749 <a href=
"http://www.lua.org/bugs.html#5.1.4"><span class=
"ext">»</span> currently known bugs in Lua
5.1.4</a>.
</li>
752 <h2 id=
"LuaJIT-1.1.6">LuaJIT
1.1.6 — 2010-
03-
28</h2>
754 <li>Added fixes for the
755 <a href=
"http://www.lua.org/bugs.html#5.1.4"><span class=
"ext">»</span> currently known bugs in Lua
5.1.4</a>.
</li>
756 <li>Removed wrong GC check in
<tt>jit_createstate()
</tt>.
757 Thanks to Tim Mensch.
</li>
758 <li>Fixed bad assertions while compiling
<tt>table.insert()
</tt> and
759 <tt>table.remove()
</tt>.
</li>
762 <h2 id=
"LuaJIT-1.1.5">LuaJIT
1.1.5 — 2008-
10-
25</h2>
764 <li>Merged with Lua
5.1.4. Fixes all
765 <a href=
"http://www.lua.org/bugs.html#5.1.3"><span class=
"ext">»</span> known bugs in Lua
5.1.3</a>.
</li>
768 <h2 id=
"LuaJIT-1.1.4">LuaJIT
1.1.4 — 2008-
02-
05</h2>
770 <li>Merged with Lua
5.1.3. Fixes all
771 <a href=
"http://www.lua.org/bugs.html#5.1.2"><span class=
"ext">»</span> known bugs in Lua
5.1.2</a>.
</li>
772 <li>Fixed possible (but unlikely) stack corruption while compiling
773 <tt>k^x
</tt> expressions.
</li>
774 <li>Fixed DynASM template for cmpss instruction.
</li>
777 <h2 id=
"LuaJIT-1.1.3">LuaJIT
1.1.3 — 2007-
05-
24</h2>
779 <li>Merged with Lua
5.1.2. Fixes all
780 <a href=
"http://www.lua.org/bugs.html#5.1.1"><span class=
"ext">»</span> known bugs in Lua
5.1.1</a>.
</li>
781 <li>Merged pending Lua
5.1.x fixes:
"return -nil" bug, spurious count hook call.
</li>
782 <li>Remove a (sometimes) wrong assertion in
<tt>luaJIT_findpc()
</tt>.
</li>
783 <li>DynASM now allows labels for displacements and
<tt>.aword
</tt>.
</li>
784 <li>Fix some compiler warnings for DynASM glue (internal API change).
</li>
785 <li>Correct naming for SSSE3 (temporarily known as SSE4) in DynASM and x86 disassembler.
</li>
786 <li>The loadable debug modules now handle redirection to stdout
787 (e.g.
<tt>-j
trace=-
</tt>).
</li>
790 <h2 id=
"LuaJIT-1.1.2">LuaJIT
1.1.2 — 2006-
06-
24</h2>
792 <li>Fix MSVC inline assembly: use only local variables with
793 <tt>lua_number2int()
</tt>.
</li>
794 <li>Fix
"attempt to call a thread value" bug on Mac OS X:
795 make values of consts used as lightuserdata keys unique
796 to avoid joining by the compiler/linker.
</li>
799 <h2 id=
"LuaJIT-1.1.1">LuaJIT
1.1.1 — 2006-
06-
20</h2>
801 <li>Merged with Lua
5.1.1. Fixes all
802 <a href=
"http://www.lua.org/bugs.html#5.1"><span class=
"ext">»</span> known bugs in Lua
5.1</a>.
</li>
803 <li>Enforce (dynamic) linker error for EXE/DLL version mismatches.
</li>
804 <li>Minor changes to DynASM: faster pre-processing, smaller encoding
805 for some immediates.
</li>
808 This release is in sync with Coco
1.1.1 (see the
809 <a href=
"http://coco.luajit.org/changes.html"><span class=
"ext">»</span> Coco Change History
</a>).
812 <h2 id=
"LuaJIT-1.1.0">LuaJIT
1.1.0 — 2006-
03-
13</h2>
814 <li>Merged with Lua
5.1 (final).
</li>
816 <li>New JIT call frame setup:
818 <li>The C stack is kept
16 byte aligned (faster).
819 Mandatory for Mac OS X on Intel, too.
</li>
820 <li>Faster calling conventions for internal C helper functions.
</li>
821 <li>Better instruction scheduling for function prologue, OP_CALL and
825 <li>Miscellaneous optimizations:
827 <li>Faster loads of FP constants. Remove narrow-to-wide store-to-load
828 forwarding stalls.
</li>
829 <li>Use (scalar) SSE2 ops (if the CPU supports it) to speed up slot moves
830 and FP to integer conversions.
</li>
831 <li>Optimized the two-argument form of
<tt>OP_CONCAT
</tt> (
<tt>a..b
</tt>).
</li>
832 <li>Inlined
<tt>OP_MOD
</tt> (
<tt>a%b
</tt>).
833 With better accuracy than the C variant, too.
</li>
834 <li>Inlined
<tt>OP_POW
</tt> (
<tt>a^b
</tt>). Unroll
<tt>x^k
</tt> or
835 use
<tt>k^x =
2^(log2(k)*x)
</tt> or call
<tt>pow()
</tt>.
</li>
838 <li>Changes in the optimizer:
840 <li>Improved hinting for table keys derived from table values
841 (
<tt>t1[t2[x]]
</tt>).
</li>
842 <li>Lookup hinting now works with arbitrary object types and
843 supports index chains, too.
</li>
844 <li>Generate type hints for arithmetic and comparison operators,
845 OP_LEN, OP_CONCAT and OP_FORPREP.
</li>
846 <li>Remove several hint definitions in favour of a generic COMBINE hint.
</li>
847 <li>Complete rewrite of
<tt>jit.opt_inline
</tt> module
848 (ex
<tt>jit.opt_lib
</tt>).
</li>
851 <li>Use adaptive deoptimization:
853 <li>If runtime verification of a contract fails, the affected
854 instruction is recompiled and patched on-the-fly.
855 Regular programs will trigger deoptimization only occasionally.
</li>
856 <li>This avoids generating code for uncommon fallback cases
857 most of the time. Generated code is up to
30% smaller compared to
858 LuaJIT
1.0.3.
</li>
859 <li>Deoptimization is used for many opcodes and contracts:
861 <li>OP_CALL, OP_TAILCALL: type mismatch for callable.
</li>
862 <li>Inlined calls: closure mismatch, parameter number and type mismatches.
</li>
863 <li>OP_GETTABLE, OP_SETTABLE: table or key type and range mismatches.
</li>
864 <li>All arithmetic and comparison operators, OP_LEN, OP_CONCAT,
865 OP_FORPREP: operand type and range mismatches.
</li>
867 <li>Complete redesign of the debug and traceback info
868 (bytecode
↔ mcode) to support deoptimization.
869 Much more flexible and needs only
50% of the space.
</li>
870 <li>The modules
<tt>jit.trace
</tt>,
<tt>jit.dumphints
</tt> and
871 <tt>jit.dump
</tt> handle deoptimization.
</li>
874 <li>Inlined many popular library functions
875 (for commonly used arguments only):
877 <li>Most
<tt>math.*
</tt> functions (the
18 most used ones)
878 [
2x-
10x faster].
</li>
879 <li><tt>string.len
</tt>,
<tt>string.sub
</tt> and
<tt>string.char
</tt>
880 [
2x-
10x faster].
</li>
881 <li><tt>table.insert
</tt>,
<tt>table.remove
</tt> and
<tt>table.getn
</tt>
883 <li><tt>coroutine.yield
</tt> and
<tt>coroutine.resume
</tt>
885 <li><tt>pairs
</tt>,
<tt>ipairs
</tt> and the corresponding iterators
886 [
8x-
15x faster].
</li>
889 <li>Changes in the core and loadable modules and the stand-alone executable:
891 <li>Added
<tt>jit.version
</tt>,
<tt>jit.version_num
</tt>
892 and
<tt>jit.arch
</tt>.
</li>
893 <li>Reorganized some internal API functions (
<tt>jit.util.*mcode*
</tt>).
</li>
894 <li>The
<tt>-j dump
</tt> output now shows JSUB names, too.
</li>
895 <li>New x86 disassembler module written in pure Lua. No dependency
896 on ndisasm anymore. Flexible API, very compact (
500 lines)
897 and complete (x87, MMX, SSE, SSE2, SSE3, SSSE3, privileged instructions).
</li>
898 <li><tt>luajit -v
</tt> prints the LuaJIT version and copyright
899 on a separate line.
</li>
902 <li>Added SSE, SSE2, SSE3 and SSSE3 support to DynASM.
</li>
903 <li>Miscellaneous doc changes. Added a section about
904 <a href=
"install.html#embedding">embedding LuaJIT
</a>.
</li>
907 This release is in sync with Coco
1.1.0 (see the
908 <a href=
"http://coco.luajit.org/changes.html"><span class=
"ext">»</span> Coco Change History
</a>).
912 <div class=
"major" style=
"background: #ffffd0;">
913 <h2 id=
"LuaJIT-1.0.3">LuaJIT
1.0.3 — 2005-
09-
08</h2>
915 <li>Even more docs.
</li>
916 <li>Unified closure checks in
<tt>jit.*
</tt>.
</li>
917 <li>Fixed some range checks in
<tt>jit.util.*
</tt>.
</li>
918 <li>Fixed __newindex call originating from
<tt>jit_settable_str()
</tt>.
</li>
919 <li>Merged with Lua
5.1 alpha (including early bug fixes).
</li>
922 This is the first public release of LuaJIT.
925 <h2 id=
"LuaJIT-1.0.2">LuaJIT
1.0.2 — 2005-
09-
02</h2>
927 <li>Add support for flushing the Valgrind translation cache
<br>
928 (
<tt>MYCFLAGS= -DUSE_VALGRIND
</tt>).
</li>
929 <li>Add support for freeing executable mcode memory to the
<tt>mmap()
</tt>-based
930 variant for POSIX systems.
</li>
931 <li>Reorganized the C
function signature handling in
932 <tt>jit.opt_lib
</tt>.
</li>
933 <li>Changed to index-based hints for inlining C
functions.
934 Still no support in the backend for inlining.
</li>
935 <li>Hardcode
<tt>HEAP_CREATE_ENABLE_EXECUTE
</tt> value if undefined.
</li>
936 <li>Misc. changes to the
<tt>jit.*
</tt> modules.
</li>
937 <li>Misc. changes to the Makefiles.
</li>
938 <li>Lots of new docs.
</li>
939 <li>Complete doc reorg.
</li>
942 Not released because Lua
5.1 alpha came out today.
945 <h2 id=
"LuaJIT-1.0.1">LuaJIT
1.0.1 — 2005-
08-
31</h2>
947 <li>Missing GC step in
<tt>OP_CONCAT
</tt>.
</li>
948 <li>Fix result handling for C
–> JIT calls.
</li>
949 <li>Detect CPU feature bits.
</li>
950 <li>Encode conditional moves (
<tt>fucomip
</tt>) only when supported.
</li>
951 <li>Add fallback instructions for FP compares.
</li>
952 <li>Add support for
<tt>LUA_COMPAT_VARARG
</tt>. Still disabled by default.
</li>
953 <li>MSVC needs a specific place for the
<tt>CALLBACK
</tt> attribute
954 (David Burgess).
</li>
955 <li>Misc. doc updates.
</li>
958 Interim non-public release.
959 Special thanks to Adam D. Moss for reporting most of the bugs.
962 <h2 id=
"LuaJIT-1.0.0">LuaJIT
1.0.0 — 2005-
08-
29</h2>
964 This is the initial non-public release of LuaJIT.
971 Copyright
© 2005-
2016 Mike Pall
972 <span class=
"noprint">
974 <a href=
"contact.html">Contact
</a>