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-2014, 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.3</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.3">LuaJIT
2.0.3 — 2014-
03-
12</h2>
77 <li>Add PS4 port.
</li>
78 <li>Add support for multilib distro builds.
</li>
79 <li>Fix OSX build.
</li>
80 <li>Fix MinGW build.
</li>
81 <li>Fix Xbox
360 build.
</li>
82 <li>Improve ULOAD forwarding for open upvalues.
</li>
83 <li>Fix GC steps threshold handling when called by JIT-compiled code.
</li>
84 <li>Fix argument checks for
<tt>math.deg()
</tt> and
<tt>math.rad()
</tt>.
</li>
85 <li>Fix
<tt>jit.flush(func|true)
</tt>.
</li>
86 <li>Respect
<tt>jit.off(func)
</tt> when returning to a function, too.
</li>
87 <li>Fix compilation of
<tt>string.byte(s, nil, n)
</tt>.
</li>
88 <li>Fix line number for relocated bytecode after closure fixup
</li>
89 <li>Fix frame traversal for backtraces.
</li>
90 <li>Fix ABC elimination.
</li>
91 <li>Fix handling of redundant PHIs.
</li>
92 <li>Fix snapshot restore for exit to function header.
</li>
93 <li>Fix type punning alias analysis for constified pointers
</li>
94 <li>Fix call unroll checks in the presence of metamethod frames.
</li>
95 <li>Fix initial maxslot for down-recursive traces.
</li>
96 <li>Prevent BASE register coalescing if parent uses
<tt>IR_RETF
</tt>.
</li>
97 <li>Don't purge modified function from stack slots in
<tt>BC_RET
</tt>.
</li>
98 <li>Fix recording of
<tt>BC_VARG
</tt>.
</li>
99 <li>Don't access dangling reference to reallocated IR.
</li>
100 <li>Fix frame depth display for bytecode dump in
<tt>-jdump
</tt>.
</li>
101 <li>ARM: Fix register allocation when rematerializing FPRs.
</li>
102 <li>x64: Fix store to upvalue for lightuserdata values.
</li>
103 <li>FFI: Add missing GC steps for callback argument conversions.
</li>
104 <li>FFI: Properly unload loaded DLLs.
</li>
105 <li>FFI: Fix argument checks for
<tt>ffi.string()
</tt>.
</li>
106 <li>FFI/x64: Fix passing of vector arguments to calls.
</li>
107 <li>FFI: Rehash finalizer table after GC cycle, if needed.
</li>
108 <li>FFI: Fix
<tt>cts-
>L
</tt> for cdata unsinking in snapshot restore.
</li>
111 <h2 id=
"LuaJIT-2.0.2">LuaJIT
2.0.2 — 2013-
06-
03</h2>
113 <li>Fix memory access check for fast string interning.
</li>
114 <li>Fix MSVC intrinsics for older versions.
</li>
115 <li>Add missing GC steps for
<tt>io.*
</tt> functions.
</li>
116 <li>Fix spurious red zone overflows in machine code generation.
</li>
117 <li>Fix jump-range constrained mcode allocation.
</li>
118 <li>Inhibit DSE for implicit loads via calls.
</li>
119 <li>Fix builtin string to number conversion for overflow digits.
</li>
120 <li>Fix optional argument handling while recording builtins.
</li>
121 <li>Fix optional argument handling in
<tt>table.concat()
</tt>.
</li>
122 <li>Add partial support for building with MingW64 GCC
4.8-SEH.
</li>
123 <li>Add missing PHI barrier to
<tt>string.sub(str, a, b) == kstr
</tt> FOLD rule.
</li>
124 <li>Fix compatibility issues with Illumos.
</li>
125 <li>ARM: Fix cache flush/sync for exit stubs of JIT-compiled code.
</li>
126 <li>MIPS: Fix cache flush/sync for JIT-compiled code jump area.
</li>
127 <li>PPC: Add
<tt>plt
</tt> suffix for external calls from assembler code.
</li>
128 <li>FFI: Fix snapshot substitution in SPLIT pass.
</li>
129 <li>FFI/x86: Fix register allocation for
64 bit comparisons.
</li>
130 <li>FFI: Fix tailcall in lowest frame to C
function with bool result.
</li>
131 <li>FFI: Ignore
<tt>long
</tt> type specifier in
<tt>ffi.istype()
</tt>.
</li>
132 <li>FFI: Fix calling conventions for
32 bit OSX and iOS simulator (struct returns).
</li>
133 <li>FFI: Fix calling conventions for ARM hard-float EABI (nested structs).
</li>
134 <li>FFI: Improve error messages for arithmetic and comparison operators.
</li>
135 <li>FFI: Insert no-op type conversion for pointer to integer cast.
</li>
136 <li>FFI: Fix unroll limit for
<tt>ffi.fill()
</tt>.
</li>
137 <li>FFI: Must sink
<tt>XBAR
</tt> together with
<tt>XSTORE
</tt>s.
</li>
138 <li>FFI: Preserve intermediate string for
<tt>const
char
*
</tt> conversion.
</li>
141 <h2 id=
"LuaJIT-2.0.1">LuaJIT
2.0.1 — 2013-
02-
19</h2>
143 <li>Don't clear frame for out-of-memory error.
</li>
144 <li>Leave hook when resume catches error thrown from hook.
</li>
145 <li>Add missing GC steps for template table creation.
</li>
146 <li>Fix discharge order of comparisons in Lua parser.
</li>
147 <li>Improve buffer handling for
<tt>io.read()
</tt>.
</li>
148 <li>OSX: Add support for Mach-O object files to
<tt>-b
</tt> option.
</li>
149 <li>Fix PS3 port.
</li>
150 <li>Fix/enable Xbox
360 port.
</li>
151 <li>x86/x64: Always mark ref for shift count as non-weak.
</li>
152 <li>x64: Don't fuse implicitly
32-to-
64 extended operands.
</li>
153 <li>ARM: Fix armhf call argument handling.
</li>
154 <li>ARM: Fix code generation for integer math.min/math.max.
</li>
155 <li>PPC/e500: Fix
<tt>lj_vm_floor()
</tt> for Inf/NaN.
</li>
156 <li>FFI: Change priority of table initializer variants for structs.
</li>
157 <li>FFI: Fix code generation for bool call result check on x86/x64.
</li>
158 <li>FFI: Load FFI library on-demand for bytecode with cdata literals.
</li>
159 <li>FFI: Fix handling of qualified transparent structs/unions.
</li>
162 <h2 id=
"LuaJIT-2.0.0">LuaJIT
2.0.0 — 2012-
11-
08</h2>
164 <li>Correctness and completeness:
166 <li>Fix Android/x86 build.
</li>
167 <li>Fix recording of equality comparisons with
<tt>__eq
</tt> metamethods.
</li>
168 <li>Fix detection of immutable upvalues.
</li>
169 <li>Replace error with PANIC for callbacks from JIT-compiled code.
</li>
170 <li>Fix builtin string to number conversion for
<tt>INT_MIN
</tt>.
</li>
171 <li>Don't create unneeded array part for template tables.
</li>
172 <li>Fix
<tt>CONV.num.int
</tt> sinking.
</li>
173 <li>Don't propagate implicitly widened number to index metamethods.
</li>
174 <li>ARM: Fix ordered comparisons of number vs. non-number.
</li>
175 <li>FFI: Fix code generation for replay of sunk float fields.
</li>
176 <li>FFI: Fix signedness of bool.
</li>
177 <li>FFI: Fix recording of bool call result check on x86/x64.
</li>
178 <li>FFI: Fix stack-adjustment for
<tt>__thiscall
</tt> callbacks.
</li>
182 <h2 id=
"LuaJIT-2.0.0-beta11">LuaJIT
2.0.0-beta11
— 2012-
10-
16</h2>
186 <li>Use ARM VFP instructions, if available (build-time detection).
</li>
187 <li>Add support for ARM hard-float EABI (
<tt>armhf
</tt>).
</li>
188 <li>Add PS3 port.
</li>
189 <li>Add many features from Lua
5.2, e.g.
<tt>goto
</tt>/labels.
190 Refer to
<a href=
"extensions.html#lua52">this list
</a>.
</li>
191 <li>FFI: Add parameterized C types.
</li>
192 <li>FFI: Add support for copy constructors.
</li>
193 <li>FFI: Equality comparisons never raise an error (treat as unequal instead).
</li>
194 <li>FFI: Box all accessed or returned enums.
</li>
195 <li>FFI: Check for
<tt>__new
</tt> metamethod when calling a constructor.
</li>
196 <li>FFI: Handle
<tt>__pairs
</tt>/
<tt>__ipairs
</tt> metamethods for cdata objects.
</li>
197 <li>FFI: Convert
<tt>io.*
</tt> file handle to
<tt>FILE *
</tt> pointer (but as a
<tt>void *
</tt>).
</li>
198 <li>FFI: Detect and support type punning through unions.
</li>
199 <li>FFI: Improve various error messages.
</li>
201 <li>Build-system reorganization:
203 <li>Reorganize directory layout:
<br>
204 <tt>lib/*
</tt> → <tt>src/jit/*
</tt><br>
205 <tt>src/buildvm_*.dasc
</tt> → <tt>src/vm_*.dasc
</tt><br>
206 <tt>src/buildvm_*.h
</tt> → removed
<br>
207 <tt>src/buildvm*
</tt> → <tt>src/host/*
</tt></li>
208 <li>Add minified Lua interpreter plus Lua BitOp (
<tt>minilua
</tt>) to run DynASM.
</li>
209 <li>Change DynASM bit operations to use Lua BitOp
</li>
210 <li>Translate only
<tt>vm_*.dasc
</tt> for detected target architecture.
</li>
211 <li>Improve target detection for
<tt>msvcbuild.bat
</tt>.
</li>
212 <li>Fix build issues on Cygwin and MinGW with optional MSys.
</li>
213 <li>Handle cross-compiles with FPU/no-FPU or hard-fp/soft-fp ABI mismatch.
</li>
214 <li>Remove some library functions for no-JIT/no-FFI builds.
</li>
215 <li>Add uninstall target to top-level Makefile.
</li>
217 <li>Correctness and completeness:
219 <li>Preserve snapshot #
0 PC for all traces.
</li>
220 <li>Fix argument checks for
<tt>coroutine.create()
</tt>.
</li>
221 <li>Command line prints version and JIT status to
<tt>stdout
</tt>, not
<tt>stderr
</tt>.
</li>
222 <li>Fix userdata
<tt>__gc
</tt> separations at Lua state close.
</li>
223 <li>Fix
<tt>TDUP
</tt> to
<tt>HLOAD
</tt> forwarding for
<tt>LJ_DUALNUM
</tt> builds.
</li>
224 <li>Fix buffer check in bytecode writer.
</li>
225 <li>Make
<tt>os.date()
</tt> thread-safe.
</li>
226 <li>Add missing declarations for MSVC intrinsics.
</li>
227 <li>Fix dispatch table modifications for return hooks.
</li>
228 <li>Workaround for MSVC conversion bug (
<tt>double
</tt> → <tt>uint32_t
</tt> → <tt>int32_t
</tt>).
</li>
229 <li>Fix FOLD rule
<tt>(i-j)-i =
> 0-j
</tt>.
</li>
230 <li>Never use DWARF unwinder on Windows.
</li>
231 <li>Fix shrinking of direct mapped blocks in builtin allocator.
</li>
232 <li>Limit recursion depth in
<tt>string.match()
</tt> et al.
</li>
233 <li>Fix late despecialization of
<tt>ITERN
</tt> after loop has been entered.
</li>
234 <li>Fix
<tt>'f'
</tt> and
<tt>'L'
</tt> options for
<tt>debug.getinfo()
</tt> and
<tt>lua_getinfo()
</tt>.
</li>
235 <li>Fix
<tt>package.searchpath()
</tt>.
</li>
236 <li>OSX: Change dylib names to be consistent with other platforms.
</li>
237 <li>Android: Workaround for broken
<tt>sprintf(
"%g",
-
0.0)
</tt>.
</li>
238 <li>x86: Remove support for ancient CPUs without
<tt>CMOV
</tt> (before Pentium Pro).
</li>
239 <li>x86: Fix register allocation for calls returning register pair.
</li>
240 <li>x86/x64: Fix fusion of unsigned byte comparisons with swapped operands.
</li>
241 <li>ARM: Fix
<tt>tonumber()
</tt> argument check.
</li>
242 <li>ARM: Fix modulo operator and
<tt>math.floor()
</tt>/
<tt>math.ceil()
</tt> for
<tt>inf
</tt>/
<tt>nan
</tt>.
</li>
243 <li>ARM: Invoke SPLIT pass for leftover
<tt>IR_TOBIT
</tt>.
</li>
244 <li>ARM: Fix BASE register coalescing.
</li>
245 <li>PPC: Fix interpreter state setup in callbacks.
</li>
246 <li>PPC: Fix
<tt>string.sub()
</tt> range check.
</li>
247 <li>MIPS: Support generation of MIPS/MIPSEL bytecode object files.
</li>
248 <li>MIPS: Fix calls to
<tt>floor()
</tt>/
<tt>ceil()
</tt><tt>/trunc()
</tt>.
</li>
249 <li>ARM/PPC: Detect more target architecture variants.
</li>
250 <li>ARM/PPC/e500/MIPS: Fix tailcalls from fast functions, esp.
<tt>tostring()
</tt>.
</li>
251 <li>ARM/PPC/MIPS: Fix rematerialization of FP constants.
</li>
252 <li>FFI: Don't call
<tt>FreeLibrary()
</tt> on our own EXE/DLL.
</li>
253 <li>FFI: Resolve metamethods for constructors, too.
</li>
254 <li>FFI: Properly disable callbacks on iOS (would require executable memory).
</li>
255 <li>FFI: Fix cdecl string parsing during recording.
</li>
256 <li>FFI: Show address pointed to for
<tt>tostring(ref)
</tt>, too.
</li>
257 <li>FFI: Fix alignment of C call argument/return structure.
</li>
258 <li>FFI: Initialize all fields of standard types.
</li>
259 <li>FFI: Fix callback handling when new C
types are declared in callback.
</li>
260 <li>FFI: Fix recording of constructors for pointers.
</li>
261 <li>FFI: Always resolve metamethods for pointers to structs.
</li>
262 <li>FFI: Correctly propagate alignment when interning nested types.
</li>
264 <li>Structural and performance enhancements:
266 <li>Add allocation sinking and store sinking optimization.
</li>
267 <li>Constify immutable upvalues.
</li>
268 <li>Add builtin string to integer or FP number conversion. Improves cross-platform consistency and correctness.
</li>
269 <li>Create string hash slots in template tables for non-const values, too. Avoids later table resizes.
</li>
270 <li>Eliminate
<tt>HREFK
</tt> guard for template table references.
</li>
271 <li>Add various new FOLD rules.
</li>
272 <li>Don't use stack unwinding for
<tt>lua_yield()
</tt> (slow on x64).
</li>
273 <li>ARM, PPC, MIPS: Improve
<tt>XLOAD
</tt> operand fusion and register hinting.
</li>
274 <li>PPC, MIPS: Compile
<tt>math.sqrt()
</tt> to sqrt instruction, if available.
</li>
275 <li>FFI: Fold
<tt>KPTR
</tt> + constant offset in SPLIT pass.
</li>
276 <li>FFI: Optimize/inline
<tt>ffi.copy()
</tt> and
<tt>ffi.fill()
</tt>.
</li>
277 <li>FFI: Compile and optimize array/struct copies.
</li>
278 <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>
282 <h2 id=
"LuaJIT-2.0.0-beta10">LuaJIT
2.0.0-beta10
— 2012-
05-
09</h2>
286 <li>The MIPS of LuaJIT is complete. It requires a CPU conforming to the
287 MIPS32
R1 architecture with hardware FPU. O32 hard-fp ABI,
288 little-endian or big-endian.
</li>
289 <li>Auto-detect target arch via cross-compiler. No need for
290 <tt>TARGET=arch
</tt> anymore.
</li>
291 <li>Make DynASM compatible with Lua
5.2.
</li>
292 <li>From Lua
5.2: Try
<tt>__tostring
</tt> metamethod on non-string error
295 <li>Correctness and completeness:
297 <li>Fix parsing of hex literals with exponents.
</li>
298 <li>Fix bytecode dump for certain number constants.
</li>
299 <li>Fix argument type in error message for relative arguments.
</li>
300 <li>Fix argument error handling on Lua stacks without a frame.
</li>
301 <li>Add missing mcode limit check in assembler backend.
</li>
302 <li>Fix compilation on OpenBSD.
</li>
303 <li>Avoid recursive GC steps after GC-triggered trace exit.
</li>
304 <li>Replace
<tt><unwind.h
></tt> definitions with our own.
</li>
305 <li>Fix OSX build issues. Bump minimum required OSX version to
10.4.
</li>
306 <li>Fix discharge order of comparisons in Lua parser.
</li>
307 <li>Ensure running
<tt>__gc
</tt> of userdata created in
<tt>__gc
</tt>
309 <li>Limit number of userdata
<tt>__gc
</tt> separations at state close.
</li>
310 <li>Fix bytecode
<tt>JMP
</tt> slot range when optimizing
311 <tt>and
</tt>/
<tt>or
</tt> with constant LHS.
</li>
312 <li>Fix DSE of
<tt>USTORE
</tt>.
</li>
313 <li>Make
<tt>lua_concat()
</tt> work from C
hook with partial frame.
</li>
314 <li>Add required PHIs for implicit conversions, e.g. via
<tt>XREF
</tt>
316 <li>Add more comparison variants to Valgrind suppressions file.
</li>
317 <li>Disable loading bytecode with an extra header (BOM or
<tt>#!
</tt>).
</li>
318 <li>Fix PHI stack slot syncing.
</li>
319 <li>ARM: Reorder type/value tests to silence Valgrind.
</li>
320 <li>ARM: Fix register allocation for
<tt>ldrd
</tt>-optimized
322 <li>ARM: Fix conditional branch fixup for
<tt>OBAR
</tt>.
</li>
323 <li>ARM: Invoke SPLIT pass for
<tt>double
</tt> args in FFI call.
</li>
324 <li>ARM: Handle all
<tt>CALL*
</tt> ops with
<tt>double
</tt> results in
326 <li>ARM: Fix rejoin of
<tt>POW
</tt> in SPLIT pass.
</li>
327 <li>ARM: Fix compilation of
<tt>math.sinh
</tt>,
<tt>math.cosh
</tt>,
328 <tt>math.tanh
</tt>.
</li>
329 <li>ARM, PPC: Avoid pointless arg clearing in
<tt>BC_IFUNCF
</tt>.
</li>
330 <li>PPC: Fix resume after yield from hook.
</li>
331 <li>PPC: Fix argument checking for
<tt>rawget()
</tt>.
</li>
332 <li>PPC: Fix fusion of floating-point
<tt>XLOAD
</tt>/
<tt>XSTORE
</tt>.
</li>
333 <li>PPC: Fix
<tt>HREFK
</tt> code generation for huge tables.
</li>
334 <li>PPC: Use builtin D-Cache/I-Cache sync code.
</li>
338 <li>Ignore empty statements in
<tt>ffi.cdef()
</tt>.
</li>
339 <li>Ignore number parsing errors while skipping definitions.
</li>
340 <li>Don't touch frame in callbacks with tailcalls to fast functions.
</li>
341 <li>Fix library unloading on POSIX systems.
</li>
342 <li>Finalize cdata before userdata when closing the state.
</li>
343 <li>Change
<tt>ffi.load()
</tt> library name resolution for Cygwin.
</li>
344 <li>Fix resolving of function name redirects on Windows/x86.
</li>
345 <li>Fix symbol resolving error messages on Windows.
</li>
346 <li>Fix blacklisting of C functions calling callbacks.
</li>
347 <li>Fix result type of pointer difference.
</li>
348 <li>Use correct PC in FFI metamethod error message.
</li>
349 <li>Allow
<tt>'typedef _Bool int BOOL;'
</tt> for the Windows API.
</li>
350 <li>Don't record test for bool result of call, if ignored.
</li>
354 <h2 id=
"LuaJIT-2.0.0-beta9">LuaJIT
2.0.0-beta9
— 2011-
12-
14</h2>
358 <li>PPC port of LuaJIT is complete. Default is the dual-number port
359 (usually faster). Single-number port selectable via
<tt>src/Makefile
</tt>
361 <li>Add FFI callback support.
</li>
362 <li>Extend
<tt>-b
</tt> to generate
<tt>.c
</tt>,
<tt>.h
</tt> or
<tt>.obj/.o
</tt>
363 files with embedded bytecode.
</li>
364 <li>Allow loading embedded bytecode with
<tt>require()
</tt>.
</li>
365 <li>From Lua
5.2: Change to
<tt>'\z'
</tt> escape. Reject undefined escape
368 <li>Correctness and completeness:
370 <li>Fix OSX
10.7 build. Fix
<tt>install_name
</tt> and versioning on OSX.
</li>
371 <li>Fix iOS build.
</li>
372 <li>Install
<tt>dis_arm.lua
</tt>, too.
</li>
373 <li>Mark installed shared library as executable.
</li>
374 <li>Add debug option to
<tt>msvcbuild.bat
</tt> and improve error handling.
</li>
375 <li>Fix data-flow analysis for iterators.
</li>
376 <li>Fix forced unwinding triggered by external unwinder.
</li>
377 <li>Record missing
<tt>for
</tt> loop slot loads (return to lower frame).
</li>
378 <li>Always use ANSI variants of Windows system functions.
</li>
379 <li>Fix GC barrier for multi-result table constructor (
<tt>TSETM
</tt>).
</li>
380 <li>Fix/add various FOLD rules.
</li>
381 <li>Add potential PHI for number conversions due to type instability.
</li>
382 <li>Do not eliminate PHIs only referenced from other PHIs.
</li>
383 <li>Correctly anchor implicit number to string conversions in Lua/C API.
</li>
384 <li>Fix various stack limit checks.
</li>
385 <li>x64: Use thread-safe exceptions for external unwinding (GCC platforms).
</li>
386 <li>x64: Fix result type of cdata index conversions.
</li>
387 <li>x64: Fix
<tt>math.random()
</tt> and
<tt>bit.bswap()
</tt> code generation.
</li>
388 <li>x64: Fix
<tt>lightuserdata
</tt> comparisons.
</li>
389 <li>x64: Always extend stack-passed arguments to pointer size.
</li>
390 <li>ARM: Many fixes to code generation backend.
</li>
391 <li>PPC/e500: Fix dispatch for binop metamethods.
</li>
392 <li>PPC/e500: Save/restore condition registers when entering/leaving the VM.
</li>
393 <li>PPC/e500: Fix write barrier in stores of strings to upvalues.
</li>
397 <li>Fix C comment parsing.
</li>
398 <li>Fix snapshot optimization for cdata comparisons.
</li>
399 <li>Fix recording of const/enum lookups in namespaces.
</li>
400 <li>Fix call argument and return handling for
<tt>I8/U8/I16/U16
</tt> types.
</li>
401 <li>Fix unfused loads of float fields.
</li>
402 <li>Fix
<tt>ffi.string()
</tt> recording.
</li>
403 <li>Save
<tt>GetLastError()
</tt> around
<tt>ffi.load()
</tt> and symbol
405 <li>Improve ld script detection in
<tt>ffi.load()
</tt>.
</li>
406 <li>Record loads/stores to external variables in namespaces.
</li>
407 <li>Compile calls to stdcall, fastcall and vararg functions.
</li>
408 <li>Treat function ctypes like pointers in comparisons.
</li>
409 <li>Resolve
<tt>__call
</tt> metamethod for pointers, too.
</li>
410 <li>Record C function calls with bool return values.
</li>
411 <li>Record
<tt>ffi.errno()
</tt>.
</li>
412 <li>x86: Fix number to
<tt>uint32_t
</tt> conversion rounding.
</li>
413 <li>x86: Fix
64 bit arithmetic in assembler backend.
</li>
414 <li>x64: Fix struct-by-value calling conventions.
</li>
415 <li>ARM: Ensure invocation of SPLIT pass for float conversions.
</li>
417 <li>Structural and performance enhancements:
419 <li>Display trace types with
<tt>-jv
</tt> and
<tt>-jdump
</tt>.
</li>
420 <li>Record isolated calls. But prefer recording loops over calls.
</li>
421 <li>Specialize to prototype for non-monomorphic functions. Solves the
422 trace-explosion problem for closure-heavy programming styles.
</li>
423 <li>Always generate a portable
<tt>vmdef.lua
</tt>. Easier for distros.
</li>
427 <h2 id=
"LuaJIT-2.0.0-beta8">LuaJIT
2.0.0-beta8
— 2011-
06-
23</h2>
431 <li>Soft-float ARM port of LuaJIT is complete.
</li>
432 <li>Add support for bytecode loading/saving and
<tt>-b
</tt> command line
434 <li>From Lua
5.2:
<tt>__len
</tt> metamethod for tables
435 (disabled by default).
</li>
437 <li>Correctness and completeness:
439 <li>ARM: Misc. fixes for interpreter.
</li>
440 <li>x86/x64: Fix
<tt>bit.*
</tt> argument checking in interpreter.
</li>
441 <li>Catch early out-of-memory in memory allocator initialization.
</li>
442 <li>Fix data-flow analysis for paths leading to an upvalue close.
</li>
443 <li>Fix check for missing arguments in
<tt>string.format()
</tt>.
</li>
444 <li>Fix Solaris/x86 build (note: not a supported target).
</li>
445 <li>Fix recording of loops with instable directions in side traces.
</li>
446 <li>x86/x64: Fix fusion of comparisons with
<tt>u8
</tt>/
<tt>u16
</tt>
448 <li>x86/x64: Fix register allocation for variable shifts.
</li>
452 <li>Add
<tt>ffi.errno()
</tt>. Save
<tt>errno
</tt>/
<tt>GetLastError()
</tt>
453 around allocations etc.
</li>
454 <li>Fix
<tt>__gc
</tt> for VLA/VLS cdata objects.
</li>
455 <li>Fix recording of casts from
32 bit cdata pointers to integers.
</li>
456 <li><tt>tonumber(cdata)
</tt> returns
<tt>nil
</tt> for non-numbers.
</li>
457 <li>Show address pointed to for
<tt>tostring(pointer)
</tt>.
</li>
458 <li>Print
<tt>NULL
</tt> pointers as
<tt>"cdata<... *>: NULL"</tt>.
</li>
459 <li>Support
<tt>__tostring
</tt> metamethod for pointers to structs, too.
</li>
461 <li>Structural and performance enhancements:
463 <li>More tuning for loop unrolling heuristics.
</li>
464 <li>Flatten and compress in-memory debug info (saves ~
70%).
</li>
468 <h2 id=
"LuaJIT-2.0.0-beta7">LuaJIT
2.0.0-beta7
— 2011-
05-
05</h2>
472 <li>ARM port of the LuaJIT interpreter is complete.
</li>
473 <li>FFI library: Add
<tt>ffi.gc()
</tt>,
<tt>ffi.metatype()
</tt>,
474 <tt>ffi.istype()
</tt>.
</li>
475 <li>FFI library: Resolve ld script redirection in
<tt>ffi.load()
</tt>.
</li>
476 <li>From Lua
5.2:
<tt>package.searchpath()
</tt>,
<tt>fp:read(
"*L")
</tt>,
477 <tt>load(string)
</tt>.
</li>
478 <li>From Lua
5.2, disabled by default: empty statement,
479 <tt>table.unpack()
</tt>, modified
<tt>coroutine.running()
</tt>.
</li>
481 <li>Correctness and completeness:
483 <li>FFI library: numerous fixes.
</li>
484 <li>Fix type mismatches in store-to-load forwarding.
</li>
485 <li>Fix error handling within metamethods.
</li>
486 <li>Fix
<tt>table.maxn()
</tt>.
</li>
487 <li>Improve accuracy of
<tt>x^-k
</tt> on x64.
</li>
488 <li>Fix code generation for Intel Atom in x64 mode.
</li>
489 <li>Fix narrowing of POW.
</li>
490 <li>Fix recording of retried fast functions.
</li>
491 <li>Fix code generation for
<tt>bit.bnot()
</tt> and multiplies.
</li>
492 <li>Fix error location within cpcall frames.
</li>
493 <li>Add workaround for old libgcc unwind bug.
</li>
494 <li>Fix
<tt>lua_yield()
</tt> and
<tt>getmetatable(lightuserdata)
</tt> on x64.
</li>
495 <li>Misc. fixes for PPC/e500 interpreter.
</li>
496 <li>Fix stack slot updates for down-recursion.
</li>
498 <li>Structural and performance enhancements:
500 <li>Add dual-number mode (int/double) for the VM. Enabled for ARM.
</li>
501 <li>Improve narrowing of arithmetic operators and
<tt>for
</tt> loops.
</li>
502 <li>Tune loop unrolling heuristics and increase trace recorder limits.
</li>
503 <li>Eliminate dead slots in snapshots using bytecode data-flow analysis.
</li>
504 <li>Avoid phantom stores to proxy tables.
</li>
505 <li>Optimize lookups in empty proxy tables.
</li>
506 <li>Improve bytecode optimization of
<tt>and
</tt>/
<tt>or
</tt> operators.
</li>
510 <h2 id=
"LuaJIT-2.0.0-beta6">LuaJIT
2.0.0-beta6
— 2011-
02-
11</h2>
514 <li>PowerPC/e500v2 port of the LuaJIT interpreter is complete.
</li>
515 <li>Various minor features from Lua
5.2: Hex escapes in literals,
516 <tt>'\*'
</tt> escape, reversible
<tt>string.format(
"%q",s)
</tt>,
517 <tt>"%g"</tt> pattern,
<tt>table.sort
</tt> checks callbacks,
518 <tt>os.exit(status|true|false[,close])
</tt>.
</li>
519 <li>Lua
5.2 <tt>__pairs
</tt> and
<tt>__ipairs
</tt> metamethods
520 (disabled by default).
</li>
521 <li>Initial release of the FFI library.
</li>
523 <li>Correctness and completeness:
525 <li>Fix
<tt>string.format()
</tt> for non-finite numbers.
</li>
526 <li>Fix memory leak when compiled to use the built-in allocator.
</li>
527 <li>x86/x64: Fix unnecessary resize in
<tt>TSETM
</tt> bytecode.
</li>
528 <li>Fix various GC issues with traces and
<tt>jit.flush()
</tt>.
</li>
529 <li>x64: Fix fusion of indexes for array references.
</li>
530 <li>x86/x64: Fix stack overflow handling for coroutine results.
</li>
531 <li>Enable low-
2GB memory allocation on FreeBSD/x64.
</li>
532 <li>Fix
<tt>collectgarbage(
"count")
</tt> result if more than
2GB is in use.
</li>
533 <li>Fix parsing of hex floats.
</li>
534 <li>x86/x64: Fix loop branch inversion with trailing
535 <tt>HREF+NE/EQ
</tt>.
</li>
536 <li>Add
<tt>jit.os
</tt> string.
</li>
537 <li><tt>coroutine.create()
</tt> permits running C functions, too.
</li>
538 <li>Fix OSX build to work with newer ld64 versions.
</li>
539 <li>Fix bytecode optimization of
<tt>and
</tt>/
<tt>or
</tt> operators.
</li>
541 <li>Structural and performance enhancements:
543 <li>Emit specialized bytecode for
<tt>pairs()
</tt>/
<tt>next()
</tt>.
</li>
544 <li>Improve bytecode coalescing of
<tt>nil
</tt> constants.
</li>
545 <li>Compile calls to vararg functions.
</li>
546 <li>Compile
<tt>select()
</tt>.
</li>
547 <li>Improve alias analysis, esp. for loads from allocations.
</li>
548 <li>Tuning of various compiler heuristics.
</li>
549 <li>Refactor and extend IR conversion instructions.
</li>
550 <li>x86/x64: Various backend enhancements related to the FFI.
</li>
551 <li>Add SPLIT pass to split
64 bit IR instructions for
32 bit CPUs.
</li>
555 <h2 id=
"LuaJIT-2.0.0-beta5">LuaJIT
2.0.0-beta5
— 2010-
08-
24</h2>
557 <li>Correctness and completeness:
559 <li>Fix trace exit dispatch to function headers.
</li>
560 <li>Fix Windows and OSX builds with LUAJIT_DISABLE_JIT.
</li>
561 <li>Reorganize and fix placement of generated machine code on x64.
</li>
562 <li>Fix TNEW in x64 interpreter.
</li>
563 <li>Do not eliminate PHIs for values only referenced from side exits.
</li>
564 <li>OS-independent canonicalization of strings for non-finite numbers.
</li>
565 <li>Fix
<tt>string.char()
</tt> range check on x64.
</li>
566 <li>Fix
<tt>tostring()
</tt> resolving within
<tt>print()
</tt>.
</li>
567 <li>Fix error handling for
<tt>next()
</tt>.
</li>
568 <li>Fix passing of constant arguments to external calls on x64.
</li>
569 <li>Fix interpreter argument check for two-argument SSE math functions.
</li>
570 <li>Fix C frame chain corruption caused by
<tt>lua_cpcall()
</tt>.
</li>
571 <li>Fix return from
<tt>pcall()
</tt> within active hook.
</li>
573 <li>Structural and performance enhancements:
575 <li>Replace on-trace GC frame syncing with interpreter exit.
</li>
576 <li>Improve hash lookup specialization by not removing dead keys during GC.
</li>
577 <li>Turn traces into true GC objects.
</li>
578 <li>Avoid starting a GC cycle immediately after library init.
</li>
579 <li>Add weak guards to improve dead-code elimination.
</li>
580 <li>Speed up string interning.
</li>
584 <h2 id=
"LuaJIT-2.0.0-beta4">LuaJIT
2.0.0-beta4
— 2010-
03-
28</h2>
586 <li>Correctness and completeness:
588 <li>Fix precondition for on-trace creation of table keys.
</li>
589 <li>Fix
<tt>{f()}
</tt> on x64 when table is resized.
</li>
590 <li>Fix folding of ordered comparisons with same references.
</li>
591 <li>Fix snapshot restores for multi-result bytecodes.
</li>
592 <li>Fix potential hang when recording bytecode with nested closures.
</li>
593 <li>Fix recording of
<tt>getmetatable()
</tt>,
<tt>tonumber()
</tt> and bad argument types.
</li>
594 <li>Fix SLOAD fusion across returns to lower frames.
</li>
596 <li>Structural and performance enhancements:
598 <li>Add array bounds check elimination.
<tt>-Oabc
</tt> is enabled by default.
</li>
599 <li>More tuning for x64, e.g. smaller table objects.
</li>
603 <h2 id=
"LuaJIT-2.0.0-beta3">LuaJIT
2.0.0-beta3
— 2010-
03-
07</h2>
607 <li>Port integrated memory allocator to Linux/x64, Windows/x64 and OSX/x64.
</li>
608 <li>Port interpreter and JIT compiler to x64.
</li>
609 <li>Port DynASM to x64.
</li>
610 <li>Many
32/
64 bit cleanups in the VM.
</li>
611 <li>Allow building the interpreter with either x87 or SSE2 arithmetics.
</li>
612 <li>Add external unwinding and C++ exception interop (default on x64).
</li>
614 <li>Correctness and completeness:
616 <li>Fix constructor bytecode generation for certain conditional values.
</li>
617 <li>Fix some cases of ordered string comparisons.
</li>
618 <li>Fix
<tt>lua_tocfunction()
</tt>.
</li>
619 <li>Fix cutoff register in JMP bytecode for some conditional expressions.
</li>
620 <li>Fix PHI marking algorithm for references from variant slots.
</li>
621 <li>Fix
<tt>package.cpath
</tt> for non-default PREFIX.
</li>
622 <li>Fix DWARF2 frame unwind information for interpreter on OSX.
</li>
623 <li>Drive the GC forward on string allocations in the parser.
</li>
624 <li>Implement call/return hooks (zero-cost if disabled).
</li>
625 <li>Implement yield from C hooks.
</li>
626 <li>Disable JIT compiler on older non-SSE2 CPUs instead of aborting.
</li>
628 <li>Structural and performance enhancements:
630 <li>Compile recursive code (tail-, up- and down-recursion).
</li>
631 <li>Improve heuristics for bytecode penalties and blacklisting.
</li>
632 <li>Split CALL/FUNC recording and clean up fast function call semantics.
</li>
633 <li>Major redesign of internal function call handling.
</li>
634 <li>Improve FOR loop const specialization and integerness checks.
</li>
635 <li>Switch to pre-initialized stacks. Avoid frame-clearing.
</li>
636 <li>Colocation of prototypes and related data: bytecode, constants, debug info.
</li>
637 <li>Cleanup parser and streamline bytecode generation.
</li>
638 <li>Add support for weak IR references to register allocator.
</li>
639 <li>Switch to compressed, extensible snapshots.
</li>
640 <li>Compile returns to frames below the start frame.
</li>
641 <li>Improve alias analysis of upvalues using a disambiguation hash value.
</li>
642 <li>Compile floor/ceil/trunc to SSE2 helper calls or SSE4.1 instructions.
</li>
643 <li>Add generic C call handling to IR and backend.
</li>
644 <li>Improve KNUM fuse vs. load heuristics.
</li>
645 <li>Compile various
<tt>io.*()
</tt> functions.
</li>
646 <li>Compile
<tt>math.sinh()
</tt>,
<tt>math.cosh()
</tt>,
<tt>math.tanh()
</tt>
647 and
<tt>math.random()
</tt>.
</li>
651 <h2 id=
"LuaJIT-2.0.0-beta2">LuaJIT
2.0.0-beta2
— 2009-
11-
09</h2>
653 <li>Reorganize build system. Build static+shared library on POSIX.
</li>
654 <li>Allow C++ exception conversion on all platforms
655 using a wrapper function.
</li>
656 <li>Automatically catch C++ exceptions and rethrow Lua error
658 <li>Check for the correct x87 FPU precision at strategic points.
</li>
659 <li>Always use wrappers for libm functions.
</li>
660 <li>Resurrect metamethod name strings before copying them.
</li>
661 <li>Mark current trace, even if compiler is idle.
</li>
662 <li>Ensure FILE metatable is created only once.
</li>
663 <li>Fix type comparisons when different integer types are involved.
</li>
664 <li>Fix
<tt>getmetatable()
</tt> recording.
</li>
665 <li>Fix TDUP with dead keys in template table.
</li>
666 <li><tt>jit.flush(tr)
</tt> returns status.
667 Prevent manual flush of a trace that's still linked.
</li>
668 <li>Improve register allocation heuristics for invariant references.
</li>
669 <li>Compile the push/pop variants of
<tt>table.insert()
</tt> and
670 <tt>table.remove()
</tt>.
</li>
671 <li>Compatibility with MSVC
<tt>link /debug
</tt>.
</li>
672 <li>Fix
<tt>lua_iscfunction()
</tt>.
</li>
673 <li>Fix
<tt>math.random()
</tt> when compiled with
<tt>-fpic
</tt> (OSX).
</li>
674 <li>Fix
<tt>table.maxn()
</tt>.
</li>
675 <li>Bump
<tt>MACOSX_DEPLOYMENT_TARGET
</tt> to
<tt>10.4</tt></li>
676 <li><tt>luaL_check*()
</tt> and
<tt>luaL_opt*()
</tt> now support
677 negative arguments, too.
<br>
678 This matches the behavior of Lua
5.1, but not the specification.
</li>
681 <h2 id=
"LuaJIT-2.0.0-beta1">LuaJIT
2.0.0-beta1
— 2009-
10-
31</h2>
683 <li>This is the first public release of LuaJIT
2.0.
</li>
684 <li>The whole VM has been rewritten from the ground up, so there's
685 no point in listing differences over earlier versions.
</li>
689 <div class=
"major" style=
"background: #ffff80;">
690 <h2 id=
"LuaJIT-1.1.8">LuaJIT
1.1.8 — 2012-
04-
16</h2>
692 <li>Merged with Lua
5.1.5. Also integrated fixes for all
693 <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>
696 <h2 id=
"LuaJIT-1.1.7">LuaJIT
1.1.7 — 2011-
05-
05</h2>
698 <li>Added fixes for the
699 <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>
702 <h2 id=
"LuaJIT-1.1.6">LuaJIT
1.1.6 — 2010-
03-
28</h2>
704 <li>Added fixes for the
705 <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>
706 <li>Removed wrong GC check in
<tt>jit_createstate()
</tt>.
707 Thanks to Tim Mensch.
</li>
708 <li>Fixed bad assertions while compiling
<tt>table.insert()
</tt> and
709 <tt>table.remove()
</tt>.
</li>
712 <h2 id=
"LuaJIT-1.1.5">LuaJIT
1.1.5 — 2008-
10-
25</h2>
714 <li>Merged with Lua
5.1.4. Fixes all
715 <a href=
"http://www.lua.org/bugs.html#5.1.3"><span class=
"ext">»</span> known bugs in Lua
5.1.3</a>.
</li>
718 <h2 id=
"LuaJIT-1.1.4">LuaJIT
1.1.4 — 2008-
02-
05</h2>
720 <li>Merged with Lua
5.1.3. Fixes all
721 <a href=
"http://www.lua.org/bugs.html#5.1.2"><span class=
"ext">»</span> known bugs in Lua
5.1.2</a>.
</li>
722 <li>Fixed possible (but unlikely) stack corruption while compiling
723 <tt>k^x
</tt> expressions.
</li>
724 <li>Fixed DynASM template for cmpss instruction.
</li>
727 <h2 id=
"LuaJIT-1.1.3">LuaJIT
1.1.3 — 2007-
05-
24</h2>
729 <li>Merged with Lua
5.1.2. Fixes all
730 <a href=
"http://www.lua.org/bugs.html#5.1.1"><span class=
"ext">»</span> known bugs in Lua
5.1.1</a>.
</li>
731 <li>Merged pending Lua
5.1.x fixes:
"return -nil" bug, spurious count hook call.
</li>
732 <li>Remove a (sometimes) wrong assertion in
<tt>luaJIT_findpc()
</tt>.
</li>
733 <li>DynASM now allows labels for displacements and
<tt>.aword
</tt>.
</li>
734 <li>Fix some compiler warnings for DynASM glue (internal API change).
</li>
735 <li>Correct naming for SSSE3 (temporarily known as SSE4) in DynASM and x86 disassembler.
</li>
736 <li>The loadable debug modules now handle redirection to stdout
737 (e.g.
<tt>-j
trace=-
</tt>).
</li>
740 <h2 id=
"LuaJIT-1.1.2">LuaJIT
1.1.2 — 2006-
06-
24</h2>
742 <li>Fix MSVC inline assembly: use only local variables with
743 <tt>lua_number2int()
</tt>.
</li>
744 <li>Fix
"attempt to call a thread value" bug on Mac OS X:
745 make values of consts used as lightuserdata keys unique
746 to avoid joining by the compiler/linker.
</li>
749 <h2 id=
"LuaJIT-1.1.1">LuaJIT
1.1.1 — 2006-
06-
20</h2>
751 <li>Merged with Lua
5.1.1. Fixes all
752 <a href=
"http://www.lua.org/bugs.html#5.1"><span class=
"ext">»</span> known bugs in Lua
5.1</a>.
</li>
753 <li>Enforce (dynamic) linker error for EXE/DLL version mismatches.
</li>
754 <li>Minor changes to DynASM: faster pre-processing, smaller encoding
755 for some immediates.
</li>
758 This release is in sync with Coco
1.1.1 (see the
759 <a href=
"http://coco.luajit.org/changes.html"><span class=
"ext">»</span> Coco Change History
</a>).
762 <h2 id=
"LuaJIT-1.1.0">LuaJIT
1.1.0 — 2006-
03-
13</h2>
764 <li>Merged with Lua
5.1 (final).
</li>
766 <li>New JIT call frame setup:
768 <li>The C stack is kept
16 byte aligned (faster).
769 Mandatory for Mac OS X on Intel, too.
</li>
770 <li>Faster calling conventions for internal C helper functions.
</li>
771 <li>Better instruction scheduling for function prologue, OP_CALL and
775 <li>Miscellaneous optimizations:
777 <li>Faster loads of FP constants. Remove narrow-to-wide store-to-load
778 forwarding stalls.
</li>
779 <li>Use (scalar) SSE2 ops (if the CPU supports it) to speed up slot moves
780 and FP to integer conversions.
</li>
781 <li>Optimized the two-argument form of
<tt>OP_CONCAT
</tt> (
<tt>a..b
</tt>).
</li>
782 <li>Inlined
<tt>OP_MOD
</tt> (
<tt>a%b
</tt>).
783 With better accuracy than the C variant, too.
</li>
784 <li>Inlined
<tt>OP_POW
</tt> (
<tt>a^b
</tt>). Unroll
<tt>x^k
</tt> or
785 use
<tt>k^x =
2^(log2(k)*x)
</tt> or call
<tt>pow()
</tt>.
</li>
788 <li>Changes in the optimizer:
790 <li>Improved hinting for table keys derived from table values
791 (
<tt>t1[t2[x]]
</tt>).
</li>
792 <li>Lookup hinting now works with arbitrary object types and
793 supports index chains, too.
</li>
794 <li>Generate type hints for arithmetic and comparison operators,
795 OP_LEN, OP_CONCAT and OP_FORPREP.
</li>
796 <li>Remove several hint definitions in favour of a generic COMBINE hint.
</li>
797 <li>Complete rewrite of
<tt>jit.opt_inline
</tt> module
798 (ex
<tt>jit.opt_lib
</tt>).
</li>
801 <li>Use adaptive deoptimization:
803 <li>If runtime verification of a contract fails, the affected
804 instruction is recompiled and patched on-the-fly.
805 Regular programs will trigger deoptimization only occasionally.
</li>
806 <li>This avoids generating code for uncommon fallback cases
807 most of the time. Generated code is up to
30% smaller compared to
808 LuaJIT
1.0.3.
</li>
809 <li>Deoptimization is used for many opcodes and contracts:
811 <li>OP_CALL, OP_TAILCALL: type mismatch for callable.
</li>
812 <li>Inlined calls: closure mismatch, parameter number and type mismatches.
</li>
813 <li>OP_GETTABLE, OP_SETTABLE: table or key type and range mismatches.
</li>
814 <li>All arithmetic and comparison operators, OP_LEN, OP_CONCAT,
815 OP_FORPREP: operand type and range mismatches.
</li>
817 <li>Complete redesign of the debug and traceback info
818 (bytecode
↔ mcode) to support deoptimization.
819 Much more flexible and needs only
50% of the space.
</li>
820 <li>The modules
<tt>jit.trace
</tt>,
<tt>jit.dumphints
</tt> and
821 <tt>jit.dump
</tt> handle deoptimization.
</li>
824 <li>Inlined many popular library functions
825 (for commonly used arguments only):
827 <li>Most
<tt>math.*
</tt> functions (the
18 most used ones)
828 [
2x-
10x faster].
</li>
829 <li><tt>string.len
</tt>,
<tt>string.sub
</tt> and
<tt>string.char
</tt>
830 [
2x-
10x faster].
</li>
831 <li><tt>table.insert
</tt>,
<tt>table.remove
</tt> and
<tt>table.getn
</tt>
833 <li><tt>coroutine.yield
</tt> and
<tt>coroutine.resume
</tt>
835 <li><tt>pairs
</tt>,
<tt>ipairs
</tt> and the corresponding iterators
836 [
8x-
15x faster].
</li>
839 <li>Changes in the core and loadable modules and the stand-alone executable:
841 <li>Added
<tt>jit.version
</tt>,
<tt>jit.version_num
</tt>
842 and
<tt>jit.arch
</tt>.
</li>
843 <li>Reorganized some internal API functions (
<tt>jit.util.*mcode*
</tt>).
</li>
844 <li>The
<tt>-j dump
</tt> output now shows JSUB names, too.
</li>
845 <li>New x86 disassembler module written in pure Lua. No dependency
846 on ndisasm anymore. Flexible API, very compact (
500 lines)
847 and complete (x87, MMX, SSE, SSE2, SSE3, SSSE3, privileged instructions).
</li>
848 <li><tt>luajit -v
</tt> prints the LuaJIT version and copyright
849 on a separate line.
</li>
852 <li>Added SSE, SSE2, SSE3 and SSSE3 support to DynASM.
</li>
853 <li>Miscellaneous doc changes. Added a section about
854 <a href=
"install.html#embedding">embedding LuaJIT
</a>.
</li>
857 This release is in sync with Coco
1.1.0 (see the
858 <a href=
"http://coco.luajit.org/changes.html"><span class=
"ext">»</span> Coco Change History
</a>).
862 <div class=
"major" style=
"background: #ffffd0;">
863 <h2 id=
"LuaJIT-1.0.3">LuaJIT
1.0.3 — 2005-
09-
08</h2>
865 <li>Even more docs.
</li>
866 <li>Unified closure checks in
<tt>jit.*
</tt>.
</li>
867 <li>Fixed some range checks in
<tt>jit.util.*
</tt>.
</li>
868 <li>Fixed __newindex call originating from
<tt>jit_settable_str()
</tt>.
</li>
869 <li>Merged with Lua
5.1 alpha (including early bug fixes).
</li>
872 This is the first public release of LuaJIT.
875 <h2 id=
"LuaJIT-1.0.2">LuaJIT
1.0.2 — 2005-
09-
02</h2>
877 <li>Add support for flushing the Valgrind translation cache
<br>
878 (
<tt>MYCFLAGS= -DUSE_VALGRIND
</tt>).
</li>
879 <li>Add support for freeing executable mcode memory to the
<tt>mmap()
</tt>-based
880 variant for POSIX systems.
</li>
881 <li>Reorganized the C
function signature handling in
882 <tt>jit.opt_lib
</tt>.
</li>
883 <li>Changed to index-based hints for inlining C
functions.
884 Still no support in the backend for inlining.
</li>
885 <li>Hardcode
<tt>HEAP_CREATE_ENABLE_EXECUTE
</tt> value if undefined.
</li>
886 <li>Misc. changes to the
<tt>jit.*
</tt> modules.
</li>
887 <li>Misc. changes to the Makefiles.
</li>
888 <li>Lots of new docs.
</li>
889 <li>Complete doc reorg.
</li>
892 Not released because Lua
5.1 alpha came out today.
895 <h2 id=
"LuaJIT-1.0.1">LuaJIT
1.0.1 — 2005-
08-
31</h2>
897 <li>Missing GC step in
<tt>OP_CONCAT
</tt>.
</li>
898 <li>Fix result handling for C
–> JIT calls.
</li>
899 <li>Detect CPU feature bits.
</li>
900 <li>Encode conditional moves (
<tt>fucomip
</tt>) only when supported.
</li>
901 <li>Add fallback instructions for FP compares.
</li>
902 <li>Add support for
<tt>LUA_COMPAT_VARARG
</tt>. Still disabled by default.
</li>
903 <li>MSVC needs a specific place for the
<tt>CALLBACK
</tt> attribute
904 (David Burgess).
</li>
905 <li>Misc. doc updates.
</li>
908 Interim non-public release.
909 Special thanks to Adam D. Moss for reporting most of the bugs.
912 <h2 id=
"LuaJIT-1.0.0">LuaJIT
1.0.0 — 2005-
08-
29</h2>
914 This is the initial non-public release of LuaJIT.
921 Copyright
© 2005-
2014 Mike Pall
922 <span class=
"noprint">
924 <a href=
"contact.html">Contact
</a>