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-2015, 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>
48 <a href=
"ext_profiler.html">Profiler
</a>
51 <a href=
"status.html">Status
</a>
53 <a class=
"current" href=
"changes.html">Changes
</a>
56 <a href=
"faq.html">FAQ
</a>
58 <a href=
"http://luajit.org/performance.html">Performance
<span class=
"ext">»</span></a>
60 <a href=
"http://wiki.luajit.org/">Wiki
<span class=
"ext">»</span></a>
62 <a href=
"http://luajit.org/list.html">Mailing List
<span class=
"ext">»</span></a>
67 This is a list of changes between the released versions of LuaJIT.
<br>
68 The current
<span style=
"color: #0000c0;">stable version
</span> is
<strong>LuaJIT
2.0.4</strong>.
<br>
72 <a href=
"http://luajit.org/changes.html"><span class=
"ext">»</span> Online Change History
</a>
73 to see whether newer versions are available.
76 <div class=
"major" style=
"background: #d0d0ff;">
77 <h2 id=
"LuaJIT-2.1.0-beta1">LuaJIT
2.1.0-beta1
— 2015-
08-
25</h2>
79 This is a brief summary of the major changes in LuaJIT
2.1 compared to
2.0.
80 Please take a look at the commit history for more details.
83 <li>Changes to the VM core:
85 <li>Add low-overhead profiler (
<tt>-jp
</tt>).
</li>
86 <li>Add
<tt>LJ_GC64
</tt> mode:
64 bit GC object references (really:
47 bit). Interpreter-only for now.
</li>
87 <li>Add
<tt>LJ_FR2
</tt> mode: Two-slot frame info. Required by
<tt>LJ_GC64
</tt> mode.
</li>
88 <li>Add
<tt>table.new()
</tt> and
<tt>table.clear()
</tt>.
</li>
89 <li>Parse binary number literals (
<tt>0bxxx
</tt>).
</li>
91 <li>Improvements to the JIT compiler:
93 <li>Add trace stitching (disabled for now).
</li>
94 <li>Compile various builtins:
<tt>string.char()
</tt>,
<tt>string.reverse()
</tt>,
<tt>string.lower()
</tt>,
<tt>string.upper()
</tt>,
<tt>string.rep()
</tt>,
<tt>string.format()
</tt>,
<tt>table.concat()
</tt>,
<tt>bit.tohex()
</tt>,
<tt>getfenv(
0)
</tt>,
<tt>debug.getmetatable()
</tt>.
</li>
95 <li>Compile
<tt>string.find()
</tt> for fixed string searches (no patterns).
</li>
96 <li>Compile
<tt>BC_TSETM
</tt>, e.g.
<tt>{
1,
2,
3,f()}
</tt>.
</li>
97 <li>Compile string concatenations (
<tt>BC_CAT
</tt>).
</li>
98 <li>Compile
<tt>__concat
</tt> metamethod.
</li>
99 <li>Various minor optimizations.
</li>
101 <li>Internal Changes:
103 <li>Add support for embedding LuaJIT bytecode for builtins.
</li>
104 <li>Replace various builtins with embedded bytecode.
</li>
105 <li>Refactor string buffers and string formatting.
</li>
106 <li>Remove obsolete non-truncating number to integer conversions.
</li>
110 <li>Add Xbox One port (
<tt>LJ_GC64
</tt> mode).
</li>
111 <li>ARM64: Add port of the interpreter (
<tt>LJ_GC64
</tt> mode).
</li>
112 <li>x64: Add separate port of the interpreter to
<tt>LJ_GC64
</tt> mode.
</li>
113 <li>x86/x64: Drop internal x87 math functions. Use libm functions.
</li>
114 <li>x86: Remove x87 support from interpreter. SSE2 is mandatory now.
</li>
115 <li>PPC/e500: Drop support for this architecture.
</li>
119 <li>FFI: Add
64 bit bitwise operations.
</li>
120 <li>FFI: Compile VLA/VLS and large cdata allocations with default initialization.
</li>
121 <li>FFI: Compile conversions from functions to function pointers.
</li>
122 <li>FFI: Compile lightuserdata to
<tt>void *
</tt> conversion.
</li>
123 <li>FFI: Compile
<tt>ffi.gc(cdata, nil)
</tt>, too.
</li>
124 <li>FFI: Add
<tt>ffi.typeinfo()
</tt>.
</li>
129 <div class=
"major" style=
"background: #ffffd0;">
130 <h2 id=
"LuaJIT-2.0.4">LuaJIT
2.0.4 — 2015-
05-
14</h2>
132 <li>Fix stack check in narrowing optimization.
</li>
133 <li>Fix Lua/C API typecheck error for special indexes.
</li>
134 <li>Fix string to number conversion.
</li>
135 <li>Fix lexer error for chunks without tokens.
</li>
136 <li>Don't compile
<tt>IR_RETF
</tt> after
<tt>CALLT
</tt> to ff with-side effects.
</li>
137 <li>Fix
<tt>BC_UCLO
</tt>/
<tt>BC_JMP
</tt> join optimization in Lua parser.
</li>
138 <li>Fix corner case in string to number conversion.
</li>
139 <li>Gracefully handle
<tt>lua_error()
</tt> for a suspended coroutine.
</li>
140 <li>Avoid error messages when building with Clang.
</li>
141 <li>Fix snapshot #
0 handling for traces with a stack check on entry.
</li>
142 <li>Fix fused constant loads under high register pressure.
</li>
143 <li>Invalidate backpropagation cache after DCE.
</li>
144 <li>Fix ABC elimination.
</li>
145 <li>Fix debug info for main chunk of stripped bytecode.
</li>
146 <li>Fix FOLD rule for
<tt>string.sub(s, ...) == k
</tt>.
</li>
147 <li>Fix FOLD rule for
<tt>STRREF
</tt> of
<tt>SNEW
</tt>.
</li>
148 <li>Fix frame traversal while searching for error function.
</li>
149 <li>Prevent GC estimate miscalculation due to buffer growth.
</li>
150 <li>Prevent adding side traces for stack checks.
</li>
151 <li>Fix top slot calculation for snapshots with continuations.
</li>
152 <li>Fix check for reuse of SCEV results in
<tt>FORL
</tt>.
</li>
153 <li>Add PS Vita port.
</li>
154 <li>Fix compatibility issues with Illumos.
</li>
155 <li>Fix DragonFly build (unsupported).
</li>
156 <li>OpenBSD/x86: Better executable memory allocation for W^X mode.
</li>
157 <li>x86: Fix argument checks for
<tt>ipairs()
</tt> iterator.
</li>
158 <li>x86:
<tt>lj_math_random_step()
</tt> clobbers XMM regs on OSX Clang.
</li>
159 <li>x86: Fix code generation for unused result of
<tt>math.random()
</tt>.
</li>
160 <li>x64: Allow building with
<tt>LUAJIT_USE_SYSMALLOC
</tt> and
<tt>LUAJIT_USE_VALGRIND
</tt>.
</li>
161 <li>x86/x64: Fix argument check for bit shifts.
</li>
162 <li>x86/x64: Fix code generation for fused test/arith ops.
</li>
163 <li>ARM: Fix write barrier check in
<tt>BC_USETS
</tt>.
</li>
164 <li>PPC: Fix red zone overflow in machine code generation.
</li>
165 <li>PPC: Don't use
<tt>mcrxr
</tt> on PPE.
</li>
166 <li>Various archs: Fix excess stack growth in interpreter.
</li>
167 <li>FFI: Fix FOLD rule for
<tt>TOBIT
</tt> +
<tt>CONV num.u32
</tt>.
</li>
168 <li>FFI: Prevent DSE across
<tt>ffi.string()
</tt>.
</li>
169 <li>FFI: No meta fallback when indexing pointer to incomplete struct.
</li>
170 <li>FFI: Fix initialization of unions of subtypes.
</li>
171 <li>FFI: Fix cdata vs. non-cdata arithmetic and comparisons.
</li>
172 <li>FFI: Fix
<tt>__index
</tt>/
<tt>__newindex
</tt> metamethod resolution for ctypes.
</li>
173 <li>FFI: Fix compilation of reference field access.
</li>
174 <li>FFI: Fix frame traversal for backtraces with FFI callbacks.
</li>
175 <li>FFI: Fix recording of indexing a struct pointer ctype object itself.
</li>
176 <li>FFI: Allow non-scalar cdata to be compared for equality by address.
</li>
177 <li>FFI: Fix pseudo type conversions for type punning.
</li>
180 <h2 id=
"LuaJIT-2.0.3">LuaJIT
2.0.3 — 2014-
03-
12</h2>
182 <li>Add PS4 port.
</li>
183 <li>Add support for multilib distro builds.
</li>
184 <li>Fix OSX build.
</li>
185 <li>Fix MinGW build.
</li>
186 <li>Fix Xbox
360 build.
</li>
187 <li>Improve ULOAD forwarding for open upvalues.
</li>
188 <li>Fix GC steps threshold handling when called by JIT-compiled code.
</li>
189 <li>Fix argument checks for
<tt>math.deg()
</tt> and
<tt>math.rad()
</tt>.
</li>
190 <li>Fix
<tt>jit.flush(func|true)
</tt>.
</li>
191 <li>Respect
<tt>jit.off(func)
</tt> when returning to a function, too.
</li>
192 <li>Fix compilation of
<tt>string.byte(s, nil, n)
</tt>.
</li>
193 <li>Fix line number for relocated bytecode after closure fixup
</li>
194 <li>Fix frame traversal for backtraces.
</li>
195 <li>Fix ABC elimination.
</li>
196 <li>Fix handling of redundant PHIs.
</li>
197 <li>Fix snapshot restore for exit to function header.
</li>
198 <li>Fix type punning alias analysis for constified pointers
</li>
199 <li>Fix call unroll checks in the presence of metamethod frames.
</li>
200 <li>Fix initial maxslot for down-recursive traces.
</li>
201 <li>Prevent BASE register coalescing if parent uses
<tt>IR_RETF
</tt>.
</li>
202 <li>Don't purge modified function from stack slots in
<tt>BC_RET
</tt>.
</li>
203 <li>Fix recording of
<tt>BC_VARG
</tt>.
</li>
204 <li>Don't access dangling reference to reallocated IR.
</li>
205 <li>Fix frame depth display for bytecode dump in
<tt>-jdump
</tt>.
</li>
206 <li>ARM: Fix register allocation when rematerializing FPRs.
</li>
207 <li>x64: Fix store to upvalue for lightuserdata values.
</li>
208 <li>FFI: Add missing GC steps for callback argument conversions.
</li>
209 <li>FFI: Properly unload loaded DLLs.
</li>
210 <li>FFI: Fix argument checks for
<tt>ffi.string()
</tt>.
</li>
211 <li>FFI/x64: Fix passing of vector arguments to calls.
</li>
212 <li>FFI: Rehash finalizer table after GC cycle, if needed.
</li>
213 <li>FFI: Fix
<tt>cts-
>L
</tt> for cdata unsinking in snapshot restore.
</li>
216 <h2 id=
"LuaJIT-2.0.2">LuaJIT
2.0.2 — 2013-
06-
03</h2>
218 <li>Fix memory access check for fast string interning.
</li>
219 <li>Fix MSVC intrinsics for older versions.
</li>
220 <li>Add missing GC steps for
<tt>io.*
</tt> functions.
</li>
221 <li>Fix spurious red zone overflows in machine code generation.
</li>
222 <li>Fix jump-range constrained mcode allocation.
</li>
223 <li>Inhibit DSE for implicit loads via calls.
</li>
224 <li>Fix builtin string to number conversion for overflow digits.
</li>
225 <li>Fix optional argument handling while recording builtins.
</li>
226 <li>Fix optional argument handling in
<tt>table.concat()
</tt>.
</li>
227 <li>Add partial support for building with MingW64 GCC
4.8-SEH.
</li>
228 <li>Add missing PHI barrier to
<tt>string.sub(str, a, b) == kstr
</tt> FOLD rule.
</li>
229 <li>Fix compatibility issues with Illumos.
</li>
230 <li>ARM: Fix cache flush/sync for exit stubs of JIT-compiled code.
</li>
231 <li>MIPS: Fix cache flush/sync for JIT-compiled code jump area.
</li>
232 <li>PPC: Add
<tt>plt
</tt> suffix for external calls from assembler code.
</li>
233 <li>FFI: Fix snapshot substitution in SPLIT pass.
</li>
234 <li>FFI/x86: Fix register allocation for
64 bit comparisons.
</li>
235 <li>FFI: Fix tailcall in lowest frame to C
function with bool result.
</li>
236 <li>FFI: Ignore
<tt>long
</tt> type specifier in
<tt>ffi.istype()
</tt>.
</li>
237 <li>FFI: Fix calling conventions for
32 bit OSX and iOS simulator (struct returns).
</li>
238 <li>FFI: Fix calling conventions for ARM hard-float EABI (nested structs).
</li>
239 <li>FFI: Improve error messages for arithmetic and comparison operators.
</li>
240 <li>FFI: Insert no-op type conversion for pointer to integer cast.
</li>
241 <li>FFI: Fix unroll limit for
<tt>ffi.fill()
</tt>.
</li>
242 <li>FFI: Must sink
<tt>XBAR
</tt> together with
<tt>XSTORE
</tt>s.
</li>
243 <li>FFI: Preserve intermediate string for
<tt>const
char
*
</tt> conversion.
</li>
246 <h2 id=
"LuaJIT-2.0.1">LuaJIT
2.0.1 — 2013-
02-
19</h2>
248 <li>Don't clear frame for out-of-memory error.
</li>
249 <li>Leave hook when resume catches error thrown from hook.
</li>
250 <li>Add missing GC steps for template table creation.
</li>
251 <li>Fix discharge order of comparisons in Lua parser.
</li>
252 <li>Improve buffer handling for
<tt>io.read()
</tt>.
</li>
253 <li>OSX: Add support for Mach-O object files to
<tt>-b
</tt> option.
</li>
254 <li>Fix PS3 port.
</li>
255 <li>Fix/enable Xbox
360 port.
</li>
256 <li>x86/x64: Always mark ref for shift count as non-weak.
</li>
257 <li>x64: Don't fuse implicitly
32-to-
64 extended operands.
</li>
258 <li>ARM: Fix armhf call argument handling.
</li>
259 <li>ARM: Fix code generation for integer math.min/math.max.
</li>
260 <li>PPC/e500: Fix
<tt>lj_vm_floor()
</tt> for Inf/NaN.
</li>
261 <li>FFI: Change priority of table initializer variants for structs.
</li>
262 <li>FFI: Fix code generation for bool call result check on x86/x64.
</li>
263 <li>FFI: Load FFI library on-demand for bytecode with cdata literals.
</li>
264 <li>FFI: Fix handling of qualified transparent structs/unions.
</li>
267 <h2 id=
"LuaJIT-2.0.0">LuaJIT
2.0.0 — 2012-
11-
08</h2>
269 <li>Correctness and completeness:
271 <li>Fix Android/x86 build.
</li>
272 <li>Fix recording of equality comparisons with
<tt>__eq
</tt> metamethods.
</li>
273 <li>Fix detection of immutable upvalues.
</li>
274 <li>Replace error with PANIC for callbacks from JIT-compiled code.
</li>
275 <li>Fix builtin string to number conversion for
<tt>INT_MIN
</tt>.
</li>
276 <li>Don't create unneeded array part for template tables.
</li>
277 <li>Fix
<tt>CONV.num.int
</tt> sinking.
</li>
278 <li>Don't propagate implicitly widened number to index metamethods.
</li>
279 <li>ARM: Fix ordered comparisons of number vs. non-number.
</li>
280 <li>FFI: Fix code generation for replay of sunk float fields.
</li>
281 <li>FFI: Fix signedness of bool.
</li>
282 <li>FFI: Fix recording of bool call result check on x86/x64.
</li>
283 <li>FFI: Fix stack-adjustment for
<tt>__thiscall
</tt> callbacks.
</li>
287 <h2 id=
"LuaJIT-2.0.0-beta11">LuaJIT
2.0.0-beta11
— 2012-
10-
16</h2>
291 <li>Use ARM VFP instructions, if available (build-time detection).
</li>
292 <li>Add support for ARM hard-float EABI (
<tt>armhf
</tt>).
</li>
293 <li>Add PS3 port.
</li>
294 <li>Add many features from Lua
5.2, e.g.
<tt>goto
</tt>/labels.
295 Refer to
<a href=
"extensions.html#lua52">this list
</a>.
</li>
296 <li>FFI: Add parameterized C types.
</li>
297 <li>FFI: Add support for copy constructors.
</li>
298 <li>FFI: Equality comparisons never raise an error (treat as unequal instead).
</li>
299 <li>FFI: Box all accessed or returned enums.
</li>
300 <li>FFI: Check for
<tt>__new
</tt> metamethod when calling a constructor.
</li>
301 <li>FFI: Handle
<tt>__pairs
</tt>/
<tt>__ipairs
</tt> metamethods for cdata objects.
</li>
302 <li>FFI: Convert
<tt>io.*
</tt> file handle to
<tt>FILE *
</tt> pointer (but as a
<tt>void *
</tt>).
</li>
303 <li>FFI: Detect and support type punning through unions.
</li>
304 <li>FFI: Improve various error messages.
</li>
306 <li>Build-system reorganization:
308 <li>Reorganize directory layout:
<br>
309 <tt>lib/*
</tt> → <tt>src/jit/*
</tt><br>
310 <tt>src/buildvm_*.dasc
</tt> → <tt>src/vm_*.dasc
</tt><br>
311 <tt>src/buildvm_*.h
</tt> → removed
<br>
312 <tt>src/buildvm*
</tt> → <tt>src/host/*
</tt></li>
313 <li>Add minified Lua interpreter plus Lua BitOp (
<tt>minilua
</tt>) to run DynASM.
</li>
314 <li>Change DynASM bit operations to use Lua BitOp
</li>
315 <li>Translate only
<tt>vm_*.dasc
</tt> for detected target architecture.
</li>
316 <li>Improve target detection for
<tt>msvcbuild.bat
</tt>.
</li>
317 <li>Fix build issues on Cygwin and MinGW with optional MSys.
</li>
318 <li>Handle cross-compiles with FPU/no-FPU or hard-fp/soft-fp ABI mismatch.
</li>
319 <li>Remove some library functions for no-JIT/no-FFI builds.
</li>
320 <li>Add uninstall target to top-level Makefile.
</li>
322 <li>Correctness and completeness:
324 <li>Preserve snapshot #
0 PC for all traces.
</li>
325 <li>Fix argument checks for
<tt>coroutine.create()
</tt>.
</li>
326 <li>Command line prints version and JIT status to
<tt>stdout
</tt>, not
<tt>stderr
</tt>.
</li>
327 <li>Fix userdata
<tt>__gc
</tt> separations at Lua state close.
</li>
328 <li>Fix
<tt>TDUP
</tt> to
<tt>HLOAD
</tt> forwarding for
<tt>LJ_DUALNUM
</tt> builds.
</li>
329 <li>Fix buffer check in bytecode writer.
</li>
330 <li>Make
<tt>os.date()
</tt> thread-safe.
</li>
331 <li>Add missing declarations for MSVC intrinsics.
</li>
332 <li>Fix dispatch table modifications for return hooks.
</li>
333 <li>Workaround for MSVC conversion bug (
<tt>double
</tt> → <tt>uint32_t
</tt> → <tt>int32_t
</tt>).
</li>
334 <li>Fix FOLD rule
<tt>(i-j)-i =
> 0-j
</tt>.
</li>
335 <li>Never use DWARF unwinder on Windows.
</li>
336 <li>Fix shrinking of direct mapped blocks in builtin allocator.
</li>
337 <li>Limit recursion depth in
<tt>string.match()
</tt> et al.
</li>
338 <li>Fix late despecialization of
<tt>ITERN
</tt> after loop has been entered.
</li>
339 <li>Fix
<tt>'f'
</tt> and
<tt>'L'
</tt> options for
<tt>debug.getinfo()
</tt> and
<tt>lua_getinfo()
</tt>.
</li>
340 <li>Fix
<tt>package.searchpath()
</tt>.
</li>
341 <li>OSX: Change dylib names to be consistent with other platforms.
</li>
342 <li>Android: Workaround for broken
<tt>sprintf(
"%g",
-
0.0)
</tt>.
</li>
343 <li>x86: Remove support for ancient CPUs without
<tt>CMOV
</tt> (before Pentium Pro).
</li>
344 <li>x86: Fix register allocation for calls returning register pair.
</li>
345 <li>x86/x64: Fix fusion of unsigned byte comparisons with swapped operands.
</li>
346 <li>ARM: Fix
<tt>tonumber()
</tt> argument check.
</li>
347 <li>ARM: Fix modulo operator and
<tt>math.floor()
</tt>/
<tt>math.ceil()
</tt> for
<tt>inf
</tt>/
<tt>nan
</tt>.
</li>
348 <li>ARM: Invoke SPLIT pass for leftover
<tt>IR_TOBIT
</tt>.
</li>
349 <li>ARM: Fix BASE register coalescing.
</li>
350 <li>PPC: Fix interpreter state setup in callbacks.
</li>
351 <li>PPC: Fix
<tt>string.sub()
</tt> range check.
</li>
352 <li>MIPS: Support generation of MIPS/MIPSEL bytecode object files.
</li>
353 <li>MIPS: Fix calls to
<tt>floor()
</tt>/
<tt>ceil()
</tt><tt>/trunc()
</tt>.
</li>
354 <li>ARM/PPC: Detect more target architecture variants.
</li>
355 <li>ARM/PPC/e500/MIPS: Fix tailcalls from fast functions, esp.
<tt>tostring()
</tt>.
</li>
356 <li>ARM/PPC/MIPS: Fix rematerialization of FP constants.
</li>
357 <li>FFI: Don't call
<tt>FreeLibrary()
</tt> on our own EXE/DLL.
</li>
358 <li>FFI: Resolve metamethods for constructors, too.
</li>
359 <li>FFI: Properly disable callbacks on iOS (would require executable memory).
</li>
360 <li>FFI: Fix cdecl string parsing during recording.
</li>
361 <li>FFI: Show address pointed to for
<tt>tostring(ref)
</tt>, too.
</li>
362 <li>FFI: Fix alignment of C call argument/return structure.
</li>
363 <li>FFI: Initialize all fields of standard types.
</li>
364 <li>FFI: Fix callback handling when new C
types are declared in callback.
</li>
365 <li>FFI: Fix recording of constructors for pointers.
</li>
366 <li>FFI: Always resolve metamethods for pointers to structs.
</li>
367 <li>FFI: Correctly propagate alignment when interning nested types.
</li>
369 <li>Structural and performance enhancements:
371 <li>Add allocation sinking and store sinking optimization.
</li>
372 <li>Constify immutable upvalues.
</li>
373 <li>Add builtin string to integer or FP number conversion. Improves cross-platform consistency and correctness.
</li>
374 <li>Create string hash slots in template tables for non-const values, too. Avoids later table resizes.
</li>
375 <li>Eliminate
<tt>HREFK
</tt> guard for template table references.
</li>
376 <li>Add various new FOLD rules.
</li>
377 <li>Don't use stack unwinding for
<tt>lua_yield()
</tt> (slow on x64).
</li>
378 <li>ARM, PPC, MIPS: Improve
<tt>XLOAD
</tt> operand fusion and register hinting.
</li>
379 <li>PPC, MIPS: Compile
<tt>math.sqrt()
</tt> to sqrt instruction, if available.
</li>
380 <li>FFI: Fold
<tt>KPTR
</tt> + constant offset in SPLIT pass.
</li>
381 <li>FFI: Optimize/inline
<tt>ffi.copy()
</tt> and
<tt>ffi.fill()
</tt>.
</li>
382 <li>FFI: Compile and optimize array/struct copies.
</li>
383 <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>
387 <h2 id=
"LuaJIT-2.0.0-beta10">LuaJIT
2.0.0-beta10
— 2012-
05-
09</h2>
391 <li>The MIPS of LuaJIT is complete. It requires a CPU conforming to the
392 MIPS32
R1 architecture with hardware FPU. O32 hard-fp ABI,
393 little-endian or big-endian.
</li>
394 <li>Auto-detect target arch via cross-compiler. No need for
395 <tt>TARGET=arch
</tt> anymore.
</li>
396 <li>Make DynASM compatible with Lua
5.2.
</li>
397 <li>From Lua
5.2: Try
<tt>__tostring
</tt> metamethod on non-string error
400 <li>Correctness and completeness:
402 <li>Fix parsing of hex literals with exponents.
</li>
403 <li>Fix bytecode dump for certain number constants.
</li>
404 <li>Fix argument type in error message for relative arguments.
</li>
405 <li>Fix argument error handling on Lua stacks without a frame.
</li>
406 <li>Add missing mcode limit check in assembler backend.
</li>
407 <li>Fix compilation on OpenBSD.
</li>
408 <li>Avoid recursive GC steps after GC-triggered trace exit.
</li>
409 <li>Replace
<tt><unwind.h
></tt> definitions with our own.
</li>
410 <li>Fix OSX build issues. Bump minimum required OSX version to
10.4.
</li>
411 <li>Fix discharge order of comparisons in Lua parser.
</li>
412 <li>Ensure running
<tt>__gc
</tt> of userdata created in
<tt>__gc
</tt>
414 <li>Limit number of userdata
<tt>__gc
</tt> separations at state close.
</li>
415 <li>Fix bytecode
<tt>JMP
</tt> slot range when optimizing
416 <tt>and
</tt>/
<tt>or
</tt> with constant LHS.
</li>
417 <li>Fix DSE of
<tt>USTORE
</tt>.
</li>
418 <li>Make
<tt>lua_concat()
</tt> work from C
hook with partial frame.
</li>
419 <li>Add required PHIs for implicit conversions, e.g. via
<tt>XREF
</tt>
421 <li>Add more comparison variants to Valgrind suppressions file.
</li>
422 <li>Disable loading bytecode with an extra header (BOM or
<tt>#!
</tt>).
</li>
423 <li>Fix PHI stack slot syncing.
</li>
424 <li>ARM: Reorder type/value tests to silence Valgrind.
</li>
425 <li>ARM: Fix register allocation for
<tt>ldrd
</tt>-optimized
427 <li>ARM: Fix conditional branch fixup for
<tt>OBAR
</tt>.
</li>
428 <li>ARM: Invoke SPLIT pass for
<tt>double
</tt> args in FFI call.
</li>
429 <li>ARM: Handle all
<tt>CALL*
</tt> ops with
<tt>double
</tt> results in
431 <li>ARM: Fix rejoin of
<tt>POW
</tt> in SPLIT pass.
</li>
432 <li>ARM: Fix compilation of
<tt>math.sinh
</tt>,
<tt>math.cosh
</tt>,
433 <tt>math.tanh
</tt>.
</li>
434 <li>ARM, PPC: Avoid pointless arg clearing in
<tt>BC_IFUNCF
</tt>.
</li>
435 <li>PPC: Fix resume after yield from hook.
</li>
436 <li>PPC: Fix argument checking for
<tt>rawget()
</tt>.
</li>
437 <li>PPC: Fix fusion of floating-point
<tt>XLOAD
</tt>/
<tt>XSTORE
</tt>.
</li>
438 <li>PPC: Fix
<tt>HREFK
</tt> code generation for huge tables.
</li>
439 <li>PPC: Use builtin D-Cache/I-Cache sync code.
</li>
443 <li>Ignore empty statements in
<tt>ffi.cdef()
</tt>.
</li>
444 <li>Ignore number parsing errors while skipping definitions.
</li>
445 <li>Don't touch frame in callbacks with tailcalls to fast functions.
</li>
446 <li>Fix library unloading on POSIX systems.
</li>
447 <li>Finalize cdata before userdata when closing the state.
</li>
448 <li>Change
<tt>ffi.load()
</tt> library name resolution for Cygwin.
</li>
449 <li>Fix resolving of function name redirects on Windows/x86.
</li>
450 <li>Fix symbol resolving error messages on Windows.
</li>
451 <li>Fix blacklisting of C functions calling callbacks.
</li>
452 <li>Fix result type of pointer difference.
</li>
453 <li>Use correct PC in FFI metamethod error message.
</li>
454 <li>Allow
<tt>'typedef _Bool int BOOL;'
</tt> for the Windows API.
</li>
455 <li>Don't record test for bool result of call, if ignored.
</li>
459 <h2 id=
"LuaJIT-2.0.0-beta9">LuaJIT
2.0.0-beta9
— 2011-
12-
14</h2>
463 <li>PPC port of LuaJIT is complete. Default is the dual-number port
464 (usually faster). Single-number port selectable via
<tt>src/Makefile
</tt>
466 <li>Add FFI callback support.
</li>
467 <li>Extend
<tt>-b
</tt> to generate
<tt>.c
</tt>,
<tt>.h
</tt> or
<tt>.obj/.o
</tt>
468 files with embedded bytecode.
</li>
469 <li>Allow loading embedded bytecode with
<tt>require()
</tt>.
</li>
470 <li>From Lua
5.2: Change to
<tt>'\z'
</tt> escape. Reject undefined escape
473 <li>Correctness and completeness:
475 <li>Fix OSX
10.7 build. Fix
<tt>install_name
</tt> and versioning on OSX.
</li>
476 <li>Fix iOS build.
</li>
477 <li>Install
<tt>dis_arm.lua
</tt>, too.
</li>
478 <li>Mark installed shared library as executable.
</li>
479 <li>Add debug option to
<tt>msvcbuild.bat
</tt> and improve error handling.
</li>
480 <li>Fix data-flow analysis for iterators.
</li>
481 <li>Fix forced unwinding triggered by external unwinder.
</li>
482 <li>Record missing
<tt>for
</tt> loop slot loads (return to lower frame).
</li>
483 <li>Always use ANSI variants of Windows system functions.
</li>
484 <li>Fix GC barrier for multi-result table constructor (
<tt>TSETM
</tt>).
</li>
485 <li>Fix/add various FOLD rules.
</li>
486 <li>Add potential PHI for number conversions due to type instability.
</li>
487 <li>Do not eliminate PHIs only referenced from other PHIs.
</li>
488 <li>Correctly anchor implicit number to string conversions in Lua/C API.
</li>
489 <li>Fix various stack limit checks.
</li>
490 <li>x64: Use thread-safe exceptions for external unwinding (GCC platforms).
</li>
491 <li>x64: Fix result type of cdata index conversions.
</li>
492 <li>x64: Fix
<tt>math.random()
</tt> and
<tt>bit.bswap()
</tt> code generation.
</li>
493 <li>x64: Fix
<tt>lightuserdata
</tt> comparisons.
</li>
494 <li>x64: Always extend stack-passed arguments to pointer size.
</li>
495 <li>ARM: Many fixes to code generation backend.
</li>
496 <li>PPC/e500: Fix dispatch for binop metamethods.
</li>
497 <li>PPC/e500: Save/restore condition registers when entering/leaving the VM.
</li>
498 <li>PPC/e500: Fix write barrier in stores of strings to upvalues.
</li>
502 <li>Fix C comment parsing.
</li>
503 <li>Fix snapshot optimization for cdata comparisons.
</li>
504 <li>Fix recording of const/enum lookups in namespaces.
</li>
505 <li>Fix call argument and return handling for
<tt>I8/U8/I16/U16
</tt> types.
</li>
506 <li>Fix unfused loads of float fields.
</li>
507 <li>Fix
<tt>ffi.string()
</tt> recording.
</li>
508 <li>Save
<tt>GetLastError()
</tt> around
<tt>ffi.load()
</tt> and symbol
510 <li>Improve ld script detection in
<tt>ffi.load()
</tt>.
</li>
511 <li>Record loads/stores to external variables in namespaces.
</li>
512 <li>Compile calls to stdcall, fastcall and vararg functions.
</li>
513 <li>Treat function ctypes like pointers in comparisons.
</li>
514 <li>Resolve
<tt>__call
</tt> metamethod for pointers, too.
</li>
515 <li>Record C function calls with bool return values.
</li>
516 <li>Record
<tt>ffi.errno()
</tt>.
</li>
517 <li>x86: Fix number to
<tt>uint32_t
</tt> conversion rounding.
</li>
518 <li>x86: Fix
64 bit arithmetic in assembler backend.
</li>
519 <li>x64: Fix struct-by-value calling conventions.
</li>
520 <li>ARM: Ensure invocation of SPLIT pass for float conversions.
</li>
522 <li>Structural and performance enhancements:
524 <li>Display trace types with
<tt>-jv
</tt> and
<tt>-jdump
</tt>.
</li>
525 <li>Record isolated calls. But prefer recording loops over calls.
</li>
526 <li>Specialize to prototype for non-monomorphic functions. Solves the
527 trace-explosion problem for closure-heavy programming styles.
</li>
528 <li>Always generate a portable
<tt>vmdef.lua
</tt>. Easier for distros.
</li>
532 <h2 id=
"LuaJIT-2.0.0-beta8">LuaJIT
2.0.0-beta8
— 2011-
06-
23</h2>
536 <li>Soft-float ARM port of LuaJIT is complete.
</li>
537 <li>Add support for bytecode loading/saving and
<tt>-b
</tt> command line
539 <li>From Lua
5.2:
<tt>__len
</tt> metamethod for tables
540 (disabled by default).
</li>
542 <li>Correctness and completeness:
544 <li>ARM: Misc. fixes for interpreter.
</li>
545 <li>x86/x64: Fix
<tt>bit.*
</tt> argument checking in interpreter.
</li>
546 <li>Catch early out-of-memory in memory allocator initialization.
</li>
547 <li>Fix data-flow analysis for paths leading to an upvalue close.
</li>
548 <li>Fix check for missing arguments in
<tt>string.format()
</tt>.
</li>
549 <li>Fix Solaris/x86 build (note: not a supported target).
</li>
550 <li>Fix recording of loops with instable directions in side traces.
</li>
551 <li>x86/x64: Fix fusion of comparisons with
<tt>u8
</tt>/
<tt>u16
</tt>
553 <li>x86/x64: Fix register allocation for variable shifts.
</li>
557 <li>Add
<tt>ffi.errno()
</tt>. Save
<tt>errno
</tt>/
<tt>GetLastError()
</tt>
558 around allocations etc.
</li>
559 <li>Fix
<tt>__gc
</tt> for VLA/VLS cdata objects.
</li>
560 <li>Fix recording of casts from
32 bit cdata pointers to integers.
</li>
561 <li><tt>tonumber(cdata)
</tt> returns
<tt>nil
</tt> for non-numbers.
</li>
562 <li>Show address pointed to for
<tt>tostring(pointer)
</tt>.
</li>
563 <li>Print
<tt>NULL
</tt> pointers as
<tt>"cdata<... *>: NULL"</tt>.
</li>
564 <li>Support
<tt>__tostring
</tt> metamethod for pointers to structs, too.
</li>
566 <li>Structural and performance enhancements:
568 <li>More tuning for loop unrolling heuristics.
</li>
569 <li>Flatten and compress in-memory debug info (saves ~
70%).
</li>
573 <h2 id=
"LuaJIT-2.0.0-beta7">LuaJIT
2.0.0-beta7
— 2011-
05-
05</h2>
577 <li>ARM port of the LuaJIT interpreter is complete.
</li>
578 <li>FFI library: Add
<tt>ffi.gc()
</tt>,
<tt>ffi.metatype()
</tt>,
579 <tt>ffi.istype()
</tt>.
</li>
580 <li>FFI library: Resolve ld script redirection in
<tt>ffi.load()
</tt>.
</li>
581 <li>From Lua
5.2:
<tt>package.searchpath()
</tt>,
<tt>fp:read(
"*L")
</tt>,
582 <tt>load(string)
</tt>.
</li>
583 <li>From Lua
5.2, disabled by default: empty statement,
584 <tt>table.unpack()
</tt>, modified
<tt>coroutine.running()
</tt>.
</li>
586 <li>Correctness and completeness:
588 <li>FFI library: numerous fixes.
</li>
589 <li>Fix type mismatches in store-to-load forwarding.
</li>
590 <li>Fix error handling within metamethods.
</li>
591 <li>Fix
<tt>table.maxn()
</tt>.
</li>
592 <li>Improve accuracy of
<tt>x^-k
</tt> on x64.
</li>
593 <li>Fix code generation for Intel Atom in x64 mode.
</li>
594 <li>Fix narrowing of POW.
</li>
595 <li>Fix recording of retried fast functions.
</li>
596 <li>Fix code generation for
<tt>bit.bnot()
</tt> and multiplies.
</li>
597 <li>Fix error location within cpcall frames.
</li>
598 <li>Add workaround for old libgcc unwind bug.
</li>
599 <li>Fix
<tt>lua_yield()
</tt> and
<tt>getmetatable(lightuserdata)
</tt> on x64.
</li>
600 <li>Misc. fixes for PPC/e500 interpreter.
</li>
601 <li>Fix stack slot updates for down-recursion.
</li>
603 <li>Structural and performance enhancements:
605 <li>Add dual-number mode (int/double) for the VM. Enabled for ARM.
</li>
606 <li>Improve narrowing of arithmetic operators and
<tt>for
</tt> loops.
</li>
607 <li>Tune loop unrolling heuristics and increase trace recorder limits.
</li>
608 <li>Eliminate dead slots in snapshots using bytecode data-flow analysis.
</li>
609 <li>Avoid phantom stores to proxy tables.
</li>
610 <li>Optimize lookups in empty proxy tables.
</li>
611 <li>Improve bytecode optimization of
<tt>and
</tt>/
<tt>or
</tt> operators.
</li>
615 <h2 id=
"LuaJIT-2.0.0-beta6">LuaJIT
2.0.0-beta6
— 2011-
02-
11</h2>
619 <li>PowerPC/e500v2 port of the LuaJIT interpreter is complete.
</li>
620 <li>Various minor features from Lua
5.2: Hex escapes in literals,
621 <tt>'\*'
</tt> escape, reversible
<tt>string.format(
"%q",s)
</tt>,
622 <tt>"%g"</tt> pattern,
<tt>table.sort
</tt> checks callbacks,
623 <tt>os.exit(status|true|false[,close])
</tt>.
</li>
624 <li>Lua
5.2 <tt>__pairs
</tt> and
<tt>__ipairs
</tt> metamethods
625 (disabled by default).
</li>
626 <li>Initial release of the FFI library.
</li>
628 <li>Correctness and completeness:
630 <li>Fix
<tt>string.format()
</tt> for non-finite numbers.
</li>
631 <li>Fix memory leak when compiled to use the built-in allocator.
</li>
632 <li>x86/x64: Fix unnecessary resize in
<tt>TSETM
</tt> bytecode.
</li>
633 <li>Fix various GC issues with traces and
<tt>jit.flush()
</tt>.
</li>
634 <li>x64: Fix fusion of indexes for array references.
</li>
635 <li>x86/x64: Fix stack overflow handling for coroutine results.
</li>
636 <li>Enable low-
2GB memory allocation on FreeBSD/x64.
</li>
637 <li>Fix
<tt>collectgarbage(
"count")
</tt> result if more than
2GB is in use.
</li>
638 <li>Fix parsing of hex floats.
</li>
639 <li>x86/x64: Fix loop branch inversion with trailing
640 <tt>HREF+NE/EQ
</tt>.
</li>
641 <li>Add
<tt>jit.os
</tt> string.
</li>
642 <li><tt>coroutine.create()
</tt> permits running C functions, too.
</li>
643 <li>Fix OSX build to work with newer ld64 versions.
</li>
644 <li>Fix bytecode optimization of
<tt>and
</tt>/
<tt>or
</tt> operators.
</li>
646 <li>Structural and performance enhancements:
648 <li>Emit specialized bytecode for
<tt>pairs()
</tt>/
<tt>next()
</tt>.
</li>
649 <li>Improve bytecode coalescing of
<tt>nil
</tt> constants.
</li>
650 <li>Compile calls to vararg functions.
</li>
651 <li>Compile
<tt>select()
</tt>.
</li>
652 <li>Improve alias analysis, esp. for loads from allocations.
</li>
653 <li>Tuning of various compiler heuristics.
</li>
654 <li>Refactor and extend IR conversion instructions.
</li>
655 <li>x86/x64: Various backend enhancements related to the FFI.
</li>
656 <li>Add SPLIT pass to split
64 bit IR instructions for
32 bit CPUs.
</li>
660 <h2 id=
"LuaJIT-2.0.0-beta5">LuaJIT
2.0.0-beta5
— 2010-
08-
24</h2>
662 <li>Correctness and completeness:
664 <li>Fix trace exit dispatch to function headers.
</li>
665 <li>Fix Windows and OSX builds with LUAJIT_DISABLE_JIT.
</li>
666 <li>Reorganize and fix placement of generated machine code on x64.
</li>
667 <li>Fix TNEW in x64 interpreter.
</li>
668 <li>Do not eliminate PHIs for values only referenced from side exits.
</li>
669 <li>OS-independent canonicalization of strings for non-finite numbers.
</li>
670 <li>Fix
<tt>string.char()
</tt> range check on x64.
</li>
671 <li>Fix
<tt>tostring()
</tt> resolving within
<tt>print()
</tt>.
</li>
672 <li>Fix error handling for
<tt>next()
</tt>.
</li>
673 <li>Fix passing of constant arguments to external calls on x64.
</li>
674 <li>Fix interpreter argument check for two-argument SSE math functions.
</li>
675 <li>Fix C frame chain corruption caused by
<tt>lua_cpcall()
</tt>.
</li>
676 <li>Fix return from
<tt>pcall()
</tt> within active hook.
</li>
678 <li>Structural and performance enhancements:
680 <li>Replace on-trace GC frame syncing with interpreter exit.
</li>
681 <li>Improve hash lookup specialization by not removing dead keys during GC.
</li>
682 <li>Turn traces into true GC objects.
</li>
683 <li>Avoid starting a GC cycle immediately after library init.
</li>
684 <li>Add weak guards to improve dead-code elimination.
</li>
685 <li>Speed up string interning.
</li>
689 <h2 id=
"LuaJIT-2.0.0-beta4">LuaJIT
2.0.0-beta4
— 2010-
03-
28</h2>
691 <li>Correctness and completeness:
693 <li>Fix precondition for on-trace creation of table keys.
</li>
694 <li>Fix
<tt>{f()}
</tt> on x64 when table is resized.
</li>
695 <li>Fix folding of ordered comparisons with same references.
</li>
696 <li>Fix snapshot restores for multi-result bytecodes.
</li>
697 <li>Fix potential hang when recording bytecode with nested closures.
</li>
698 <li>Fix recording of
<tt>getmetatable()
</tt>,
<tt>tonumber()
</tt> and bad argument types.
</li>
699 <li>Fix SLOAD fusion across returns to lower frames.
</li>
701 <li>Structural and performance enhancements:
703 <li>Add array bounds check elimination.
<tt>-Oabc
</tt> is enabled by default.
</li>
704 <li>More tuning for x64, e.g. smaller table objects.
</li>
708 <h2 id=
"LuaJIT-2.0.0-beta3">LuaJIT
2.0.0-beta3
— 2010-
03-
07</h2>
712 <li>Port integrated memory allocator to Linux/x64, Windows/x64 and OSX/x64.
</li>
713 <li>Port interpreter and JIT compiler to x64.
</li>
714 <li>Port DynASM to x64.
</li>
715 <li>Many
32/
64 bit cleanups in the VM.
</li>
716 <li>Allow building the interpreter with either x87 or SSE2 arithmetics.
</li>
717 <li>Add external unwinding and C++ exception interop (default on x64).
</li>
719 <li>Correctness and completeness:
721 <li>Fix constructor bytecode generation for certain conditional values.
</li>
722 <li>Fix some cases of ordered string comparisons.
</li>
723 <li>Fix
<tt>lua_tocfunction()
</tt>.
</li>
724 <li>Fix cutoff register in JMP bytecode for some conditional expressions.
</li>
725 <li>Fix PHI marking algorithm for references from variant slots.
</li>
726 <li>Fix
<tt>package.cpath
</tt> for non-default PREFIX.
</li>
727 <li>Fix DWARF2 frame unwind information for interpreter on OSX.
</li>
728 <li>Drive the GC forward on string allocations in the parser.
</li>
729 <li>Implement call/return hooks (zero-cost if disabled).
</li>
730 <li>Implement yield from C hooks.
</li>
731 <li>Disable JIT compiler on older non-SSE2 CPUs instead of aborting.
</li>
733 <li>Structural and performance enhancements:
735 <li>Compile recursive code (tail-, up- and down-recursion).
</li>
736 <li>Improve heuristics for bytecode penalties and blacklisting.
</li>
737 <li>Split CALL/FUNC recording and clean up fast function call semantics.
</li>
738 <li>Major redesign of internal function call handling.
</li>
739 <li>Improve FOR loop const specialization and integerness checks.
</li>
740 <li>Switch to pre-initialized stacks. Avoid frame-clearing.
</li>
741 <li>Colocation of prototypes and related data: bytecode, constants, debug info.
</li>
742 <li>Cleanup parser and streamline bytecode generation.
</li>
743 <li>Add support for weak IR references to register allocator.
</li>
744 <li>Switch to compressed, extensible snapshots.
</li>
745 <li>Compile returns to frames below the start frame.
</li>
746 <li>Improve alias analysis of upvalues using a disambiguation hash value.
</li>
747 <li>Compile floor/ceil/trunc to SSE2 helper calls or SSE4.1 instructions.
</li>
748 <li>Add generic C call handling to IR and backend.
</li>
749 <li>Improve KNUM fuse vs. load heuristics.
</li>
750 <li>Compile various
<tt>io.*()
</tt> functions.
</li>
751 <li>Compile
<tt>math.sinh()
</tt>,
<tt>math.cosh()
</tt>,
<tt>math.tanh()
</tt>
752 and
<tt>math.random()
</tt>.
</li>
756 <h2 id=
"LuaJIT-2.0.0-beta2">LuaJIT
2.0.0-beta2
— 2009-
11-
09</h2>
758 <li>Reorganize build system. Build static+shared library on POSIX.
</li>
759 <li>Allow C++ exception conversion on all platforms
760 using a wrapper function.
</li>
761 <li>Automatically catch C++ exceptions and rethrow Lua error
763 <li>Check for the correct x87 FPU precision at strategic points.
</li>
764 <li>Always use wrappers for libm functions.
</li>
765 <li>Resurrect metamethod name strings before copying them.
</li>
766 <li>Mark current trace, even if compiler is idle.
</li>
767 <li>Ensure FILE metatable is created only once.
</li>
768 <li>Fix type comparisons when different integer types are involved.
</li>
769 <li>Fix
<tt>getmetatable()
</tt> recording.
</li>
770 <li>Fix TDUP with dead keys in template table.
</li>
771 <li><tt>jit.flush(tr)
</tt> returns status.
772 Prevent manual flush of a trace that's still linked.
</li>
773 <li>Improve register allocation heuristics for invariant references.
</li>
774 <li>Compile the push/pop variants of
<tt>table.insert()
</tt> and
775 <tt>table.remove()
</tt>.
</li>
776 <li>Compatibility with MSVC
<tt>link /debug
</tt>.
</li>
777 <li>Fix
<tt>lua_iscfunction()
</tt>.
</li>
778 <li>Fix
<tt>math.random()
</tt> when compiled with
<tt>-fpic
</tt> (OSX).
</li>
779 <li>Fix
<tt>table.maxn()
</tt>.
</li>
780 <li>Bump
<tt>MACOSX_DEPLOYMENT_TARGET
</tt> to
<tt>10.4</tt></li>
781 <li><tt>luaL_check*()
</tt> and
<tt>luaL_opt*()
</tt> now support
782 negative arguments, too.
<br>
783 This matches the behavior of Lua
5.1, but not the specification.
</li>
786 <h2 id=
"LuaJIT-2.0.0-beta1">LuaJIT
2.0.0-beta1
— 2009-
10-
31</h2>
788 <li>This is the first public release of LuaJIT
2.0.
</li>
789 <li>The whole VM has been rewritten from the ground up, so there's
790 no point in listing differences over earlier versions.
</li>
797 Copyright
© 2005-
2015 Mike Pall
798 <span class=
"noprint">
800 <a href=
"contact.html">Contact
</a>