1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-17 19:32:24 +02:00
Commit graph

484 commits

Author SHA1 Message Date
pcpa
3f397228f5 ARM: Correct several inconsistencies with ldrd and strd
* lib/jit_disasm.c: Change thumb or arm disassemble based on
	jit code before disassembly.

	* lib/jit_arm-cpu.c: Correct reversed arguments to LDRD and
	STRD instructions, and correct checking for support of those.

	* lib/jit_arm-swf.c: Correct wrong use of LDRD and STRD and
	only use those if the register is even.

	* check/check.arm.swf.sh, check/check.arm4.swf.sh: New files
	to test LDRD and STRD, as well as the alternate code path
	when those are not available, in the .arm4. test case.

	* check/Makefile.am: Update for the new test cases.
2014-11-20 15:05:13 -02:00
pcpa
7b449aa063 Implement jit_flush
* include/lightning/jit_private.h, lib/jit_aarch64.c,
	lib/jit_alpha.c, lib/jit_arm.c, lib/jit_hppa.c,
	lib/jit_ia64.c, lib/jit_mips.c, lib/jit_ppc.c,
	lib/jit_s390x.c, lib/jit_sparc.c, lib/jit_x86.c:
	Implement a private jit_flush call, that flushes
	the cache, if applicable, aligning down to the
	previous and up to the next page boundary.
2014-11-08 19:34:23 -02:00
pcpa
95f4ee4737 Add test case to check possible issues with 2 contexts
* check/ctramp.c: New file. It just repeats the test
	of tramp.tst, but using two jit_state_t, what should
	test possible issues with two contexts, and also validate
	jit_tramp works on backends with function descriptions.

	* check/Makefile.am: Update for new test case.
2014-11-08 14:13:10 -02:00
pcpa
ade23376f9 mips: Do not make t9 available as a generic register
* include/lightning/jit_mips.h: Do not make the t9 register
	JIT_R11 (or JIT_R7 for n32 or n64 abi) available. Previously
	it cause problems if one expects it to not be changed in a
	function call. For example, calling a jit function, where it
	really does not need to be changed.
2014-11-03 12:55:35 -02:00
pcpa
85ab988cd1 Resync with new patch to make functions receive a const argument 2014-11-01 22:32:23 -02:00
Holger Hans Peter Freyther
e98640e1ac cross: Provide the action for the cross compiling case
Assume that the functionality is not present
2014-11-01 22:20:56 -02:00
pcpa
dea1775f62 Update THANKS file 2014-11-01 19:08:23 -02:00
pcpa
81b1a90777 Force creation of the m4 directory on a clean checkout 2014-11-01 19:05:46 -02:00
pcpa
59eb1a16e2 Actually install the pkgconfig file. 2014-11-01 19:05:28 -02:00
Holger Hans Peter Freyther
3008f04b4c misc: Create a pkg-config file
Make it more easy to find GNU lightning. Create and install
a pkg-config file.
2014-11-01 18:52:33 -02:00
Holger Hans Peter Freyther
073396bb70 misc: Enable silent rules to make warnings stick out 2014-11-01 18:52:31 -02:00
Holger Hans Peter Freyther
2229200c44 misc: Make jit_note and related functions take a const argument
Make jit_memcpy, jit_memmove, jit_data take const pointers to
allow jit_note to be used with a const string (e.g. a string
literal, __FILE__ or __func__). This is needed for GNU Smalltalk
to silence compiler warnings.

Sadly "const jit_pointer_t" is not the same as "typedef const void *"
so I introduced a new typedef for a const jit pointer. The other
option would be to replace jit_pointer_t with void*.
2014-11-01 18:52:27 -02:00
pcpa
44519452d9 Add assertion to check for register allocation leaks
* lib/jit_aarch64.c, lib/jit_alpha.c, lib/jit_arm.c,
	lib/jit_hppa.c, lib/jit_ia64.c, lib/jit_mips.c, lib/jit_ppc.c,
	lib/jit_s390x.c, lib/jit_sparc.c, lib/jit_x86.c: Add an
	assertion to all code generation "drivers" to ensure
	_jitc->regarg is empty or in an expected state, after
	translation of a lightning instruction to native code.
	This change was a brute force test to find out other cases
	of a temporary not being release (like was happening with
	_bmsi and _bmci on x86), but no other case was found,
	after running make check, with assertions enabled, on all
	backends.
2014-10-26 18:25:41 -02:00
pcpa
ddd7a7550b x86: Correct not released temporary register
* lib/jit_x86-cpu.c: Correct a register allocation leak in
	_bmsi and _bmci.
2014-10-26 15:23:29 -02:00
pcpa
9cdcfcc38f Do not fail gratuitously in jit_init_debug
* lib/jit_disasm.c: Do not cause an fatal error if init_jit
	fails in the jit_init_debug call.
2014-10-25 14:53:05 -02:00
pcpa
0c6f675c8a Properly handle jit_tramp and function descriptors
* lib/jit_ia64.c, lib/jit_ppc.c: Correct handling of function
	descriptor when first prolog is a jit_tramp prolog. The
	test case was using the same jit_context_t, so was not
	triggering this condition.

	* lib/jit_ppc-cpu.c: Properly handle jump displacements that
	do not fit on 24 powerpc. This required changing from previous
	"mtlr reg, blr" to "mtctr reg, bctr" to properly handle
	the logic to "hide" function descriptors, but that would
	also be required as the proper jit_jmpr when/if implementing
	optimizations to leaf functions (was working with blr because
	it is saved/reloaded in prolog/epilog).
2014-10-24 14:31:41 -02:00
pcpa
9c5e2b511e Add label predicates
* include/lightning.h, lib/lightning.c: Add three predicates
	to query information about labels. jit_forward_p(label)
	will return non zero if the label is "forward", that is
	need a call to jit_link(label), jit_indirect_p(label)
	that returns non zero if the label was created with the
	jit_indirect() call, and jit_target_p(label) that will
	return non zero if there is at least one jump patched
	to land at that label.
2014-10-21 15:32:24 -02:00
pcpa
a43fb63055 Add the new "range" test.
* check/range.ok, check/range.tst: New test case designed
	to catch incorrect code generation, usually due to incorrect
	test of immediate size. The test checks a large amount of
	encodings in "power of two" boundaries. This test exorcises
	a significant amount of code paths that was previously not
	tested.

	* check/Makefile.am: Add range test to make check target.

	* lib/jit_aarch64-cpu.c: Correct wrong address calculation
	for stxi_c, stxi_s, stxi_i and stxi_l when the offset is
	too large.

        * lib/jit_mips-fpu.c: Correct wrong size test to check if
	an immediate can be encoded in a float or double store.

	* lib/jit_s390x-cpu.c: Correct inverted encoding to stxi_s
	when the offset cannot be encoded, and fallbacks to an
	alternate encoding in 2 instructions.
2014-10-18 15:12:07 -03:00
pcpa
960280decd Implement the jit_rsb* interface.
* check/alu_rsb.ok, check/alu_rsb.tst: New files implementing
	tests for jit_rsb*.

	* check/Makefile.am, check/lightning.c, include/lightning.h,
	lib/jit_aarch64-cpu.c, lib/jit_aarch64-fpu.c, lib/jit_aarch64-sz.c,
	lib/jit_aarch64.c, lib/jit_alpha-cpu.c, lib/jit_alpha-fpu.c,
	lib/jit_alpha-sz.c, lib/jit_alpha.c, lib/jit_arm-cpu.c,
	lib/jit_arm-swf.c, lib/jit_arm-sz.c, lib/jit_arm-vfp.c,
	lib/jit_arm.c, lib/jit_hppa-cpu.c, lib/jit_hppa-fpu.c,
	lib/jit_hppa-sz.c, lib/jit_hppa.c, lib/jit_ia64-cpu.c,
	lib/jit_ia64-fpu.c, lib/jit_ia64-sz.c, lib/jit_ia64.c,
	lib/jit_mips-cpu.c, lib/jit_mips-fpu.c, lib/jit_mips-sz.c,
	lib/jit_mips.c, lib/jit_names.c, lib/jit_ppc-cpu.c,
	lib/jit_ppc-fpu.c, lib/jit_ppc-sz.c, lib/jit_ppc.c,
	lib/jit_s390x-cpu.c, lib/jit_s390x-fpu.c, lib/jit_s390x-sz.c,
	lib/jit_s390x.c, lib/jit_sparc-cpu.c, lib/jit_sparc-fpu.c,
	lib/jit_sparc-sz.c, lib/jit_sparc.c, lib/jit_x86-cpu.c,
	lib/jit_x86-sse.c, lib/jit_x86-sz.c, lib/jit_x86-x87.c,
	lib/jit_x86.c, lib/lightning.c: Implement jit_rsb*. This
	was a missing lightning 1.x interface, that on most
	backends is synthesized, but on a few backends (hppa and ia64),
	it can generate better code as on those there is, or the
	only instruction with an immediate is in "rsb" format
	(left operand).
2014-10-18 11:31:18 -03:00
pcpa
624cf33d08 Add string representation of IR codes to -sz.c files
* lib/jit_names.c: New file with single definition of string
	representation of lightning IR codes.

	* size.c: Modified to append the code name in a C comment
	after the maximum instruction size.

	* lib/jit_print.c: Minor change to not duplicate jit_names.c
	contents.

	* lib/jit_aarch64-sz.c, lib/jit_alpha-sz.c, lib/jit_arm-sz.c,
	lib/jit_hppa-sz.c, lib/jit_ia64-sz.c, lib/jit_mips-sz.c,
	lib/jit_ppc-sz.c, lib/jit_s390x-sz.c, lib/jit_sparc-sz.c,
	lib/jit_x86-sz.c: Rewritten to add string representation of
	IR codes in a C comment.
2014-10-17 13:48:56 -03:00
pcpa
5c0c5bde6d Add back files missed when reapplying patches 2014-10-15 13:09:14 -03:00
pcpa
afae5407f6 Implement the jit_align interface
* lib/jit_aarch64-cpu.c, lib/jit_alpha-cpu.c, lib/jit_arm-cpu.c,
	lib/jit_hppa-cpu.c, lib/jit_mips-cpu.c, lib/jit_ppc-cpu.c,
	lib/jit_sparc-cpu.c: Implement or correct the internal
	nop(count) call that receives an argument that tells the
	modulo bytes to align the code for the next instruction.

	* include/lightning.h, lib/lightning.c, lib/jit_aarch64.c,
	lib/jit_alpha.c, lib/jit_arm.c, lib/jit_hppa.c, lib/jit_ia64.c,
	lib/jit_mips.c, lib/jit_ppc.c, lib/jit_s390x.c, lib/jit_sparc.c,
	lib/jit_x86.c: Implement the new jit_align() call that receive
	an argument, that tells the modulo, in bytes, to align the
	next instruction. In most backends the only value that makes
	a difference is a value that matches sizeof(void*), as all
	other values usually are already automatically aligned in
	labels, but not guaranteed to be aligned at word size bytes.

	* check/align.ok, check/align.tst: New files, implementing
	a simple test for the new jit_align() interface.

	* check/Makefile.am, check/lightning.c, lib/jit_aarch64-sz.c,
	lib/jit_alpha-sz.c, lib/jit_arm-sz.c, lib/jit_hppa-sz.c,
	lib/jit_ia64-sz.c, lib/jit_mips-sz.c, lib/jit_ppc-sz.c,
	lib/jit_print.c, lib/jit_s390x-sz.c, lib/jit_sparc-sz.c,
	lib/jit_x86-sz.c: Update for the new jit_code_align code and
	the jit_align() interface.
2014-10-14 17:05:25 -03:00
pcpa
dbb1bb2409 Use jit_code_last_code as symbolic name of last enum
* include/lightning.h, lib/jit_size.c, size.c: Use a
	symbolic value for the last IR code.
2014-10-14 17:05:02 -03:00
pcpa
839341a498 Implement jit_frame and jit_tramp interfaces
* include/lightning.h, include/lightning/jit_private.h,
	lib/jit_aarch64-cpu.c, lib/jit_alpha-cpu.c, lib/jit_arm-cpu.c,
	lib/jit_hppa-cpu.c, lib/jit_ia64-cpu.c, lib/jit_mips-cpu.c,
	lib/jit_ppc-cpu.c, lib/jit_s390x-cpu.c, lib/jit_sparc-cpu.c,
	lib/jit_x86-cpu.c, lib/lightning.c: Implement the new
	jit_frame and jit_tramp interfaces, that allow writing
	trampoline like calls, where a single dispatcher jit buffer
	is written, and later other jit buffers are created, with
	the same stack frame layout as the dispatcher. This is the
	logic that GNU Smalltalk used in lightning 1.x, and is required
	to make a sane port for lighting 2.x.

	* jit_ia64-cpu.c: Implement support for jit_frame and jit_tramp,
	and also correct wrong encoding for B4 instructions, that
	implement jmpr, as well as correct reverse logic in _jmpr,
	that was moving the branch register to the jump register,
	and not vice-versa.
	Also, if a stack frame is to be assumed, always assume it may
	call a function with up to 8 arguments, regardless of the
	hint frame argument.

	* lib/jit_arm.c: Add a new must_align_p() interface to ensure
	function prologs are always aligned. This condition was
	previously always true, somewhat by accident, but with
	jit_tramp it is not guaranteed.

	* jit_ia64-cpu.c: lib/jit_ppc.c: Add minor special handling
	required to implement jit_tramp, where a function descriptor
	should not be added before a prolog, as jit_tramp means omit
	prolog.

	* check/lightning.c: Update test driver for the new interfaces.

	* check/Makefile.am, check/tramp.tst, check/tramp.ok: Add
	a simple test and example of the jit_frame and jit_tramp
	usage implementing a simple Fibonacci function using a
	simulation of an interpreter stack and how it would handle
	state in language specific variables.

	* doc/body.texi: Add documentation for jit_frame and
	jit_tramp.
2014-10-14 17:04:40 -03:00
pcpa
20a2f1f9c5 Allow jit_jmpi on an immediate constant address.
* lib/jit_aarch64.c, lib/jit_alpha.c, lib/jit_arm.c,
	lib/jit_hppa.c, lib/jit_ia64.c, lib/jit_mips.c,
	lib/jit_ppc.c, lib/jit_s390x.c, lib/jit_sparc.c,
	lib/jit_x86.c, lib/lightning.c: Allow jit_jmpi on a
	target that is not a node. This may lead to hard to
	debug code generation, but is a required feature for
	certain generators, like the ones that used lightning
	1.2x. Note that previously, but not really well
	documented, it was instructed to use:
	jit_movi(rn, addr); jit_jmpr(rn);
	but now, plain:
	jit_patch_abs(jit_jmpi(), addr);
	should also work.
2014-10-14 17:04:13 -03:00
pcpa
1d75fe625a Do not fail if NULL is passed to init_jit.
This should just tell to disable the disassembler.
2014-10-14 17:03:51 -03:00
Paulo Andrade
52448473be x86: Update instruction size information for Windows x64
* lib/jit_x86-sz.c: Generate information about instruction
	lengths for more precise calculation of buffer size on
	Windows x64. This change is specially important because
	the maximum instruction length is larger than other
	systems, what could cause an out of bounds write on
	special conditions without this update.
2014-09-24 14:56:20 -03:00
Paulo Andrade
4d0e4b32a1 x86: Build and pass all tests on 32 bit cygwin
* check/lightning.c: Add workaround to conflicting global
	optind variable in cygwin binutils that have an internal
	getopt* implementation.

	* lib/jit_x86-cpu.c: Add a simple define ffsl ffs if building
	for 32 bit and there is no ffsl function.
2014-09-24 14:32:49 -03:00
Paulo Andrade
f469a5c87b x86: Build and pass all tests under cygwin64 (Windows x64)
* check/lightning.c: Add a hopefully temporary kludge to not use
	sprintf and sscanf returned by dlsym. This is required to pass
	the varargs test.

        * include/lightning/jit_private.h: Use symbolic name for first
	integer register argument, as this is different in sysv and
	win64 abi.

        * include/lightning/jit_x86.h: Add conditionals and definitions
	for Windows x64 (under __CYGWIN__ preprocessor conditional).

        * lib/jit_x86-cpu.c: Correct one instruction encoding bug, that
	was working by accident. Only use rax to rdx for some byte
	operations to work on compatibility mode (that is, to generate
	the proper encoding, instead of actually generating encoding
	for high byte registers, e.g. %bh).
	Add proper prolog and epilog for windows x64.

        * lib/jit_x86-sse.c: Correct a swapped rex prefix for float
	operations.

        * lib/jit_x86.c: Adjust to support Windows x64 abi.

	* check/check.x87.nodata.sh: New file, previously used but that
	was missing git.
2014-09-24 11:03:20 -03:00
pcpa
c8bb0dad56 Consider all callee_save_p regs as live on non trackable jumps 2014-09-07 15:32:32 -03:00
pcpa
120dfc956d Correct typo in documentation.
Thanks to Yaroslav Tsarko for noticing the problem.
2014-09-04 11:33:52 -03:00
pcpa
45c4df506c Only mark callee save regs as live on jumps that cannot be tracked.
* lib/lightning.c: Do not mark all registers in unknown state
	as live on jit_jmpr, or jit_jmpi to an absolute address. Instead,
	treat it as a function call, and only consider JIT_Vn registers
	as possibly live.
2014-09-01 16:27:19 -03:00
pcpa
4f8d85b90d Add info menu entry for lightning
* doc/body.texi: Add a proper info menu entry for
	GNU lightning.

	* doc/version.texi: Regenerate.
2014-08-29 11:23:22 -03:00
pcpa
90a70f91e0 GNU lightning 2.0.5 release 2014-08-16 20:33:38 -03:00
pcpa
b58960638d Add consistency check on temporaries during a jump
* lib/jit_aarch64-cpu.c, lib/jit_aarch64-fpu.c,
	lib/jit_arm-cpu.c, lib/jit_arm-vfp.c,
	lib/jit_hppa-cpu.c, lib/jit_hppa-fpu.c,
	lib/jit_ia64-cpu.c, lib/jit_ia64-fpu.c,
	lib/jit_mips-cpu.c, lib/jit_mips-fpu.c,
	lib/jit_ppc-cpu.c, lib/jit_ppc-fpu.c,
	lib/jit_s390x-cpu.c, lib/jit_s390x-fpu.c,
	lib/jit_s390x.c, lib/jit_sparc-cpu.c,
	lib/jit_x86-cpu.c, lib/jit_x86-sse.c,
	lib/jit_x86-x87.c: Review generation of all branch
	instructions and always adds the jit_class_nospill
	bitfield for temporary registers that cannot be	spilled
	because the reload would be after a conditional jump; the
	patch only adds an extra assertion. These conditions do
	not happen on documented lightning usage, but can happen
	if one uses the not exported jit_get_reg and jit_unget_reg
	calls and cause enough register starvation.
2014-08-16 20:31:55 -03:00
pcpa
93e3ff38e1 ALPHA: Correct class of argument float registers
* lib/jit_alpha.c: Correct wrong bitmask of most argument
	float register arguments, that were being set as callee
	save instead of argument registers class.
2014-08-16 20:19:02 -03:00
pcpa
a597e3575d ARM: Correct wrong table of instruction sizes in software float
* lib/jit_arm-sz.c: Regenerate table of known maximum
	instruction sizes for the software float fallback,
	that implements "virtual" float registers in the stack
	and operations as calls to libgcc.

	* size.c: Correct typo in the generated jit_arm-sz.c file.
2014-08-16 20:08:07 -03:00
pcpa
73c2fc830e Do not filter -sz.c files in gitignore 2014-08-10 11:49:31 -03:00
pcpa
05b88d9d45 ALPHA: Implement lightning Alpha port.
* include/lightning/jit_alpha.h, lib/jit_alpha-cpu.c,
        lib/jit_alpha-fpu.c, lib/jit_alpha-sz.c, lib/jit_alpha.c:
	New files implementing a lightning Alpha port. Thanks
	to Trent Nelson and snakebit.net staff for providing access
	to an Alpha system.

        * check/float.tst, check/lightning.c, configure.ac,
        include/lightning.h, include/lightning/Makefile.am,
        include/lightning/jit_private.h, lib/Makefile.am,
        lib/jit_disasm.c, lib/jit_size.c, lib/lightning.c:
	Minor changes to adapt for the new Alpha port.
2014-08-10 11:48:35 -03:00
pcpa
53dd28d682 Always mark return registers as live in epilog
* lib/lightning.c: Always mark JIT_RET and JIT_FRET as
	live in a function epilog. This is required because
	on some ports a complex sequence, allocating one or more
	registers, may be required to jump from a ret* to the
	epilog, and the lightning api does not have annotations
	to know if a function returns a value, or the type of
	the return value.
2014-08-10 11:39:53 -03:00
pcpa
f79f9777b1 Correct change of possibly wrong bitmask in jit_update
* lib/lightning.c: Change the correct live bitmask of
	return registers after a function call in jit_update.
2014-08-10 11:36:08 -03:00
pcpa
dbf2847e47 Do not have assertions with a long type test
* lib/lightning.c: Change assertions to have an int
	result and correct a bad bit mask assertion.
2014-08-10 11:33:00 -03:00
pcpa
b23322100c AARCH64: Correct assertion test
* lib/jit_aarch64.c: Correct bad setup for assertion
	of consistency before a patch.
2014-08-10 11:26:18 -03:00
pcpa
cf2be67c5a MIPS: Correct use of wrong test register
* lib/jit_mips-cpu.c: Correct typo in the jit_bmsr
	implementation that was using the wrong test result
	register.
2014-08-10 11:21:57 -03:00
pcpa
0d9ac79a12 Do not pass null for free, memcpy and memmove
* lib/jit_memory.c: Do not call free on NULL pointers.

	* include/lightning/jit_private.h, lib/jit_note.c,
	lib/lightning.c: Add a wrapper to memcpy and memmove
	to not actually call those functions with a zero size
	argument, and likely also a null src or dst.
2014-07-29 10:29:49 -03:00
pcpa
a8c180a926 Remove the global but not advertised jit_progname variable
* include/lightning/jit_private.h, lib/jit_disasm.c,
	lib/lightning.c: Remove the global jit_progname variable.
	It was being only used in jit_init_debug, that is called
	from init_jit, so, just pass an argument.
2014-07-27 16:48:52 -03:00
pcpa
0d96d24073 Add note about jit_set_memory_functions call.
* doc/body.texi: Add note that jit_set_memory_functions
	should be called before init_jit, because init_jit
	itself may call the memory wrappers.
2014-07-27 16:45:03 -03:00
pcpa
354146b4ca ARM: Do not leave early init_jit if /proc is not mounted.
* lib/jit_arm.c: Do not get confused with default settings
	if /proc is not mounted on Linux specific code path.
2014-04-22 14:39:10 -03:00
pcpa
abf1b6e678 Do not export private definitions and types.
* include/lightning/jit_aarch64.h, include/lightning/jit_arm.h,
	include/lightning/jit_hppa.h, include/lightning/jit_ia64.h,
	include/lightning/jit_mips.h, include/lightning/jit_ppc.h,
	include/lightning/jit_private.h, include/lightning/jit_s390x.h,
	include/lightning/jit_sparc.h, include/lightning/jit_x86.h:
	Do not add jit_regset_t, JIT_RA0, and JIT_FA0 to the installed
	header file. These types and definitions are supposed to be
	only used internally.
2014-04-09 14:46:30 -03:00
pcpa
0fac1b11ea GNU lightning 2.0.4 release 2014-04-05 19:38:25 -03:00