Alien-LibJIT

 view release on metacpan or  search on metacpan

libjit/ChangeLog  view on Meta::CPAN

	option.
	* jit/jit-internal.h (struct _jit_builder): add position_independent
	field.
	* jit/jit-function.c (_jit_function_ensure_builder): initialize
	position_independent field.

	* jit/jit-rules-x86.c (throw_builtin):
	* jit/jit-rules-x86.ins (JIT_OP_ADDRESS_OF_LABEL, JIT_OP_JUMP_TABLE)
	(JIT_OP_THROW, JIT_OP_LOAD_PC): add position_independent check and
	stub missing cases.

2006-11-26  Kirill Kononenko  <Kirill.Kononenko@gmail.com>

	* jit/jit-rules-x86.ins: if JIT_USE_SIGNALS is defined do not emit
	explicit division by zero check (patch #5278).

2006-11-26  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-reg-alloc.c (choose_output_register): fix global register
	use cost computation.

	* jit/jit-rules-x86.ins: mark as commutative JIT_OP_IADD,
	JIT_OP_IMUL, JIT_OP_LADD, JIT_OP_IAND, JIT_OP_IOR, JIT_OP_IXOR,
	JIT_OP_LAND, JIT_OP_LOR, JIT_OP_XOR rules.

2006-11-25  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-reg-alloc.c (exch_stack_top, free_value): fix freeing
	stack registers.

2006-11-25  Kirill Kononenko  <Kirill.Kononenko@gmail.com>

	* jit/jit-rules-x86.ins: add JIT_OP_ISIGN and JIT_OP_LSIGN rules
	(patch #5533), optimize JIT_OP_LNEG rule (patch #5555). [with
	some modifications by Aleksey Demakov.]

2006-11-11  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-rules-x86.ins: add JIT_OP_IABS and JIT_OP_LABS rules.

2006-11-04  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-rules-x86.ins: make comparison opcodes use three-address
	patterns.

2006-11-01  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-reg-alloc.c (commit_input_value, commit_output_value):
	do not increment/decrement the top of the register stack in case of
	fp-value coalescing.

2006-10-23  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-rules-x86.ins: JIT_OP_EXPAND_INT and JIT_OP_EXPAND_UINT
	rules were broken for local byte or short values. Fixed by removing
	the local pattern altogether as the reg pattern produces the same
	code but without the bug.

2006-10-18  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-reg-alloc.c (clobbers_register, bind_value): enable
	coalescing of the destination value of a copy operation with the
	source value in a single register.

	* jit/jit-rules-x86.ins: tag COPY rules with the "copy" keyword
	and change patterns of TRUNC rules to have a separate destination
	register.

2006-10-16  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-interp.h, jit/jit-interp.c (_jit_run_function): 
	* jit/jit-opcode.c, jit/jit-rules-interp.c (_jit_gen_insn): Repair
	struct handling broken since the last interpreter reorganization,
	remove unused interpreter opcodes.

	* jit/jit-rules-interp.c (_jit_gen_start_block): check if the fixup
	position is before the cache end. This prevents segmentation fault
	when the end of cache block is reached and jit_function_compile()
	attempts to generate more code (it checks for the cache end way too
	late).

2006-10-14  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-rules-interp.c (_jit_create_call_return_insns): fix return
	code in case of no return value or struct returned via pointer (this
	is just like 2006-02-20 fix for x86).

	* jit/jit-cfg.c (create_value_entry): an uninitialized value was
	used (thanks Klaus for spotting).

2006-10-02  Klaus Treichel  <ktreichel@web.de>

	* jit/jit-intrinsic.c: Fix a copy bug in jit_ulong_mul (replace - by *).

2006-09-25  Aleksey Demakov  <ademakov@gmail.com>

	* include/jit/jit-arch-x86.h, include/jit/jit-arch-generic.h: add
	headers for architecture-specific definitions.
	(_JIT_ARCH_GET_CURRENT_FRAME): add macro to find the stack frame
	pointer.

	* include/jit/Makefile.am: create jit-arch.h as a symlink to one of
	the jit-arch-*.h files depending on the JIT_ARCH value.
	* configure.in: set JIT_ARCH according to the system architecture.

	* include/jit/jit-walk.h (jit_get_current_frame):
	* jit/jit-walk.c (jit_get_starting_frame):
	* tools/gen-apply.c (find_return_offset, detect_frame_offsets): use
	_JIT_ARCH_GET_CURRENT_FRAME macro if available. This resolves the
	problem	with gcc 4.1.* where __builtin_frame_address() function is
	broken (thanks Klaus for identifing the problem).

2006-09-15  Radek Polak <psonek2@seznam.cz>

        * include/jit/jit-insn.h, jit/jit-insn.c, jit/jit-debugger.c: new
        instruction jit_insn_mark_breakpoint_variable.

2006-09-14  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-reg-alloc.h, jit/jit-reg-alloc.c: remove "old" register
	allocation code.

libjit/ChangeLog  view on Meta::CPAN

	for consistency.

2006-06-27  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-insn.c (accumulate_relative_offset): add function that
	accumulates JIT_OP_ADD_RELATIVE offsets.
	(jit_insn_store_relative, jit_insn_load_relative)
	(jit_insn_add_relative): use accumulate_relative_offset() instead
	of previous_relative() to find the offset from the original address
	and do not replace the accumulated instructions with JIT_OP_NOP as
	it was before. The old approach is problematic because it is unknown
	at this point if the values we accumulated are dead or they will be
	used by instructions added later. The dead code elimination pass
	removes unused values just as well but with enough knowledge to	be
	safe. The new code also does not move JIT_OP_ADDRESS_OF towards	the
	relative instructions that uses the address. Supposedly such move
	may be used by the code generator as a hint. However currently the
	code generator does not use such a hint. The old code is kept for
	reference #ifdefed out.

2006-06-17  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-reg-alloc.h, jit/jit-reg-alloc.c: implement support of the
	JIT_REGS_FREE_DEST flag for 3-argument instructions. Tweak reg alloc
	API.

	* tools/gen-rules-parser.y: adjust for reg alloc API changes. Use
	'$0' pattern element to refer to destination register in 3-argument
	instructions.

	* jit/jit-rules-x86.ins: rewrite JIT_OP_IDIV, JIT_OP_IDIV_UN,
	JIT_OP_IREM, JIT_OP_IREM_UN, JIT_OP_ADDRESS_OF_LABEL,
	JIT_OP_LOAD_RELATIVE_FLOAT32, JIT_OP_LOAD_RELATIVE_FLOAT32,
	JIT_OP_LOAD_RELATIVE_NFLOAT, JIT_OP_LOAD_ELEMENT_FLOAT32,
	JIT_OP_LOAD_ELEMENT_FLOAT64, JIT_OP_LOAD_ELEMENT_NFLOAT rules.

2006-06-16  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-rules-x86.sel, jit/jit-rules-x86.ins: fix JIT_OP_IDIV	and
	JIT_OP_IREM rules for the divisor value of -1.

2006-06-09  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-rules-x86.ins: rewrite JIT_OP_STORE_RELATIVE_BYTE,
	JIT_OP_STORE_RELATIVE_SHORT, JIT_OP_STORE_RELATIVE_LONG,
	JIT_OP_STORE_RELATIVE_FLOAT32, JIT_OP_STORE_RELATIVE_FLOAT64,
	JIT_OP_STORE_RELATIVE_NFLOAT, JIT_OP_STORE_ELEMENT_LONG,
	JIT_OP_STORE_ELEMENT_NFLOAT rules to use regular pattern
	syntax instead of manual.

2006-06-03  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-rules-x86.ins: remove _jit_regs_free_reg() call from
	JIT_OP_RETURN_FLOAT32, JIT_OP_PUSH_FLOAT32, JIT_OP_RETURN_FLOAT64,
	JIT_OP_RETURN_NFLOAT, JIT_OP_PUSH_FLOAT64, and JIT_OP_PUSH_NFLOAT
	rules. With new ``gen-rules'' tool it frees wrong register and
	the right register is anyway freed automatically by the new
	allocator.

	* jit/jit-reg-alloc.h, jit/jit-reg-alloc.c (_jit_regs_abort): add
	function to unbind values from registers if the code generation
	failed. This is required because new allocator may temporary bind
	constants to registers and if neither _jit_regs_commit() nor
	_jit_regs_abort() is called the constant value will be left in
	inconsistent state. The problem shows up when the end of a cache
	block has been reached and the compilation is restarted with a new
	block.

	* jit/jit-reg-alloc.c (_jit_regs_begin, _jit_regs_end):	add
	convenience functions.

	* tools/gen-rules-parser.y (gensel_output_clauses): make generated
	code more readable by using _jit_regs_begin() and _jit_regs_end()
	where appropriate.

	* jit/jit-reg-alloc.c: allow to load the second part of a register
	pair to a global register. This is because x86 long arithmetics
	use 4 registers at once: EAX:EDX and ECX:EBX. At the same time
	EBX is the global register candidate. If the instruction clobbers
	the global register, the new allocator automatically pushes it on
	the stack before and pops after the instruction.

	* jit/jit-function.c (compile_block): modify trace messages.

2006-05-28  Klaus Treichel  <ktreichel@web.de>

	* jit/jit-insn.c: Add a code_label in initialize_setjmp_block just
	before the end_label that is moved with the block to the start of
	the function as jump target to the code. Otherwise other blocks
	moved to the start after this block will never be executed.

2006-05-27  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-reg-alloc.c (free_value, save_value): the value that has
	a global register and is also associated with a local register
	needs to be unbound from the local one.

	* jit/jit-reg-alloc.c (compute_spill_cost): assume that the spill
	cost for clean values is not zero. This keeps them in registers
	as long as there are free registers and thus reduces the number of
	loads.
	
2006-05-25  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-reg-alloc.c (use_cheapest_register): fix cost calculation
	again for 'spill_before' rules. The last patch did not work for
	values stored in global registers. Now both global and non-global
	values should be copied to EAX.

2006-05-25  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-reg-alloc.c (use_cheapest_register): fix cost calculation
	that sometimes caused overlooking free registers. This was a serious
	problem as there are some 'spill_before' rules that assume that the
	allocator will always choose EAX as the first free register.

2006-05-21  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-reg-alloc.h: add _JIT_REGS_FREE_DEST flag to be used in
	cases when the destination register is independent of any input
	register.
	* tools/gen-rules-parser.y: allow specification	of independent

libjit/ChangeLog  view on Meta::CPAN

	jit/jit-interp.cpp, jit/jit-interp.h, jit/jit-opcode.c,
	jit/jit-rules-arm.c, jit/jit-rules-interp.c, jit/jit-rules-x86.c,
	jit/jit-rules.h, jitplus/jit-plus-function.cpp: put some
	infrastructure in place to support "try"-related instructions.

	* dpas/dpas-parser.y, dpas/dpas-scope.h, dpas/dpas-semantics.h:
	introduce effective address based l-values into dpas.

2004-04-27  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-dump.c, jit/jit-reg-alloc.c: fix a register stack bug
	in "_jit_regs_set_value"; add some more debug code.

	* include/jit/jit-opcode.h, jit/jit-insn.c, jit/jit-internal.h,
	jit/jit-interp.cpp, jit/jit-opcode.c: wrap function calls
	with code to set up and remove exception frame information.

	* jit/jit-function.c, jit/jit-insn.c, jit/jit-internal.h:
	intuit "nothrow" and "noreturn" flags for compiled functions.

	* include/jit/jit-insn.h, include/jit/jit-plus.h, jit/jit-insn.c,
	jitplus/jit-plus-function.cpp: add "jit_insn_throw",
	"jit_insn_rethrow", and "jit_insn_get_call_stack" to assist
	with throwing exceptions.

	* include/jit/jit-insn.h, jit/jit-block.c, jit/jit-insn.c,
	jit/jit-internal.h: add some instructions for managing "try" blocks.

	* include/jit/jit-opcode.h, jit/jit-block.c, jit/jit-insn.c,
	jit/jit-internal.h, jit/jit-opcode.c: more work on "try" blocks.

2004-04-26  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-reg-alloc.c, jit/jit-reg-alloc.h: add functions to
	assist with register allocation on stack-based architectures.

	* jit/jit-rules-interp.c: implement "_jit_gen_load_value" for
	the interpreter backend.

	* jit/jit-interp.cpp, jit/jit-interp.h: fix some opcode names that
	should be prefixed with "JIT_OP".

	* jit/jit-function.c, jit/jit-internal.h, jit/jit-reg-alloc.c,
	jit/jit-reg-alloc.h, jit/jit-rules-arm.c, jit/jit-rules-interp.c,
	jit/jit-rules-interp.h, jit/jit-rules-x86.c, jit/jit-rules.h:
	interpreter back end code generation for binary, unary, and
	branch opcodes.

	* doc/libjit.texi, jit/jit-rules-interp.c: fix the Texinfo section
	markers in the "Porting" chapter.

	* jit/jit-rules-interp.c: code generation for interpreter return's.

	* include/jit/jit-except.h, include/jit/jit-function.h,
	include/jit/jit-plus.h, jit/jit-except.cpp, jit/jit-function.c,
	jit/jit-interp.cpp, jit/jit-interp.h, jit/jit-rules-interp.c,
	jitplus/jit-plus-function.cpp: implement "jit_function_apply"
	and "jit_function_apply_vararg" for the interpreter back end.

	* jitplus/jit-plus-function.cpp: initialization errors in
	the C++ binding.

	* jit/jit-function.c, jit/jit-insn.c, jit/jit-interp.cpp,
	jit/jit-rules-interp.c: work on code generation for function calls.

	* doc/libjit.texi, include/jit/jit-insn.h, include/jit/jit-plus.h,
	jit/jit-insn.c, jitplus/jit-plus-function.cpp, tutorial/t2.c:
	add a "flags" parmeter to "jit_insn_call" and friends, so that
	"nothrow", "noreturn", and "tail" options can be supplied.

	* jit/jit-dump.c, jit/jit-interp.cpp, jit/jit-interp.h,
	jit/jit-opcode.c, jit/jit-rules-interp.c: dump the translated
	native code from "jit_dump_function" are compilation.

	* jit/jit-interp.cpp, jit/jit-rules-interp.c: argument variable
	offsets should in item units, not byte units.

	* jit/jit-insn.c, jit/jit-reg-alloc.c, jit/jit-reg-alloc.h,
	jit/jit-rules-interp.c: improve register allocation in stacks.

2004-04-25  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-apply-func.h, jit/jit-apply-x86.c, jit/jit-apply-x86.h,
	jit/jit-cache.c: use CPU-specifc padding for aligning code
	areas with NOP's, for greater runtime efficiency.

	* include/jit/jit-elf.h, jit/Makefile.am, jit/jit-elf-write.c:
	add the skeleton of the ELF writing routines.

	* jit/jit-interp.cpp: modify VM_BR_TARGET so that it is PIC-friendly.

2004-04-24  Rhys Weatherley  <rweather@southern-storm.com.au>

	* */*: Initial public release.  Most of the skeleton code is in place.



( run in 0.966 second using v1.01-cache-2.11-cpan-2398b32b56e )