1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-18 18:40:22 +02:00
Commit graph

8 commits

Author SHA1 Message Date
pcpa
ce6ab1f09e Prepare for the first alpha release of lightning 2.0. 2013-06-05 20:18:54 -03:00
pcpa
60c1c545fc Implement the "live" code to explicitly tell a register is live.
*include/lightning.h, lib/lightning.c: Add the new jit_live code
	to explicitly mark a register as live. It is required to avoid
	assuming functions always return a value in the gpr and fpr return
	register, and to avoid the need of some very specialized codes
	that vary too much from backend to backend, to instruct the
	optimization code the return register is live.

	* lib/jit_arm.c, lib/jit_mips.c, lib/jit_ppc.c, lib/jit_print.c,
	lib/jit_x86.c: Update for the new jit_live code.

	* check/ret.ok, check/ret.tst: New files implementing a simple
	test case that would previously fail at least in ix86/x86_64.

	* check/Makefile.am: Update for new "ret" test case.
2013-02-05 14:14:25 -02:00
pcpa
d91b25d1be Implement the qmul and qdiv instructions.
2013-02-04 Paulo Andrade <pcpa@gnu.org>

	* include/lightning.h, include/lightning/jit_private.h,
	lib/jit_arm-cpu.c, lib/jit_arm.c, lib/jit_mips-cpu.c,
	lib/jit_mips.c, lib/jit_ppc-cpu.c, lib/jit_ppc.c,
	lib/jit_x86-cpu.c, lib/jit_x86.c, lib/lightning.c:
	Implement the new qmul and qdiv instructions that return signed
	and unsigned lo/hi multiplication result and div/rem division result.
	These should be useful for jit translation of code that needs to
	know if a multiplication overflows (no branch opcode added) or if
	a division is exact (easy check if remainder is zero).

	* check/lightning.c, lib/jit_print.c, check/Makefile.am,
	check/all.tst: Update for the new qmul and qdiv instructions.

	* check/qalu.inc, check/qalu_div.ok, check/qalu_div.tst,
	check/qalu_mul.ok, check/qalu_mul.tst: New files implementing
	simple test cases for qmul and qdiv.
2013-02-04 18:54:37 -02:00
pcpa
708cca9465 Correct description of the jmpi instruction.
* doc/body.texi: Correct "jmpi" description that incorrectly
	told it was possible to pass any address as jump target. The
	only way to do that is "movi+jmpr".
2013-01-30 18:11:43 -02:00
pcpa
c5421a8c76 Make JIT_RET, JIT_FRET and JIT_SP private.
* check/add.tst, check/allocai.tst, check/bp.tst, check/divi.tst,
	check/fib.tst, check/lightning.c, 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:
	Make JIT_RET, JIT_FRET and JIT_SP private. These should not be
	used in any operations due to frequently having special
	constraints (usually JIT_FRET). JIT_FP must be made available
	because it must be used as the base register to access stack
	space allocated with jit_allocai.
2013-01-17 16:13:29 -02:00
pcpa
537c85be27 Correct wrong and confusing reverse float comparison logic
* lib/lightning.c: Correct both, wrong and confusing logic
	to compute the reverse of a jump. Now it properly matches
	C semantics for "eq" (==) and "ne" (!=) and correct computation
	of reverse of "uneq" as "gt".

	* check/branch.tst: Update "ne" float branch check that
	previously happened to be wrongly tested with a NaN argument.
2012-12-29 18:55:11 -02:00
pcpa
6eab5be9c2 Add new extensive float comparison and conversion test case
* check/float.ok, check/float.tst: New test cases implementing
	extensive validation of float comparison and branch code
	generation as well as integer conversion, involving NaN and
	[+-]Inf.

	* lib/jit_arm-swf.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c:
	Correct bugs found by new float test case.

	* lib/jit_x86.c: Correct cut&paste error added in commit to
	convert jit_arg* return value to a jit_node_t*,	that would
	cause it to not properly handle double arguments in ix86.

	* check/Makefile.am: Update for the new test case.
2012-12-29 14:16:45 -02:00
pcpa
1c9088beca Update code to build and pass test cases in the arm port.
* configure.ac, include/lightning/jit_private.h, lib/jit_arm-cpu.c,
	lib/jit_arm-swf.c, lib/jit_arm.c, check/Makefile.am: Correct
	implementation of the arm backend port to build and pass the
	current test cases. Tested on armv7 with softfp abi.

	* lib/jit_disasm.c: Rename and change prototype of static
	disassemble function as in the arm backend it is required
	to access state information stored in the jit_state_t object.

	* check/3to2.tst, check/add.tst: Correct test case code assuming
	JIT_RO and JIT_RET are the same, and even if they are the same,
	the logic was incorrect because it must always call jit_retval*
	to fetch a function call return before any other instruction.
	The arm backend hash a special condition if jit_retval is not
	called, because "r0" is not JIT_R0, but is JIT_RET and *also*
	the first argument for a called function, so JIT_RET must be
	only used as an argument to jit_retval.

	* TODO: New file listing important tasks to be resolved.
2012-12-03 14:27:27 -02:00