Enable JIT compiler for x64.

Only works on Linux/x64 and Windows/x64 right now.
Force an x64 build on Linux/x64 with: make CC="gcc -m64"
NYI: handle on-trace OOM errors.
NYI: improve register allocation for x64.
This commit is contained in:
Mike Pall 2010-02-28 21:45:38 +01:00
parent 956065fd04
commit 2e22d33d9d
7 changed files with 25 additions and 31 deletions

View File

@ -58,7 +58,7 @@ to see whether newer versions are available.
<li>CPU support:
<ul>
<li>Port integrated memory allocator to Linux/x64 and Windows/x64.</li>
<li>Port the interpreter to x64.</li>
<li>Port interpreter and JIT compiler to x64.</li>
<li>Port DynASM to x64.</li>
<li>Many 32/64 bit cleanups in the VM.</li>
<li>Allow building the interpreter with either x87 or SSE2 arithmetics.</li>
@ -80,6 +80,7 @@ to see whether newer versions are available.
</ul></li>
<li>Structural and performance enhancements:
<ul>
<li>Improve heuristics for bytecode penalties and blacklisting.</li>
<li>Split CALL/FUNC recording and clean up fast function call semantics.</li>
<li>Major redesign of internal function call handling.</li>
<li>Improve FOR loop const specialization and integerness checks.</li>

View File

@ -137,9 +137,8 @@ The compiler will happily optimize away such indirections.</dd>
machine code. This means the code generator must be ported to each
architecture. And the fast interpreter is written in assembler and
must be ported, too. This is quite an undertaking.<br> Currently only
x86 CPUs are supported. x64 support is in the works. Other
architectures will follow with sufficient demand and/or
sponsoring.</dd>
x86 and x64 CPUs are supported. Other architectures will follow based
on sufficient user demand and/or sponsoring.</dd>
</dl>
<dl>

View File

@ -54,16 +54,10 @@ LuaJIT currently builds out-of-the box on all popular x86 systems
(Linux, Windows, OSX etc.). It builds and runs fine as a 32&nbsp;bit
application under x64-based systems, too.
</p>
<p class="indent" style="color: #00a000;">
The x64 port of LuaJIT is still experimental and not enabled by default.
It only contains the interpreter and only builds on Linux/x64 and WIN64
right now. If you want to give it a try, follow the special build instructions
below.
</p>
<p class="indent" style="color: #00a000;">
Note that the pure interpreter is quite a bit faster than Lua, but of
course not as fast as the x86 JIT compiler. Work on the x64 JIT compiler
is still ongoing.
<p style="color: #00a000;">
The x64 port of LuaJIT is still preliminary and not enabled by default.
It only builds on Linux/x64 and Windows/x64 right now. If you want to
give it a try, please follow the special build instructions below.
</p>
<h2>Configuring LuaJIT</h2>
@ -119,8 +113,7 @@ make
</pre>
<div style="color: #00a000;">
<p>
You can force a build of the x64 interpreter on Linux/x64 with the
following command:
You can force a native x64 build on Linux/x64 with the following command:
</p>
<pre class="code">
make CC="gcc -m64"
@ -212,7 +205,7 @@ setenv /release /x86
</pre>
<div style="color: #00a000;">
<p>
Or select the x64 compiler (this only builds the interpreter right now):
Or select the x64 compiler:
</p>
<pre class="code">
setenv /release /x64

View File

@ -63,8 +63,9 @@ standard Lua interpreter and can be deployed as a drop-in replacement.
<p>
LuaJIT offers more performance, at the expense of portability. It
currently runs on all popular operating systems based on <b>x86 CPUs</b>
(Linux, Windows, OSX etc.). A port to x64 CPUs is currently ongoing &mdash;
you can follow its progress in the <a href="http://luajit.org/download.html"><span class="ext">&raquo;</span>&nbsp;git repository</a>.
(Linux, Windows, OSX etc.). A preliminary port to Linux/x64 and Windows/x64
is already available (follow the <a href="install.html">build instructions</a>
to enable it).
Other platforms will be supported in the future, based on user demand
and sponsoring.
</p>

View File

@ -148,9 +148,8 @@ trace linking heuristics prevent this, but in the worst case this
means the code always falls back to the interpreter.
</li>
<li>
<b>Trace management</b> needs more tuning: better blacklisting of aborted
traces, less drastic countermeasures against trace explosion and better
heuristics in general.
<b>Trace management</b> needs more tuning: less drastic countermeasures
against trace explosion and better heuristics in general.
</li>
<li>
Some checks are missing in the JIT-compiled code for obscure situations
@ -199,7 +198,7 @@ Nonetheless, it compiles to native code and needs to be adapted to each
architecture. Porting the compiler backend is probably the easier task,
but a key element of its design is the fast interpreter, written in
machine-specific assembler.<br>
An x64 port is already in the works, thanks to the
A preliminary x64 port is already available, thanks to the
<a href="sponsors.html">LuaJIT sponsorship program</a>.
Other ports will follow &mdash; companies which are
interested in sponsoring a port to a particular architecture, please

View File

@ -20,9 +20,6 @@ NODOTABIVER= 51
# Turn any of the optional settings on by removing the '#' in front of them.
# You need to 'make clean' and 'make' again, if you change any options.
#
# Note: LuaJIT can only be compiled for x86, and not for x64 (yet)!
# In the meantime, the x86 binary runs fine under a x64 OS.
#
# It's recommended to compile at least for i686. By default the assembler part
# of the interpreter makes use of CMOV/FCOMI*/FUCOMI* instructions, anyway.
CC= gcc -m32 -march=i686
@ -30,10 +27,14 @@ CC= gcc -m32 -march=i686
# binaries to a different machine:
#CC= gcc -m32 -march=native
#
# Currently LuaJIT builds by default as a 32 bit binary. Use this to force
# a native x64 build on Linux/x64:
#CC= gcc -m64
#
# Since the assembler part does NOT maintain a frame pointer, it's pointless
# to slow down the C part by not omitting it. Debugging and tracebacks are
# not affected -- the assembler part has frame unwind information and GCC
# emits it with -g (see CCDEBUG below).
# to slow down the C part by not omitting it. Debugging, tracebacks and
# unwinding are not affected -- the assembler part has frame unwind
# information and GCC emits it where needed (x64) or with -g (see CCDEBUG).
CCOPT= -O2 -fomit-frame-pointer
# Use this if you want to generate a smaller binary (but it's slower):
#CCOPT= -Os -fomit-frame-pointer
@ -75,7 +76,8 @@ XCFLAGS=
#
# Use the system provided memory allocator (realloc) instead of the
# bundled memory allocator. This is slower, but sometimes helpful for
# debugging. It's mandatory for Valgrind's memcheck tool, too.
# debugging. It's helpful for Valgrind's memcheck tool, too. This option
# cannot be enabled on x64, since the built-in allocator is mandatory.
#XCFLAGS+= -DLUAJIT_USE_SYSMALLOC
#
# This define is required to run LuaJIT under Valgrind. The Valgrind

View File

@ -48,7 +48,6 @@
#define LJ_TARGET_X64 1
#define LJ_TARGET_X86ORX64 1
#define LJ_PAGESIZE 4096
#define LJ_ARCH_NOJIT 1 /* NYI */
#else
#error "No target architecture defined"
#endif