+LuaJIT has only a single stand-alone executable, called luajit on +POSIX systems or luajit.exe on Windows. It can be used to run simple +Lua statements or whole Lua applications from the command line. It has an +interactive mode, too. +
++Note: the beta test releases only install under the versioned name on +POSIX systems (to avoid overwriting a previous version). You either need +to type luajit-2.0.0-beta9 to start it or create a symlink +with a command like this: +
++sudo ln -sf luajit-2.0.0-beta9 /usr/local/bin/luajit ++
+Unlike previous versions optimization is turned on by default in
+LuaJIT 2.0!
It's no longer necessary to use luajit -O.
+
Command Line Options
++The luajit stand-alone executable is just a slightly modified +version of the regular lua stand-alone executable. +It supports the same basic options, too. luajit -h +prints a short list of the available options. Please have a look at the +» Lua manual +for details. +
++LuaJIT has some additional options: +
+ +-b[options] input output
++This option saves or lists bytecode. The following additional options +are accepted: +
+-
+
- -l — Only list bytecode. +
- -s — Strip debug info (this is the default). +
- -g — Keep debug info. +
- -n name — Set module name (default: auto-detect from input name) +
- -t type — Set output file type (default: auto-detect from output name). +
- -a arch — Override architecture for object files (default: native). +
- -o os — Override OS for object files (default: native). +
- -e chunk — Use chunk string as input. +
- - (a single minus sign) — Use stdin as input and/or stdout as output. +
+The output file type is auto-detected from the extension of the output +file name: +
+-
+
- c — C source file, exported bytecode data. +
- h — C header file, static bytecode data. +
- obj or o — Object file, exported bytecode data +(OS- and architecture-specific). +
- raw or any other extension — Raw bytecode file (portable). +
+Notes: +
+-
+
- See also string.dump() +for information on bytecode portability and compatibility. +
- A file in raw bytecode format is auto-detected and can be loaded like +any Lua source file. E.g. directly from the command line or with +loadfile(), dofile() etc. +
- To statically embed the bytecode of a module in your application, +generate an object file and just link it with your application. +
- On most ELF-based systems (e.g. Linux) you need to explicitly export the +global symbols when linking your application, e.g. with: -Wl,-E +
- require() tries to load embedded bytecode data from exported +symbols (in *.exe or lua51.dll on Windows) and from +shared libraries in package.cpath. +
+Typical usage examples: +
++luajit -b test.lua test.out # Save bytecode to test.out +luajit -bg test.lua test.out # Keep debug info +luajit -be "print('hello world')" test.out # Save cmdline script + +luajit -bl test.lua # List to stdout +luajit -bl test.lua test.txt # List to test.txt +luajit -ble "print('hello world')" # List cmdline script + +luajit -b test.lua test.obj # Generate object file +# Link test.obj with your application and load it with require("test") ++ +
-j cmd[=arg[,arg...]]
++This option performs a LuaJIT control command or activates one of the +loadable extension modules. The command is first looked up in the +jit.* library. If no matching function is found, a module +named jit.<cmd> is loaded and the start() +function of the module is called with the specified arguments (if +any). The space between -j and cmd is optional. +
++Here are the available LuaJIT control commands: +
+-
+
- -jon — Turns the JIT compiler on (default). +
- -joff — Turns the JIT compiler off (only use the interpreter). +
- -jflush — Flushes the whole cache of compiled code. +
- -jv — Shows verbose information about the progress of the JIT compiler. +
- -jdump — Dumps the code and structures used in various compiler stages. +
+The -jv and -jdump commands are extension modules +written in Lua. They are mainly used for debugging the JIT compiler +itself. For a description of their options and output format, please +read the comment block at the start of their source. +They can be found in the lib directory of the source +distribution or installed under the jit directory. By default +this is /usr/local/share/luajit-2.0.0-beta9/jit on POSIX +systems. +
+ +-O[level]
+-O[+]flag -O-flag
+-Oparam=value
++This options allows fine-tuned control of the optimizations used by +the JIT compiler. This is mainly intended for debugging LuaJIT itself. +Please note that the JIT compiler is extremely fast (we are talking +about the microsecond to millisecond range). Disabling optimizations +doesn't have any visible impact on its overhead, but usually generates +code that runs slower. +
++The first form sets an optimization level — this enables a +specific mix of optimization flags. -O0 turns off all +optimizations and higher numbers enable more optimizations. Omitting +the level (i.e. just -O) sets the default optimization level, +which is -O3 in the current version. +
++The second form adds or removes individual optimization flags. +The third form sets a parameter for the VM or the JIT compiler +to a specific value. +
++You can either use this option multiple times (like -Ocse +-O-dce -Ohotloop=10) or separate several settings with a comma +(like -O+cse,-dce,hotloop=10). The settings are applied from +left to right and later settings override earlier ones. You can freely +mix the three forms, but note that setting an optimization level +overrides all earlier flags. +
++Here are the available flags and at what optimization levels they +are enabled: +
+Flag | +-O1 | +-O2 | +-O3 | ++ |
fold | • | • | • | Constant Folding, Simplifications and Reassociation |
cse | • | • | • | Common-Subexpression Elimination |
dce | • | • | • | Dead-Code Elimination |
narrow | • | • | Narrowing of numbers to integers | |
loop | • | • | Loop Optimizations (code hoisting) | |
fwd | • | Load Forwarding (L2L) and Store Forwarding (S2L) | ||
dse | • | Dead-Store Elimination | ||
abc | • | Array Bounds Check Elimination | ||
fuse | • | Fusion of operands into instructions |
+Here are the parameters and their default settings: +
+Parameter | +Default | ++ |
maxtrace | 1000 | Max. number of traces in the cache |
maxrecord | 4000 | Max. number of recorded IR instructions |
maxirconst | 500 | Max. number of IR constants of a trace |
maxside | 100 | Max. number of side traces of a root trace |
maxsnap | 500 | Max. number of snapshots for a trace |
hotloop | 56 | Number of iterations to detect a hot loop or hot call |
hotexit | 10 | Number of taken exits to start a side trace |
tryside | 4 | Number of attempts to compile a side trace |
instunroll | 4 | Max. unroll factor for instable loops |
loopunroll | 15 | Max. unroll factor for loop ops in side traces |
callunroll | 3 | Max. unroll factor for pseudo-recursive calls |
recunroll | 2 | Min. unroll factor for true recursion |
sizemcode | 32 | Size of each machine code area in KBytes (Windows: 64K) |
maxmcode | 512 | Max. total size of all machine code areas in KBytes |
+