* check/lightning.c, include/lightning.h, lib/jit_arm.c,
lib/jit_mips.c, lib/jit_ppc.c, lib/jit_print.c, lib/jit_x86.c,
lib/lightning.c: Change return value of jit_arg{,_f,_d} to
a jit_node_t* object, that should be used as argument to
jit_getarg_{c,uc,s,us,i,ui,l,f,d}. This just requires changing
from jit_int32_t to jit_pointer_t (or jit_node_t*) the "handle"
for the getarg calls, with the benefit that it makes it easy
to implement patching of the stack address of non register
arguments, this way allowing to implement variable size stack
frames if applicable; useful if there are too many registers and
jit functions uses only a few callee save registers.
* check/stack.ok, check/stack.tst: New files to test data
integrity on a deep chain of stack frames.
* lib/jit_arm.c, lib/jit_arm-cpu.c, lib/jit_mips.c,
lib/jit_mips-cpu.c, lib/jit_ppc.c, lib/jit_ppc-cpu.c,
lib/jit_x86.c, lib/jit_x86-cpu.c: Calculate _jit->function->stack
in the emit stage, otherwise it will calculate it wrong if
need to jit_allocai space to spill registers.
* lib/lightning.c: Correct wrong offset when updating the
"current" jit function pointer in the code that may need to
allocate stack space to spill registers.
* check/lightning.c: Correct off by one data space check.
* check/Makefile.am: Update for new test case.
* check/lightning.c: Remove the ".cpu name value" syntax,
as it was not able to do proper changes before the jit
internal data structure was initialized. Now it supports
several getopt options to force using different jit
generation options, effectively replacing the previous
syntax.
* check/run-test: Add simple extra logic to handle differently
named test scripts, used to test things like x87 coprocessor
in ix86, and arm instruction set or software float in armv7l.
* configure.ac: Add some AC_RUN_IFELSE calls to figure at
compile time if can test different code generation options,
and update Makefile generation accordingly.
* check/Makefile.am, lib/jit_arm.c, lib/jit_x86.c: Update to
properly work with the test tool updating the jit_cpu global
information.
* check/check.arm.sh, check/check.swf.sh, check/check.x87.sh:
New wrapper files passing -mthumb=0, mvfp=0 and -mx87=1 to
the test tool, if applicable, so that it can validate alternate
code generation options on test hosts that support them.
* include/lightning.h, include/lightning/jit_private.h,
lib/jit_arm.c, lib/jit_mips.c, lib/jit_ppc.c, lib/jit_x86.c,
lib/lightning.c: Make jit_ellipsis implementation not
backend specific. It is not intended to handle va_list
like objects at runtime, as jit_arg* and jit_getarg*
return constant values resolved at parse time, so, effectively
it is not possible to create printf like jit functions, as
there is no va_start, va_arg, va_end, etc, abstraction. This
limitation should be kept for the sake of making new ports
easier.
* include/lightning.h, lib/jit_arm.c, lib/jit_mips.c,
lib/jit_ppc.c, lib/jit_x86.c, lib/lightning.c: Change jit_prepare
to no longer receive an argument. If receiving an argument, it
should be an ABI specifier, not a boolean if varargs or not,
and add the new jit_ellipsis call, to specify where the
ellipsis is in the C prototype of the function being called.
Note that currently it is not supported to define varargs
functions and it will be ignored if calling jit_ellipsis not
in a prepare/finish* block, but this should be addressed.
* check/allocai.tst, check/alu_add.tst, check/alu_and.tst,
check/alu_com.tst, check/alu_div.tst, check/alu_lsh.tst,
check/alu_mul.tst, check/alu_neg.tst, check/alu_or.tst,
check/alu_rem.tst, check/alu_rsh.tst, check/alu_sub.tst,
check/alu_xor.tst, check/alux_add.tst, check/alux_sub.tst,
check/bp.tst, check/branch.tst, check/cvt.tst, check/divi.tst,
check/fib.tst, check/ldsti.tst, check/ldstr-c.tst,
check/ldstr.tst, check/ldstxi-c.tst, check/ldstxi.tst,
check/ldstxr-c.tst, check/ldstxr.tst, check/rpn.tst,
check/lightning.c: Update for the change to jit_prepare and
addition of jit_ellipsis.
* check/all.tst, check/lightning.c: Only declare or use 64 bit
interfaces on 64 bit builds.
* check/fib.tst: Use simpler logic to not need preprocessor
conditionals for 32 or 64 bit.
* include/lightning.h: Only declare 64 bit macros on a 64 bit
build. Code using lightning must know about wordsize and the
jit generation limitations, also, this way it generates a
compile time failure, not a runtime assertion.
* include/lightning/jit_x86.h: Correct typo in macro name.
* lib/jit_arm.c, lib/jit_arm-cpu.c, lib/jit_mips.c,
lib/jit_mips-cpu.c, lib/jit_ppc.c, lib/jit_ppc-cpu.c,
lib/jit_x86.c, lib/jit_x86-cpu.c: Correct wrong code to get
current jit function pointer.
* lib/lightning.c: Move call to the simplify() optimization
to after register liveness is known. Previous code did work
by accident but now with proper test cases the problem was
noticed.
* lib/jit_disasm.c: Always cast bfd_vma to long long when
passing it as printf argument.
2012-12-02 Paulo Andrade <pcpa@gnu.org>
* tests/Makefile.am, tests/3to2.c, tests/3to2.ok, tests/add.c,
tests/add.ok, tests/allocai.c, tests/allocai.ok, tests/bp.c,
tests/bp.ok, tests/divi.c, tests/divi.ok, tests/fib.c, tests/fib.ok,
tests/fibdelay.c, tests/fibdelay.ok, tests/fibit.c, tests/fibit.ok,
tests/funcfp.c, tests/funcfp.ok, tests/incr.c, tests/incr.ok,
tests/ldst.c, tests/ldst.ok, tests/ldxi.c, tests/ldxi.ok,
tests/modi.c, tests/modi.ok, tests/movi.c, tests/movi.ok,
tests/printf.c, tests/printf.ok, tests/printf2.c, tests/printf2.ok,
tests/ret.c, tests/ret.ok, tests/rpn.c, tests/rpn.ok, tests/rpnfp.c,
tests/rpnfp.ok, tests/sete.c, tests/sete.ok, tests/testfp.c,
tests/testfp.ok, tests-run-test: Removed previous test suite, in
favor of a newer one in the check subdirectory.
* check/3to2.ok, check/3to2.tst, check/add.ok, check/add.tst,
check/allocai.ok, check/allocai.tst, check/bp.ok, check/bp.tst,
check/divi.ok, check/divi.tst, check/fib.ok, check/fib.tst:
New sample input for the new test program, loosely matching
several of the previous test cases.
* check/Makefile.am: New test suite makefile.
* check/check.sh, check/run-test: New wrapper files for the
new test suite.
* check/lightning.c: New file. The main driver of the new test
suite, that compiles to a parser of a very simple assembly like
language, generates jit and executes it.
* check/all.tst: New file. A generic debug and sample test file
with a directive to prevent it from being executed, and useful to
read disassembly of all possible instructions, using a fixed set
of registers.
* include/Makefile.am, include/lightning.h,
include/lightning/Makefile.am, include/lightning/jit_arm.h,
include/lightning/jit_mips.h, include/lightning/jit_ppc.h,
include/lightning/jit_private.h, include/lightning/jit_x86.h,
lib/Makefile.am, lib/jit_disasm.c, lib/jit_print.c,
lib/jit_x86-cpu.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c,
lib/jit_x86.c, lib/lightning.c: New files. These files are
written from scratch, only by <pcpa@gnu.org>, and have now
copyright assignment to the FSF. This is the core of the new
lightning rework. Previously it was integrated in code with
a garbage collector and several custom types like vectors and
hash tables, so this first code merge with lightning converts
that code into a library extracting only the jit bits, and at
first only for x86_64 GNU/Linux.
* lightning.h, m4/lightning.m4: Removed. These are no longer
required in the new lightning code.
.gitignore, Makefile.am, configure.ac: Update for the new
lightning code.