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-2011, 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=
"install.html">Installation
</a>
28 <a href=
"running.html">Running
</a>
31 <a href=
"extensions.html">Extensions
</a>
33 <a href=
"ext_ffi.html">FFI Library
</a>
35 <a href=
"ext_ffi_tutorial.html">FFI Tutorial
</a>
37 <a href=
"ext_ffi_api.html">ffi.* API
</a>
39 <a href=
"ext_ffi_semantics.html">FFI Semantics
</a>
42 <a href=
"ext_jit.html">jit.* Library
</a>
44 <a href=
"ext_c_api.html">Lua/C API
</a>
47 <a href=
"status.html">Status
</a>
49 <a class=
"current" href=
"changes.html">Changes
</a>
52 <a href=
"faq.html">FAQ
</a>
54 <a href=
"http://luajit.org/performance.html">Performance
<span class=
"ext">»</span></a>
56 <a href=
"http://luajit.org/download.html">Download
<span class=
"ext">»</span></a>
61 This is a list of changes between the released versions of LuaJIT.
<br>
62 The current
<span style=
"color: #c00000;">development version
</span> is
<strong>LuaJIT
2.0.0-beta9
</strong>.
<br>
63 The current
<span style=
"color: #0000c0;">stable version
</span> is
<strong>LuaJIT
1.1.7</strong>.
67 <a href=
"http://luajit.org/changes.html"><span class=
"ext">»</span> Online Change History
</a>
68 to see whether newer versions are available.
71 <div class=
"major" style=
"background: #ffd0d0;">
72 <h2 id=
"LuaJIT-2.0.0-beta9">LuaJIT
2.0.0-beta9
— 2011-
12-
14</h2>
76 <li>PPC port of LuaJIT is complete. Default is the dual-number port
77 (usually faster). Single-number port selectable via
<tt>src/Makefile
</tt>
79 <li>Add FFI callback support.
</li>
80 <li>Extend
<tt>-b
</tt> to generate
<tt>.c
</tt>,
<tt>.h
</tt> or
<tt>.obj/.o
</tt>
81 files with embedded bytecode.
</li>
82 <li>Allow loading embedded bytecode with
<tt>require()
</tt>.
</li>
83 <li>From Lua
5.2: Change to
<tt>'\z'
</tt> escape. Reject undefined escape
86 <li>Correctness and completeness:
88 <li>Fix OSX
10.7 build. Fix
<tt>install_name
</tt> and versioning on OSX.
</li>
89 <li>Fix iOS build.
</li>
90 <li>Install
<tt>dis_arm.lua
</tt>, too.
</li>
91 <li>Mark installed shared library as executable.
</li>
92 <li>Add debug option to
<tt>msvcbuild.bat
</tt> and improve error handling.
</li>
93 <li>Fix data-flow analysis for iterators.
</li>
94 <li>Fix forced unwinding triggered by external unwinder.
</li>
95 <li>Record missing
<tt>for
</tt> loop slot loads (return to lower frame).
</li>
96 <li>Always use ANSI variants of Windows system functions.
</li>
97 <li>Fix GC barrier for multi-result table constructor (
<tt>TSETM
</tt>).
</li>
98 <li>Fix/add various FOLD rules.
</li>
99 <li>Add potential PHI for number conversions due to type instability.
</li>
100 <li>Do not eliminate PHIs only referenced from other PHIs.
</li>
101 <li>Correctly anchor implicit number to string conversions in Lua/C API.
</li>
102 <li>Fix various stack limit checks.
</li>
103 <li>x64: Use thread-safe exceptions for external unwinding (GCC platforms).
</li>
104 <li>x64: Fix result type of cdata index conversions.
</li>
105 <li>x64: Fix
<tt>math.random()
</tt> and
<tt>bit.bswap()
</tt> code generation.
</li>
106 <li>x64: Fix
<tt>lightuserdata
</tt> comparisons.
</li>
107 <li>x64: Always extend stack-passed arguments to pointer size.
</li>
108 <li>ARM: Many fixes to code generation backend.
</li>
109 <li>PPC/e500: Fix dispatch for binop metamethods.
</li>
110 <li>PPC/e500: Save/restore condition registers when entering/leaving the VM.
</li>
111 <li>PPC/e500: Fix write barrier in stores of strings to upvalues.
</li>
115 <li>Fix C comment parsing.
</li>
116 <li>Fix snapshot optimization for cdata comparisons.
</li>
117 <li>Fix recording of const/enum lookups in namespaces.
</li>
118 <li>Fix call argument and return handling for
<tt>I8/U8/I16/U16
</tt> types.
</li>
119 <li>Fix unfused loads of float fields.
</li>
120 <li>Fix
<tt>ffi.string()
</tt> recording.
</li>
121 <li>Save
<tt>GetLastError()
</tt> around
<tt>ffi.load()
</tt> and symbol
123 <li>Improve ld script detection in
<tt>ffi.load()
</tt>.
</li>
124 <li>Record loads/stores to external variables in namespaces.
</li>
125 <li>Compile calls to stdcall, fastcall and vararg functions.
</li>
126 <li>Treat function ctypes like pointers in comparisons.
</li>
127 <li>Resolve
<tt>__call
</tt> metamethod for pointers, too.
</li>
128 <li>Record C function calls with bool return values.
</li>
129 <li>Record
<tt>ffi.errno()
</tt>.
</li>
130 <li>x86: Fix number to
<tt>uint32_t
</tt> conversion rounding.
</li>
131 <li>x86: Fix
64 bit arithmetic in assembler backend.
</li>
132 <li>x64: Fix struct-by-value calling conventions.
</li>
133 <li>ARM: Ensure invocation of SPLIT pass for float conversions.
</li>
135 <li>Structural and performance enhancements:
137 <li>Display trace types with
<tt>-jv
</tt> and
<tt>-jdump
</tt>.
</li>
138 <li>Record isolated calls. But prefer recording loops over calls.
</li>
139 <li>Specialize to prototype for non-monomorphic functions. Solves the
140 trace-explosion problem for closure-heavy programming styles.
</li>
141 <li>Always generate a portable
<tt>vmdef.lua
</tt>. Easier for distros.
</li>
145 <h2 id=
"LuaJIT-2.0.0-beta8">LuaJIT
2.0.0-beta8
— 2011-
06-
23</h2>
149 <li>Soft-float ARM port of LuaJIT is complete.
</li>
150 <li>Add support for bytecode loading/saving and
<tt>-b
</tt> command line
152 <li>From Lua
5.2:
<tt>__len
</tt> metamethod for tables
153 (disabled by default).
</li>
155 <li>Correctness and completeness:
157 <li>ARM: Misc. fixes for interpreter.
</li>
158 <li>x86/x64: Fix
<tt>bit.*
</tt> argument checking in interpreter.
</li>
159 <li>Catch early out-of-memory in memory allocator initialization.
</li>
160 <li>Fix data-flow analysis for paths leading to an upvalue close.
</li>
161 <li>Fix check for missing arguments in
<tt>string.format()
</tt>.
</li>
162 <li>Fix Solaris/x86 build (note: not a supported target).
</li>
163 <li>Fix recording of loops with instable directions in side traces.
</li>
164 <li>x86/x64: Fix fusion of comparisons with
<tt>u8
</tt>/
<tt>u16
</tt>
166 <li>x86/x64: Fix register allocation for variable shifts.
</li>
170 <li>Add
<tt>ffi.errno()
</tt>. Save
<tt>errno
</tt>/
<tt>GetLastError()
</tt>
171 around allocations etc.
</li>
172 <li>Fix
<tt>__gc
</tt> for VLA/VLS cdata objects.
</li>
173 <li>Fix recording of casts from
32 bit cdata pointers to integers.
</li>
174 <li><tt>tonumber(cdata)
</tt> returns
<tt>nil
</tt> for non-numbers.
</li>
175 <li>Show address pointed to for
<tt>tostring(pointer)
</tt>.
</li>
176 <li>Print
<tt>NULL
</tt> pointers as
<tt>"cdata<... *>: NULL"</tt>.
</li>
177 <li>Support
<tt>__tostring
</tt> metamethod for pointers to structs, too.
</li>
179 <li>Structural and performance enhancements:
181 <li>More tuning for loop unrolling heuristics.
</li>
182 <li>Flatten and compress in-memory debug info (saves ~
70%).
</li>
186 <h2 id=
"LuaJIT-2.0.0-beta7">LuaJIT
2.0.0-beta7
— 2011-
05-
05</h2>
190 <li>ARM port of the LuaJIT interpreter is complete.
</li>
191 <li>FFI library: Add
<tt>ffi.gc()
</tt>,
<tt>ffi.metatype()
</tt>,
192 <tt>ffi.istype()
</tt>.
</li>
193 <li>FFI library: Resolve ld script redirection in
<tt>ffi.load()
</tt>.
</li>
194 <li>From Lua
5.2:
<tt>package.searchpath()
</tt>,
<tt>fp:read(
"*L")
</tt>,
195 <tt>load(string)
</tt>.
</li>
196 <li>From Lua
5.2, disabled by default: empty statement,
197 <tt>table.unpack()
</tt>, modified
<tt>coroutine.running()
</tt>.
</li>
199 <li>Correctness and completeness:
201 <li>FFI library: numerous fixes.
</li>
202 <li>Fix type mismatches in store-to-load forwarding.
</li>
203 <li>Fix error handling within metamethods.
</li>
204 <li>Fix
<tt>table.maxn()
</tt>.
</li>
205 <li>Improve accuracy of
<tt>x^-k
</tt> on x64.
</li>
206 <li>Fix code generation for Intel Atom in x64 mode.
</li>
207 <li>Fix narrowing of POW.
</li>
208 <li>Fix recording of retried fast functions.
</li>
209 <li>Fix code generation for
<tt>bit.bnot()
</tt> and multiplies.
</li>
210 <li>Fix error location within cpcall frames.
</li>
211 <li>Add workaround for old libgcc unwind bug.
</li>
212 <li>Fix
<tt>lua_yield()
</tt> and
<tt>getmetatable(lightuserdata)
</tt> on x64.
</li>
213 <li>Misc. fixes for PPC/e500 interpreter.
</li>
214 <li>Fix stack slot updates for down-recursion.
</li>
216 <li>Structural and performance enhancements:
218 <li>Add dual-number mode (int/double) for the VM. Enabled for ARM.
</li>
219 <li>Improve narrowing of arithmetic operators and
<tt>for
</tt> loops.
</li>
220 <li>Tune loop unrolling heuristics and increase trace recorder limits.
</li>
221 <li>Eliminate dead slots in snapshots using bytecode data-flow analysis.
</li>
222 <li>Avoid phantom stores to proxy tables.
</li>
223 <li>Optimize lookups in empty proxy tables.
</li>
224 <li>Improve bytecode optimization of
<tt>and
</tt>/
<tt>or
</tt> operators.
</li>
228 <h2 id=
"LuaJIT-2.0.0-beta6">LuaJIT
2.0.0-beta6
— 2011-
02-
11</h2>
232 <li>PowerPC/e500v2 port of the LuaJIT interpreter is complete.
</li>
233 <li>Various minor features from Lua
5.2: Hex escapes in literals,
234 <tt>'\*'
</tt> escape, reversible
<tt>string.format(
"%q",s)
</tt>,
235 <tt>"%g"</tt> pattern,
<tt>table.sort
</tt> checks callbacks,
236 <tt>os.exit(status|true|false[,close])
</tt>.
</li>
237 <li>Lua
5.2 <tt>__pairs
</tt> and
<tt>__ipairs
</tt> metamethods
238 (disabled by default).
</li>
239 <li>Initial release of the FFI library.
</li>
241 <li>Correctness and completeness:
243 <li>Fix
<tt>string.format()
</tt> for non-finite numbers.
</li>
244 <li>Fix memory leak when compiled to use the built-in allocator.
</li>
245 <li>x86/x64: Fix unnecessary resize in
<tt>TSETM
</tt> bytecode.
</li>
246 <li>Fix various GC issues with traces and
<tt>jit.flush()
</tt>.
</li>
247 <li>x64: Fix fusion of indexes for array references.
</li>
248 <li>x86/x64: Fix stack overflow handling for coroutine results.
</li>
249 <li>Enable low-
2GB memory allocation on FreeBSD/x64.
</li>
250 <li>Fix
<tt>collectgarbage(
"count")
</tt> result if more than
2GB is in use.
</li>
251 <li>Fix parsing of hex floats.
</li>
252 <li>x86/x64: Fix loop branch inversion with trailing
253 <tt>HREF+NE/EQ
</tt>.
</li>
254 <li>Add
<tt>jit.os
</tt> string.
</li>
255 <li><tt>coroutine.create()
</tt> permits running C functions, too.
</li>
256 <li>Fix OSX build to work with newer ld64 versions.
</li>
257 <li>Fix bytecode optimization of
<tt>and
</tt>/
<tt>or
</tt> operators.
</li>
259 <li>Structural and performance enhancements:
261 <li>Emit specialized bytecode for
<tt>pairs()
</tt>/
<tt>next()
</tt>.
</li>
262 <li>Improve bytecode coalescing of
<tt>nil
</tt> constants.
</li>
263 <li>Compile calls to vararg functions.
</li>
264 <li>Compile
<tt>select()
</tt>.
</li>
265 <li>Improve alias analysis, esp. for loads from allocations.
</li>
266 <li>Tuning of various compiler heuristics.
</li>
267 <li>Refactor and extend IR conversion instructions.
</li>
268 <li>x86/x64: Various backend enhancements related to the FFI.
</li>
269 <li>Add SPLIT pass to split
64 bit IR instructions for
32 bit CPUs.
</li>
273 <h2 id=
"LuaJIT-2.0.0-beta5">LuaJIT
2.0.0-beta5
— 2010-
08-
24</h2>
275 <li>Correctness and completeness:
277 <li>Fix trace exit dispatch to function headers.
</li>
278 <li>Fix Windows and OSX builds with LUAJIT_DISABLE_JIT.
</li>
279 <li>Reorganize and fix placement of generated machine code on x64.
</li>
280 <li>Fix TNEW in x64 interpreter.
</li>
281 <li>Do not eliminate PHIs for values only referenced from side exits.
</li>
282 <li>OS-independent canonicalization of strings for non-finite numbers.
</li>
283 <li>Fix
<tt>string.char()
</tt> range check on x64.
</li>
284 <li>Fix
<tt>tostring()
</tt> resolving within
<tt>print()
</tt>.
</li>
285 <li>Fix error handling for
<tt>next()
</tt>.
</li>
286 <li>Fix passing of constant arguments to external calls on x64.
</li>
287 <li>Fix interpreter argument check for two-argument SSE math functions.
</li>
288 <li>Fix C frame chain corruption caused by
<tt>lua_cpcall()
</tt>.
</li>
289 <li>Fix return from
<tt>pcall()
</tt> within active hook.
</li>
291 <li>Structural and performance enhancements:
293 <li>Replace on-trace GC frame syncing with interpreter exit.
</li>
294 <li>Improve hash lookup specialization by not removing dead keys during GC.
</li>
295 <li>Turn traces into true GC objects.
</li>
296 <li>Avoid starting a GC cycle immediately after library init.
</li>
297 <li>Add weak guards to improve dead-code elimination.
</li>
298 <li>Speed up string interning.
</li>
302 <h2 id=
"LuaJIT-2.0.0-beta4">LuaJIT
2.0.0-beta4
— 2010-
03-
28</h2>
304 <li>Correctness and completeness:
306 <li>Fix precondition for on-trace creation of table keys.
</li>
307 <li>Fix
<tt>{f()}
</tt> on x64 when table is resized.
</li>
308 <li>Fix folding of ordered comparisons with same references.
</li>
309 <li>Fix snapshot restores for multi-result bytecodes.
</li>
310 <li>Fix potential hang when recording bytecode with nested closures.
</li>
311 <li>Fix recording of
<tt>getmetatable()
</tt>,
<tt>tonumber()
</tt> and bad argument types.
</li>
312 <li>Fix SLOAD fusion across returns to lower frames.
</li>
314 <li>Structural and performance enhancements:
316 <li>Add array bounds check elimination.
<tt>-Oabc
</tt> is enabled by default.
</li>
317 <li>More tuning for x64, e.g. smaller table objects.
</li>
321 <h2 id=
"LuaJIT-2.0.0-beta3">LuaJIT
2.0.0-beta3
— 2010-
03-
07</h2>
325 <li>Port integrated memory allocator to Linux/x64, Windows/x64 and OSX/x64.
</li>
326 <li>Port interpreter and JIT compiler to x64.
</li>
327 <li>Port DynASM to x64.
</li>
328 <li>Many
32/
64 bit cleanups in the VM.
</li>
329 <li>Allow building the interpreter with either x87 or SSE2 arithmetics.
</li>
330 <li>Add external unwinding and C++ exception interop (default on x64).
</li>
332 <li>Correctness and completeness:
334 <li>Fix constructor bytecode generation for certain conditional values.
</li>
335 <li>Fix some cases of ordered string comparisons.
</li>
336 <li>Fix
<tt>lua_tocfunction()
</tt>.
</li>
337 <li>Fix cutoff register in JMP bytecode for some conditional expressions.
</li>
338 <li>Fix PHI marking algorithm for references from variant slots.
</li>
339 <li>Fix
<tt>package.cpath
</tt> for non-default PREFIX.
</li>
340 <li>Fix DWARF2 frame unwind information for interpreter on OSX.
</li>
341 <li>Drive the GC forward on string allocations in the parser.
</li>
342 <li>Implement call/return hooks (zero-cost if disabled).
</li>
343 <li>Implement yield from C hooks.
</li>
344 <li>Disable JIT compiler on older non-SSE2 CPUs instead of aborting.
</li>
346 <li>Structural and performance enhancements:
348 <li>Compile recursive code (tail-, up- and down-recursion).
</li>
349 <li>Improve heuristics for bytecode penalties and blacklisting.
</li>
350 <li>Split CALL/FUNC recording and clean up fast function call semantics.
</li>
351 <li>Major redesign of internal function call handling.
</li>
352 <li>Improve FOR loop const specialization and integerness checks.
</li>
353 <li>Switch to pre-initialized stacks. Avoid frame-clearing.
</li>
354 <li>Colocation of prototypes and related data: bytecode, constants, debug info.
</li>
355 <li>Cleanup parser and streamline bytecode generation.
</li>
356 <li>Add support for weak IR references to register allocator.
</li>
357 <li>Switch to compressed, extensible snapshots.
</li>
358 <li>Compile returns to frames below the start frame.
</li>
359 <li>Improve alias analysis of upvalues using a disambiguation hash value.
</li>
360 <li>Compile floor/ceil/trunc to SSE2 helper calls or SSE4.1 instructions.
</li>
361 <li>Add generic C call handling to IR and backend.
</li>
362 <li>Improve KNUM fuse vs. load heuristics.
</li>
363 <li>Compile various
<tt>io.*()
</tt> functions.
</li>
364 <li>Compile
<tt>math.sinh()
</tt>,
<tt>math.cosh()
</tt>,
<tt>math.tanh()
</tt>
365 and
<tt>math.random()
</tt>.
</li>
369 <h2 id=
"LuaJIT-2.0.0-beta2">LuaJIT
2.0.0-beta2
— 2009-
11-
09</h2>
371 <li>Reorganize build system. Build static+shared library on POSIX.
</li>
372 <li>Allow C++ exception conversion on all platforms
373 using a wrapper function.
</li>
374 <li>Automatically catch C++ exceptions and rethrow Lua error
376 <li>Check for the correct x87 FPU precision at strategic points.
</li>
377 <li>Always use wrappers for libm functions.
</li>
378 <li>Resurrect metamethod name strings before copying them.
</li>
379 <li>Mark current trace, even if compiler is idle.
</li>
380 <li>Ensure FILE metatable is created only once.
</li>
381 <li>Fix type comparisons when different integer types are involved.
</li>
382 <li>Fix
<tt>getmetatable()
</tt> recording.
</li>
383 <li>Fix TDUP with dead keys in template table.
</li>
384 <li><tt>jit.flush(tr)
</tt> returns status.
385 Prevent manual flush of a trace that's still linked.
</li>
386 <li>Improve register allocation heuristics for invariant references.
</li>
387 <li>Compile the push/pop variants of
<tt>table.insert()
</tt> and
388 <tt>table.remove()
</tt>.
</li>
389 <li>Compatibility with MSVC
<tt>link /debug
</tt>.
</li>
390 <li>Fix
<tt>lua_iscfunction()
</tt>.
</li>
391 <li>Fix
<tt>math.random()
</tt> when compiled with
<tt>-fpic
</tt> (OSX).
</li>
392 <li>Fix
<tt>table.maxn()
</tt>.
</li>
393 <li>Bump
<tt>MACOSX_DEPLOYMENT_TARGET
</tt> to
<tt>10.4</tt></li>
394 <li><tt>luaL_check*()
</tt> and
<tt>luaL_opt*()
</tt> now support
395 negative arguments, too.
<br>
396 This matches the behavior of Lua
5.1, but not the specification.
</li>
399 <h2 id=
"LuaJIT-2.0.0-beta1">LuaJIT
2.0.0-beta1
— 2009-
10-
31</h2>
401 <li>This is the first public release of LuaJIT
2.0.
</li>
402 <li>The whole VM has been rewritten from the ground up, so there's
403 no point in listing differences over earlier versions.
</li>
407 <div class=
"major" style=
"background: #d0d0ff;">
408 <h2 id=
"LuaJIT-1.1.7">LuaJIT
1.1.7 — 2011-
05-
05</h2>
410 <li>Added fixes for the
411 <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>
414 <h2 id=
"LuaJIT-1.1.6">LuaJIT
1.1.6 — 2010-
03-
28</h2>
416 <li>Added fixes for the
417 <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>
418 <li>Removed wrong GC check in
<tt>jit_createstate()
</tt>.
419 Thanks to Tim Mensch.
</li>
420 <li>Fixed bad assertions while compiling
<tt>table.insert()
</tt> and
421 <tt>table.remove()
</tt>.
</li>
424 <h2 id=
"LuaJIT-1.1.5">LuaJIT
1.1.5 — 2008-
10-
25</h2>
426 <li>Merged with Lua
5.1.4. Fixes all
427 <a href=
"http://www.lua.org/bugs.html#5.1.3"><span class=
"ext">»</span> known bugs in Lua
5.1.3</a>.
</li>
430 <h2 id=
"LuaJIT-1.1.4">LuaJIT
1.1.4 — 2008-
02-
05</h2>
432 <li>Merged with Lua
5.1.3. Fixes all
433 <a href=
"http://www.lua.org/bugs.html#5.1.2"><span class=
"ext">»</span> known bugs in Lua
5.1.2</a>.
</li>
434 <li>Fixed possible (but unlikely) stack corruption while compiling
435 <tt>k^x
</tt> expressions.
</li>
436 <li>Fixed DynASM template for cmpss instruction.
</li>
439 <h2 id=
"LuaJIT-1.1.3">LuaJIT
1.1.3 — 2007-
05-
24</h2>
441 <li>Merged with Lua
5.1.2. Fixes all
442 <a href=
"http://www.lua.org/bugs.html#5.1.1"><span class=
"ext">»</span> known bugs in Lua
5.1.1</a>.
</li>
443 <li>Merged pending Lua
5.1.x fixes:
"return -nil" bug, spurious count hook call.
</li>
444 <li>Remove a (sometimes) wrong assertion in
<tt>luaJIT_findpc()
</tt>.
</li>
445 <li>DynASM now allows labels for displacements and
<tt>.aword
</tt>.
</li>
446 <li>Fix some compiler warnings for DynASM glue (internal API change).
</li>
447 <li>Correct naming for SSSE3 (temporarily known as SSE4) in DynASM and x86 disassembler.
</li>
448 <li>The loadable debug modules now handle redirection to stdout
449 (e.g.
<tt>-j
trace=-
</tt>).
</li>
452 <h2 id=
"LuaJIT-1.1.2">LuaJIT
1.1.2 — 2006-
06-
24</h2>
454 <li>Fix MSVC inline assembly: use only local variables with
455 <tt>lua_number2int()
</tt>.
</li>
456 <li>Fix
"attempt to call a thread value" bug on Mac OS X:
457 make values of consts used as lightuserdata keys unique
458 to avoid joining by the compiler/linker.
</li>
461 <h2 id=
"LuaJIT-1.1.1">LuaJIT
1.1.1 — 2006-
06-
20</h2>
463 <li>Merged with Lua
5.1.1. Fixes all
464 <a href=
"http://www.lua.org/bugs.html#5.1"><span class=
"ext">»</span> known bugs in Lua
5.1</a>.
</li>
465 <li>Enforce (dynamic) linker error for EXE/DLL version mismatches.
</li>
466 <li>Minor changes to DynASM: faster pre-processing, smaller encoding
467 for some immediates.
</li>
470 This release is in sync with Coco
1.1.1 (see the
471 <a href=
"http://coco.luajit.org/changes.html"><span class=
"ext">»</span> Coco Change History
</a>).
474 <h2 id=
"LuaJIT-1.1.0">LuaJIT
1.1.0 — 2006-
03-
13</h2>
476 <li>Merged with Lua
5.1 (final).
</li>
478 <li>New JIT call frame setup:
480 <li>The C stack is kept
16 byte aligned (faster).
481 Mandatory for Mac OS X on Intel, too.
</li>
482 <li>Faster calling conventions for internal C helper functions.
</li>
483 <li>Better instruction scheduling for function prologue, OP_CALL and
487 <li>Miscellaneous optimizations:
489 <li>Faster loads of FP constants. Remove narrow-to-wide store-to-load
490 forwarding stalls.
</li>
491 <li>Use (scalar) SSE2 ops (if the CPU supports it) to speed up slot moves
492 and FP to integer conversions.
</li>
493 <li>Optimized the two-argument form of
<tt>OP_CONCAT
</tt> (
<tt>a..b
</tt>).
</li>
494 <li>Inlined
<tt>OP_MOD
</tt> (
<tt>a%b
</tt>).
495 With better accuracy than the C variant, too.
</li>
496 <li>Inlined
<tt>OP_POW
</tt> (
<tt>a^b
</tt>). Unroll
<tt>x^k
</tt> or
497 use
<tt>k^x =
2^(log2(k)*x)
</tt> or call
<tt>pow()
</tt>.
</li>
500 <li>Changes in the optimizer:
502 <li>Improved hinting for table keys derived from table values
503 (
<tt>t1[t2[x]]
</tt>).
</li>
504 <li>Lookup hinting now works with arbitrary object types and
505 supports index chains, too.
</li>
506 <li>Generate type hints for arithmetic and comparison operators,
507 OP_LEN, OP_CONCAT and OP_FORPREP.
</li>
508 <li>Remove several hint definitions in favour of a generic COMBINE hint.
</li>
509 <li>Complete rewrite of
<tt>jit.opt_inline
</tt> module
510 (ex
<tt>jit.opt_lib
</tt>).
</li>
513 <li>Use adaptive deoptimization:
515 <li>If runtime verification of a contract fails, the affected
516 instruction is recompiled and patched on-the-fly.
517 Regular programs will trigger deoptimization only occasionally.
</li>
518 <li>This avoids generating code for uncommon fallback cases
519 most of the time. Generated code is up to
30% smaller compared to
520 LuaJIT
1.0.3.
</li>
521 <li>Deoptimization is used for many opcodes and contracts:
523 <li>OP_CALL, OP_TAILCALL: type mismatch for callable.
</li>
524 <li>Inlined calls: closure mismatch, parameter number and type mismatches.
</li>
525 <li>OP_GETTABLE, OP_SETTABLE: table or key type and range mismatches.
</li>
526 <li>All arithmetic and comparison operators, OP_LEN, OP_CONCAT,
527 OP_FORPREP: operand type and range mismatches.
</li>
529 <li>Complete redesign of the debug and traceback info
530 (bytecode
↔ mcode) to support deoptimization.
531 Much more flexible and needs only
50% of the space.
</li>
532 <li>The modules
<tt>jit.trace
</tt>,
<tt>jit.dumphints
</tt> and
533 <tt>jit.dump
</tt> handle deoptimization.
</li>
536 <li>Inlined many popular library functions
537 (for commonly used arguments only):
539 <li>Most
<tt>math.*
</tt> functions (the
18 most used ones)
540 [
2x-
10x faster].
</li>
541 <li><tt>string.len
</tt>,
<tt>string.sub
</tt> and
<tt>string.char
</tt>
542 [
2x-
10x faster].
</li>
543 <li><tt>table.insert
</tt>,
<tt>table.remove
</tt> and
<tt>table.getn
</tt>
545 <li><tt>coroutine.yield
</tt> and
<tt>coroutine.resume
</tt>
547 <li><tt>pairs
</tt>,
<tt>ipairs
</tt> and the corresponding iterators
548 [
8x-
15x faster].
</li>
551 <li>Changes in the core and loadable modules and the stand-alone executable:
553 <li>Added
<tt>jit.version
</tt>,
<tt>jit.version_num
</tt>
554 and
<tt>jit.arch
</tt>.
</li>
555 <li>Reorganized some internal API functions (
<tt>jit.util.*mcode*
</tt>).
</li>
556 <li>The
<tt>-j dump
</tt> output now shows JSUB names, too.
</li>
557 <li>New x86 disassembler module written in pure Lua. No dependency
558 on ndisasm anymore. Flexible API, very compact (
500 lines)
559 and complete (x87, MMX, SSE, SSE2, SSE3, SSSE3, privileged instructions).
</li>
560 <li><tt>luajit -v
</tt> prints the LuaJIT version and copyright
561 on a separate line.
</li>
564 <li>Added SSE, SSE2, SSE3 and SSSE3 support to DynASM.
</li>
565 <li>Miscellaneous doc changes. Added a section about
566 <a href=
"install.html#embedding">embedding LuaJIT
</a>.
</li>
569 This release is in sync with Coco
1.1.0 (see the
570 <a href=
"http://coco.luajit.org/changes.html"><span class=
"ext">»</span> Coco Change History
</a>).
574 <div class=
"major" style=
"background: #ffffd0;">
575 <h2 id=
"LuaJIT-1.0.3">LuaJIT
1.0.3 — 2005-
09-
08</h2>
577 <li>Even more docs.
</li>
578 <li>Unified closure checks in
<tt>jit.*
</tt>.
</li>
579 <li>Fixed some range checks in
<tt>jit.util.*
</tt>.
</li>
580 <li>Fixed __newindex call originating from
<tt>jit_settable_str()
</tt>.
</li>
581 <li>Merged with Lua
5.1 alpha (including early bug fixes).
</li>
584 This is the first public release of LuaJIT.
587 <h2 id=
"LuaJIT-1.0.2">LuaJIT
1.0.2 — 2005-
09-
02</h2>
589 <li>Add support for flushing the Valgrind translation cache
<br>
590 (
<tt>MYCFLAGS= -DUSE_VALGRIND
</tt>).
</li>
591 <li>Add support for freeing executable mcode memory to the
<tt>mmap()
</tt>-based
592 variant for POSIX systems.
</li>
593 <li>Reorganized the C
function signature handling in
594 <tt>jit.opt_lib
</tt>.
</li>
595 <li>Changed to index-based hints for inlining C
functions.
596 Still no support in the backend for inlining.
</li>
597 <li>Hardcode
<tt>HEAP_CREATE_ENABLE_EXECUTE
</tt> value if undefined.
</li>
598 <li>Misc. changes to the
<tt>jit.*
</tt> modules.
</li>
599 <li>Misc. changes to the Makefiles.
</li>
600 <li>Lots of new docs.
</li>
601 <li>Complete doc reorg.
</li>
604 Not released because Lua
5.1 alpha came out today.
607 <h2 id=
"LuaJIT-1.0.1">LuaJIT
1.0.1 — 2005-
08-
31</h2>
609 <li>Missing GC step in
<tt>OP_CONCAT
</tt>.
</li>
610 <li>Fix result handling for C
–> JIT calls.
</li>
611 <li>Detect CPU feature bits.
</li>
612 <li>Encode conditional moves (
<tt>fucomip
</tt>) only when supported.
</li>
613 <li>Add fallback instructions for FP compares.
</li>
614 <li>Add support for
<tt>LUA_COMPAT_VARARG
</tt>. Still disabled by default.
</li>
615 <li>MSVC needs a specific place for the
<tt>CALLBACK
</tt> attribute
616 (David Burgess).
</li>
617 <li>Misc. doc updates.
</li>
620 Interim non-public release.
621 Special thanks to Adam D. Moss for reporting most of the bugs.
624 <h2 id=
"LuaJIT-1.0.0">LuaJIT
1.0.0 — 2005-
08-
29</h2>
626 This is the initial non-public release of LuaJIT.
633 Copyright
© 2005-
2011 Mike Pall
634 <span class=
"noprint">
636 <a href=
"contact.html">Contact
</a>