LuaJIT is fully upwards-compatible with Lua 5.1. It supports all » standard Lua library functions and the full set of » Lua/C API functions.
LuaJIT is also fully ABI-compatible to Lua 5.1 at the linker/dynamic loader level. This means you can compile a C module against the standard Lua headers and load the same shared library from either Lua or LuaJIT.
bit.* — Bitwise Operations
LuaJIT supports all bitwise operations as defined by » Lua BitOp:
bit.tobit bit.tohex bit.bnot bit.band bit.bor bit.bxor bit.lshift bit.rshift bit.arshift bit.rol bit.ror bit.bswap
This module is a LuaJIT built-in — you don't need to download or install Lua BitOp. The Lua BitOp site has full documentation for all » Lua BitOp API functions.
Please make sure to require the module before using any of its functions:
local bit = require("bit")
An already installed Lua BitOp module is ignored by LuaJIT. This way you can use bit operations from both Lua and LuaJIT on a shared installation.
jit.* — JIT compiler control
The functions in this built-in module control the behavior of the JIT compiler engine.
jit.on()
jit.off()
Turns the whole JIT compiler on (default) or off.
These functions are typically used with the command line options -j on or -j off.
jit.flush()
Flushes the whole cache of compiled code.
jit.flush(tr)
Flushes the code for the specified root trace and all of its side traces from the cache.
jit.on(func|true [,true|false])
jit.off(func|true [,true|false])
jit.flush(func|true [,true|false])
jit.on enables JIT compilation for a Lua function (this is the default).
jit.off disables JIT compilation for a Lua function and flushes any already compiled code from the code cache.
jit.flush flushes the code, but doesn't affect the enable/disable status.
The current function, i.e. the Lua function calling this library function, can also be specified by passing true as the first argument.
If the second argument is true, JIT compilation is also enabled, disabled or flushed recursively for all subfunctions of a function. With false only the subfunctions are affected.
The jit.on and jit.off functions only set a flag which is checked when the function is about to be compiled. They do not trigger immediate compilation.
Typical usage is jit.off(true, true) in the main chunk of a module to turn off JIT compilation for the whole module for debugging purposes.
jit.version
Contains the LuaJIT version string.
jit.version_num
Contains the version number of the LuaJIT core. Version xx.yy.zz is represented by the decimal number xxyyzz.
jit.arch
Contains the target architecture name (CPU and optional ABI).
jit.opt.* — JIT compiler optimization control
This module provides the backend for the -O command line option.
You can also use it programmatically, e.g.:
jit.opt.start(2) -- same as -O2 jit.opt.start("-dce") jit.opt.start("hotloop=10", "hotexit=2")
Unlike in LuaJIT 1.x, the module is built-in and optimization is turned on by default! It's no longer necessary to run require("jit.opt").start(), which was one of the ways to enable optimization.
jit.util.* — JIT compiler introspection
This module holds functions to introspect the bytecode, generated traces, the IR and the generated machine code. The functionality provided by this module is still in flux and therefore undocumented.
The debug modules -jbc, -jv and -jdump make extensive use of these functions. Please check out their source code, if you want to know more.