
2006-01-15  Rhys Weatherley  <rweather@southern-storm.com.au>

	* configure.in, NEWS: update version for the "0.0.6" release.

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

	* tools/gen-sel-parser.y: spilling a register which is the first
	part of a register pair spill the other part too.

	* jit/jit-reg-alloc.c (free_register_for_value):
	* jit/jit-rules-x86.sel: if a register is the second part of a
	register pair do not consider it free.

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

	* jit/jit-insn.c: fix all descriptors of intrinsic functions that
	return an exception code to have return_type equal to
	_jit_type_int_def.

	* jit/jit-dump.c (dump_object_code): fix object file extension.

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

	* jit/jit-gen-x86.h (x86_jump_memindex): add macro for indirect
	jumps.
	* jit/jit-internal.h, jit/jit-function.c, jiy/jit-rules-x86.c:
	add fixup_absolute_list field to _jit_block struct for fixing up
	absolute address references to a block.
	* include/jit/jit-opcode.h, include/jit/jit-insn.h, jit/jit-insn.c
	(jit_insn_jump_table), jit/jit-rules-x86.sel, jit/jit-rules-interp.c
	(_jit_gen_insn), jit/jit-interp.c (_jit_run_function):
	add JIT_OP_JUMP_TABLE opcode.

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

	* jit/jit-apply-x86.h (jit_builtin_return_int): change definition
	to dereference the return_buf argument and use leal instead of movl.
	This fixes builds with gcc 4.0.2.

2005-12-28  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-rules-x86.sel: implement JIT_OP_MEMMOVE rule. Get rid of
	compiler warnings in JIT_OP_MEMSET.

2005-12-24  Avinash Atreya  <avinashatreya@gmail.com>

	* dpas/dpas-parser.y: implement array expressions (committed by Aleksey
	Demakov, jit_insn_throw replaced with throw_builtin_exception)

2005-12-24  Aleksey Demakov  <ademakov@gmail.com>

	* include/jit/jit-except.h, jit/jit-except.c (jit_exception_builtin): 
	add JIT_RESULT_OUT_OF_BOUNDS builtin exception type code.

	* dpas/dpas-parser.y (throw_builtin_exception): add static function
	that makes jit_exception_builtin call.

	* jit/jit-cache.c (_jit_cache_get_start_method): add function that
	for an address in cache returns the start address of the block that
	contains it.
	* jit/jit-except.c (jit_stack_trace_get_offset): use
	_jit_cache_get_start_method function instead of cache_start field.
	* jit/jit-internal.h, jit/jit-function.c (jit_function_compile):
	remove cache_start field to the jit_function struct.

2005-12-22  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-rules-x86.sel: implement JIT_OP_MEMSET and JIT_OP_MEMCPY
	rules optimized	for small constant size blocks.

2005-12-20  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-gen-x86.h (x86_fld_memindex, x86_fld80_memindex)
	(x86_fst_memindex, x86_fst80_memindex): add floating point load
	and store macros with memindex addressing.

	* jit/jit-rules-x86.sel: optimize floating point element load
	and store rules. Fix potential register allocation problems.

2005-12-18  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-internal.h, jit/jit-function.c (jit_function_compile):
	Add cache_start field to the jit_function struct, set it to the start
	of the function code cache.

	* jit/jit-except.c (jit_stack_trace_get_offset): implement the
	function.

2005-12-15  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-insn.c (jit_insn_address_of): return null if the value is
	constant.

2005-12-15  Avinash Atreya  <avinashatreya@gmail.com>

	* jit/jit-insn.c: Store constants to a temporary to obtain
	address of constant values (Gopal).

2005-12-13  Aleksey Demakov  <ademakov@gmail.com>

	* configure.in: Added --enable-long-double option that forces
	jit_nfloat to be long double.

	* jit/jit-apply-x86.h (jit_builtin_apply, jit_builtin_return_float):
	In gcc/Win32 and gcc/non-Win32 versions of the macros check the size
	of jit_nfloat and use fstpl/fldl or fstpt/fldt instructions
	accordingly.

	* tools/gen-apply.c (detect_float_return): On x86 only the first
	10 bytes of 12 byte long doubles are significant and are used for
	comparison.

2005-12-12  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-dump.c (dump_object_code): in order to make dump work on
	cygwin call "as" and "objdump" in two separate system() calls because
	it looks like the ';' separator between commands does not work there.
	Also on Win32 use TMP and TEMP environment variables as the tmp
	directory names and fallback to "c:/tmp".

	* jit/jit-gen-x86.h (jit_assert): change the macro definition to
	resolve	problems introduced at 2005-12-10.

2005-12-10  Aleksey Demakov  <ademakov@gmail.com>

	* jit/jit-gen-x86.h: Merged changes from the latest Mono project's
	version	of this file.

	* jit/jit-rules-x86.sel: Done the following rules:
	JIT_OP_LOAD_ELEMENT_FLOAT32, JIT_OP_LOAD_ELEMENT_FLOAT64,
	JIT_OP_LOAD_ELEMENT_NFLOAT, JIT_OP_STORE_ELEMENT_LONG,
	JIT_OP_STORE_ELEMENT_FLOAT32, JIT_OP_STORE_ELEMENT_FLOAT64,
	JIT_OP_STORE_ELEMENT_NFLOAT.

2005-11-19  Klaus Treichel  <ktreichel@web.de>

	* jit/apply-x86-64.h: Change definition of JIT_MEMCPY from "jit_memcpy" to
	"jit_memcpy@PLT" to fix the build of a shared library for x86_64.

2004-11-18  Rhys Weatherley  <rweather@southern-storm.com.au>

	* include/jit/jit-opcode.h, jit/jit-dump.c, jit/jit-insn.c,
	jit/jit-interp.c, jit/jit-opcode.c, jit/jit-rules-interp.c,
	jit/jit-rules-x86.sel: implement tail calls properly.

2004-11-05  Evin Robertson  <evin@users.sourceforge.net>

	* jit/jit-insn.c (jit_insn_store): use the destination type
	to determine the store opcode, not the source value type.

2004-11-02  Evin Robertson  <evin@users.sourceforge.net>

	* jit/jit-function.c (jit_function_compile): clear block addresses
	and fixup lists if we need to restart on a new cache page (minor
	alterations by Rhys).

	* jit/jit-function.c (jit_function_apply_vararg): return 0 when a
	sub-function throws an exception, not 1.

2004-10-31  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-rules-x86.sel: handle the special case of constant
	destination pointers in "store_relative" instructions, because
	otherwise the register allocator gets confused.

2004-10-29  Peter Lund <firefly@diku.dk>

	* doc/libjit.3: fix manpage formatting issues. (patch attached
	to bug #10779, Gopal).

2004-10-28  Rhys Weatherley  <rweather@southern-storm.com.au>

	* configure.in, jit/jit-debugger.c, jit/jit-thread.c,
	jit/jit-thread.h: implement some of the locking code
	for the debugging API.

2004-10-12  Evin Robertson  <evin@users.sourceforge.net>

	* jit/jit-rules-x86.c (output_branch): correct the offset
	when outputting a long-form backward branch.

	* tests/Makefile.am, tests/loop.pas: test case for the
	long-form backward branch bug.

2004-10-06  Rhys Weatherley  <rweather@southern-storm.com.au>

	* doc/Makefile.am, doc/libjit.texi, include/jit/Makefile.am,
	include/jit/jit-common.h, include/jit/jit-context.h,
	include/jit/jit-debugger.h, include/jit/jit-except.h,
	include/jit/jit-function.h, include/jit/jit.h, jit/Makefile.am,
	jit/jit-context.c, jit/jit-debug.c, jit/jit-debugger.c,
	jit/jit-insn.c, jit/jit-internal.h, jit/jit-interp.c:
	redesign the debugger API so that it contains functions
	like "add breakpoint", "run", "step", etc that more closely resemble
	what a front end debugger will want to have, shifting the
	implementation burden off the front end.

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

	* include/jit/jit-function.h, include/jit/jit-insn.h,
	include/jit/jit-opcode.h, include/jit/jit-plus.h, jit/jit-function.c,
	jit/jit-insn.c, jit/jit-internal.h, jit/jit-interp.c,
	jit/jit-opcode.c, jit/jit-rules-interp.c, jit/jit-rules-arm.sel,
	jit/jit-rules-x86.sel, jitplus/jit-plus-function.cpp:
	add instructions and function API's for supporting debug line
	numbers and breakpoints.

	* doc/Makefile.am, doc/libjit.texi, include/jit/jit-context.h,
	include/jit/jit-insn.h, include/jit/jit-opcode.h,
	include/jit/jit-plus.h, jit/Makefile.am, jit/jit-context.c,
	jit/jit-debug.c, jit/jit-function.c, jit/jit-insn.c,
	jit/jit-internal.h, jit/jit-interp.c, jit/jit-opcode.c,
	jit/jit-rules-arm.sel, jit/jit-rules-interp.c, jit/jit-rules-x86.sel,
	jitplus/jit-plus-function.cpp: clean up the breakpoint API and
	implement debug hooks for the interpreter.

	* jit/jit-insn.c, jit/jit-rules-arm.sel, jit/jit-rules-x86.sel:
	use a common helper function for performing debug hook tests on
	native platforms, to avoid the need to implement breakpoint testing
	individually in every native back end.

2004-09-10  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-rules-x86.sel: pointer-relative loads and stores
	for structures in the x86 back end.

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

	* jit/jit-rules-x86.c, jit/jit-rules-x86.sel: add some support
	for structure copying to the x86 back end.

2004-09-06  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-rules-interp.c: the pointer value for indirect and vtable
	calls was being pushed onto the stack twice.

2004-09-05  Norbert Bollow  <nb@SoftwareEconomics.biz>

	* samples/hellovm.c: add a sample program that demonstrates a
	simple VM based on libjit (committed by Rhys).

2004-08-30  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit-rules-x86.sel: fix x86 code generation for floating-point
	return instructions.

2004-08-16  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-cpuid-x86.c (cpuid_query): use %ebx in a way that doesn't
	confuse PIC mode in some versions of gcc (bug #10022).

2004-08-13  Rhys Weatherley  <rweather@southern-storm.com.au>

	* include/jit/jit-insn.h, include/jit/jit-opcode.h,
	include/jit/jit-plus.h, jit/jit-insn.c, jit/jit-internal.h,
	jit/jit-interp.h, jit/jit-opcode.c, jit/jit-rules-interp.c,
	jitplus/jit-plus-function.cpp: re-implement the "push_return_area_ptr"
	patch so as to avoid wasting stack space in functions with more
	than one native function call.

2004-08-12  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-rules-interp.c: account for the extra value that is
	added to the stack by the "push_return_area_ptr" instruction.

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

	* configure.in, NEWS: update version for the "0.0.4" release.

	* configure.in: updating working version to "0.0.5".

2004-08-05  Rhys Weatherley  <rweather@southern-storm.com.au>

	* doc/Makefile.am, doc/README, doc/libjit.texi,
	jit/jit-dump.c, jit/jit-insn.c: documentation updates.

	* dpas/Makefile.am, tools/Makefile.am: support for parallel builds.

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

	* jit/jit-opcode.c: fix the operand types for "call_vtable_ptr".

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

	* tools/gen-apply.c: fix a crash in gen-apply under x86-64.

	* jit/jit-apply-func.h, jit/jit-apply-x86-64.h, tools/gen-apply.c:
	write an x86-64 assembly version of "__builtin_apply", because
	the version inside gcc has an unusable register ordering.

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

	* jit/jit-reg-alloc.c, jit/jit-rules-arm.h, jit/jit-rules-interp.c,
	jit/jit-rules-interp.h, jit/jit-rules-x86.h, jit/jit-rules.h:
	use separate JIT_REG_xxx flags for float32, float64, and nfloat
	because some platforms need to put these values in different
	types of registers (e.g. x86-64).

2004-06-22  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-insn.c: properly set the "may_throw" flag for opcodes
	that throw exceptions and which are also supported by the back end.

2004-06-21  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-rules-x86.c, jit/jit-rules-x86.sel: move the code
	for loading/storing small structures into a central location.

2004-06-18  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-dump.c, jit/jit-reg-alloc.c, jit/jit-rules-arm.c,
	jit/jit-rules-arm.h, jit/jit-rules-x86.c, jit/jit-rules-x86.h,
	jit/jit-rules-x86.sel, jit/jit-rules.c, jit/jit-rules.h,
	tests/param.pas: rewrite the x86 and ARM parameter handling
	routines to centralise the code and fix several bugs; add new
	tests for fastcall and stdcall conventions.

2004-06-17  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-reg-alloc.c (_jit_regs_set_outgoing): pass 64-bit "fastcall"
	parameters in ECX:EDX, not in ECX:EBX.

	* tools/gen-apply.c: allow floating-point values to be passed
	in "fastcall" registers.

2004-06-16  Rhys Weatherley  <rweather@southern-storm.com.au>

	* tools/gen-sel-parser.y: add a missing semi-colon.

2004-06-14  Rhys Weatherley  <rweather@southern-storm.com.au>

	* dpas/dpas-internal.h, dpas/dpas-parser.y, dpas/dpas-scanner.l,
	jit/jit-rules-x86.c, jit/jit-rules-x86.sel, tests/Makefile.am,
	tests/param.pas, tools/gen-apply.c: add some test cases for
	parameter passing; fix fastcall/stdcall conventions for x86.

	* jit/jit-rules-arm.h, jit/jit-rules-arm.sel, jit/jit-rules-x86.h,
	jit/jit-rules-x86.sel, tools/gen-sel-parser.y: enable register
	allocation for 64-bit values under x86 and ARM; expand some
	64-bit opcodes in the instruction selectors.

2004-06-12  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-insn.c, jit/jit-rules-x86.c, jit/jit-rules-x86.sel:
	implement or stub missing x86 instruction selection rules.

	* include/jit/jit-insn.h, include/jit/jit-opcode.h,
	include/jit/jit-plus.h, jit/jit-function.c, jit/jit-insn.c,
	jit/jit-interp.c, jit/jit-opcode.c, jit/jit-rules-interp.c,
	jitplus/jit-plus-function.cpp: add the "outgoing_frame_posn"
	instruction, to support tail calls.

2004-06-11  Rhys Weatherley  <rweather@southern-storm.com.au>

	* doc/libjit.texi, jit/jit-insn.c, jit/jit-internal.h,
	jit/jit-reg-alloc.c, jit/jit-rules-arm.c, jit/jit-rules-arm.sel,
	jit/jit-rules-interp.c, jit/jit-rules-x86.c, jit/jit-rules-x86.sel,
	jit/jit-rules.h, jit/jit-value.c, tutorial/Makefile.am,
	tutorial/t2.c, tutorial/t5.c: implement tail calls from a
	function to itself.

	* jit/jit-function.c, jit/jit-reg-alloc.c, jit/jit-rules-arm.c,
	jit/jit-rules-interp.c, jit/jit-rules-x86.c, jit/jit-rules.h:
	implement global register allocation for parameters in stack slots.

	* jit/jit-rules-x86.c, jit/jit-rules-x86.sel, jit/jit-rules.h:
	optimize the x86 function epilog when we are certain that the
	stack height doesn't change between entry and exit (i.e. the
	function is a leaf and there are no alloca's).

2004-06-10  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-apply-arm.c, jit/jit-gen-arm.c, jit/jit-gen-arm.h,
	jit/jit-rules-arm.c, jit/jit-rules-arm.h, jit/jit-rules-arm.sel,
	tools/gen-sel-parser.y: redesign the ARM code generation macros
	so that they have stronger protection against buffer overruns.

	* jit/jit-rules-arm.sel: flush the constant pool after unconditional
	branches, to try to minimize the probability that the pool will
	be flushed in the middle of a loop body.

	* jit/jit-dump.c: dump the hex address of external functions,
	to aid with debugging native disassembly dumps.

	* include/jit/jit-insn.h, include/jit/jit-opcode.h,
	include/jit/jit-plus.h, jit/jit-insn.c, jit/jit-internal.h,
	jit/jit-interp.c, jit/jit-opcode.c, jit/jit-rules-arm.c,
	jit/jit-rules-arm.sel, jitplus/jit-plus-function.cpp:
	add support for outgoing parameter areas, which should reduce
	the overhead of function calls that involve stacked arguments
	on non-x86 platforms; use parameter areas in the ARM back end.

	* include/jit/jit-plus.h, include/jit/jit-value.h, jit/jit-insn.c,
	jit/jit-internal.h, jit/jit-reg-alloc.c, jit/jit-rules-x86.c,
	jit/jit-value.c: don't over-allocate x86 stack frames if
	EBX, ESI, and EDI don't need to be saved; don't perform global
	register allocation on stacked parameters because it confuses
	the register spill logic.

	* jit/jit-reg-alloc.c (_jit_regs_load_value): avoid unnecessary
	spills if a temporary value won't be used again in the current block.

2004-06-09  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-rules-arm.c (flush_constants): update the instruction
	location after flushing the constant table.

	* jit/jit-gen-arm.h: fix some bugs in the encoding of floating-point
	load and store instructions.

	* jit/jit-gen-arm.c (_arm_alu_reg_imm): forgot to update the
	instruction pointer when loading the immediate value.

	* jit/jit-gen-arm.c: optimize the use of rotated immediate values.

	* jit/jit-rules-arm.c (_jit_gen_load_value): use ARM register pairs
	properly for "long" and "float64" values.

2004-06-08  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/Makefile.am, jit/jit-cpuid-x86.c, jit/jit-cpuid-x86.h:
	add an API for querying the x86 "cpuid" information.

	* include/jit/jit-opcode.h, jit/jit-interp.c, jit/jit-opcode.c:
	remove obsolete opcodes which violate "_jit_load_opcode"'s rules.

	* jit/jit-reg-alloc.c, jit/jit-rules-x86.c, jit/jit-rules-x86.sel:
	more x86 instruction selection rules.

	* jit/jit-reg-alloc.c (_jit_regs_set_outgoing): implement
	missing function.

	* jit/jit-gen-arm.h (arm_call): use a more efficient form of
	call for offsets beyond the simple target range.

	* jit/jit-rules-arm.sel, tools/gen-sel-parser.y,
	tools/gen-sel-scanner.l: introduce conditional rules into "gen-sel"
	so that we can disable certain rules on ARM platforms that lack
	floating-point support.

	* jit/jit-rules-arm.c (_jit_gen_spill_reg): spill properly to
	global registers for ARM.

	* jit/jit-reg-alloc.c, jit/jit-rules-arm.c, jit/jit-rules-arm.sel,
	jit/jit-rules-x86.sel: minor register assignment bugs.

	* jit/jit-rules-arm.c: ARM parameters cannot be split between
	registers and the stack.

	* jit/jit-gen-arm.c, jit/jit-gen-arm.h, jit/jit-rules-arm.c,
	jit/jit-rules-arm.h, jit/jit-rules-arm.sel: implement a
	constant pool for ARM, which gets complicated constants out
	of the main stream of execution.

2004-06-08  Miroslaw Dobrzanski-Neumann  <mne@mosaic-ag.com>

	* jit/jit-alloc.c: fix ROUND_END_PTR so that it adds the size
	after casting to jit_nuint.

2004-06-07  Thong Nguyen  <tim@veridicus.com>

	* configure.in, jit/jit-insn.c: add "_setjmp" to the list of
	names to try to work around the "setjmp" macro (needed for Win32).

2004-06-07  Rhys Weatherley  <rweather@southern-storm.com.au>

	* tools/gen-apply.c: gen-apply fixes for Alpha platforms.

	* jit/jit-interp.c: alignment problem with "push_const_float32"
	on 64-bit platforms.

	* jit/jit-intrinsic.c: work around a SIGFPE for sqrt(-1) on Alpha;
	it should return NaN instead.

	* jit/jit-value.c: fix a warning.

	* configure.in, jit/jit-insn.c: use "sigsetjmp" instead of
	"setjmp", because "setjmp" may be a macro on some systems.

	* jit-gen-arm.h: add floating-point instruction macros.

	* jit/jit-gen-arm.h, jit/jit-rules-arm.c, jit/jit-rules-arm.h,
	jit/jit-rules-arm.sel: expand floating-point instructions for ARM.

	* jit/jit-rules-x86.c: fix misnaming of jit_type_get_abi,
	jit_abi_stdcall, and jit_abi_fastcall.

	* tools/gen-apply-macosx.h, tools/gen-apply.c: bypass the
	auto-detection logic in gen-apply under MacOSX because
	it doesn't work with Apple's version of gcc.

	* tools/gen-apply.c: gen-apply fix for ia64.

	* jit/jit-alloc.c (jit_flush_exec): warning fix for ia64.

2004-06-06  Miroslaw Dobrzanski-Neumann  <mne@mosaic-ag.com>

	* jit/jit-alloc.c (jit_flush_exec): flush cache lines properly
	if the start is not on a line boundary.

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

	* jit/jit-reg-alloc.c, jit/jit-reg-alloc.h, jit/jit-rules-arm.c,
	jit/jit-rules-arm.sel, jit/jit-rules-x86.c, jit/jit-rules-x86.sel:
	add some more instructions to the ARM back end; split some x86
	back end code out into common code for ARM to use as well.

2004-06-02  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-function.c, jit/jit-insn.c, jit/jit-internal.h,
	jit/jit-reg-alloc.c, jit/jit-reg-alloc.h, jit/jit-rules-arm.c,
	jit/jit-rules-arm.h, jit/jit-rules-interp.c, jit/jit-rules-interp.h,
	jit/jit-rules-x86.c, jit/jit-rules-x86.h, jit/jit-rules.h,
	jit/jit-value.c, tools/gen-sel-parser.y: implement a simple global
	register allocation policy, based on usage counts.

	* jit/jit-reg-alloc.c (_jit_regs_load_value): if a value is in a
	global register and it is not going to be destroyed by an instruction,
	then use the global register as the operand.

	* jit/jit-insn.c: recognise "t = a op b; a = t" and turn it
	into "a = a op b" to make it easier for back ends to recognise
	special idioms such as increments and decrements.

2004-06-01  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-cache.c, jit/jit-elf-read.c, tools/gen-apply.c:
	fix some gcc 3.x compile warnings.

	* jit/jit-rules-arm.c, jit/jit-rules-arm.sel: more instruction
	selection rules for ARM.

	* configure.in, jit/jit-rules.h: enable the x86 back end by
	default on platforms where it makes sense, and add the option
	"--enable-interpreter" to "configure".

2004-05-31  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-rules-x86.sel: optimize multiplications for x86.

	* jit/jit-rules-x86.c, jit/jit-rules-x86.sel, tools/gen-sel-parser.y,
	tools/gen-sel-scanner.l: inline and optimize divisions for x86.

	* jit/jit-rules-x86.sel: throw exceptions correctly for "check_null".

2004-05-30  Rhys Weatherley  <rweather@southern-storm.com.au>

	* doc/libjit.texi: clarify the text that describes LLVM, at the
	request of Chris Lattner, LLVM's author.

	* jit/jit-insn.c (jit_insn_convert): use intrinsic functions
	for conversions when the back end doesn't support the opcode.

	* jit/jit-rules-x86.sel, tools/gen-sel-parser.y,
	tools/gen-sel-scanner.l: improve instruction selection for
	floating-point "push" operations.

	* include/jit/jit-insn.h, jit/jit-insn.c, jit/jit-internal.h,
	jit/jit-rules-x86.c: add "jit_insn_defer_pop_stack" and
	"jit_insn_flush_defer_pop", to defer the popping of function
	call arguments as long as possible.

	* jit/jit-rules-x86.sel: fix a cpu vs non-cpu register problem
	in the floating-point "push" operations for x86.

2004-05-29  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-insn.c, jit/jit-reg-alloc.c, jit/jit-reg-alloc.h,
	jit/jit-rules-x86.c, jit/jit-rules-x86.sel: continue the
	x86 back end; particularly byte/short stores.

	* jit/jit-rules-x86.sel: stub out JIT_OP_RETURN_REG, which
	doesn't need any special handling for x86.

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

	* tools/gen-apply.c: split "detect_struct_conventions" up a bit
	more to (hopefully) prevent problems under MacOSX; fix a bug in
	the generation of "jit_apply_builder_align_regs" that affected
	ARM and PPC systems.

	* dpas/dpas-types.c (dpas_type_identical): treat "float64" and
	"nfloat" as identical on platforms whose "long double" type is
	the same as "double".

	* jit/jit-rules-x86.c, jit/jit-rules-x86.sel, tools/gen-sel-parser.y,
	tools/gen-sel-scanner.l: relative loads and stores for x86.

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

	* jit/jit-insn.c, jit/jit-rules-x86.c, jit/jit-rules-x86.sel,
	jit/jit-rules.h, tools/gen-sel-parser.y: fix some compile issues
	in the x86 native back end.

	* jit/jit-function.c, jit/jit-rules-x86.c, jit/jit-rules-x86.sel,
	tools/gen-sel-parser.y: more bug fixes for the x86 back end.

	* include/jit/jit-insn.h, include/jit/jit-plus.h, jit/jit-insn.c,
	jitplus/jit-plus-function.cpp: add "jit_insn_new_block" to simplify
	creating a new block that doesn't have an explicit label.

	* dpas/dpas-parser.y, include/jit/jit-block.h, jit/jit-block.c,
	jit/jit-insn.c: add "jit_block_current_is_dead" to simplify
	testing if the last block is reachable or not, taking empty
	trailing blocks into account.

	* jit/jit-rules-x86.c, jit/jit-rules-x86.sel, tools/gen-sel-parser.y,
	tools/gen-sel-scanner.l: more selection cases for the x86 back end.

	* jit/Makefile.am, jit/jit-gen-arm.h, jit/jit-rules-arm.c,
	jit/jit-rules-arm.sel: add the beginnings of the instruction
	selector for ARM.

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

	* tools/.cvsignore, tools/Makefile.am, tools/gen-sel-parser.y,
	tools/gen-sel-scanner.l: add the "gen-sel" program to the tree,
	to assist with building native instruction selectors.

	* jit/.cvsignore, jit/Makefile.am, jit/jit-rules-x86.c,
	jit/jit-rules-x86.sel, tools/gen-sel-parser.y: check in the
	initial instruction selector for x86 (incomplete).

	* jit/jit-rules-x86.sel, tools/gen-sel-parser.y,
	tools/gen-sel-scanner.l: selectors for branch instructions.

	* jit/jit-rules-x86.sel: selectors for call instructions.

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

	* include/jit/jit-insn.h, include/jit/jit-opcode.h, jit/jit-block.c,
	jit/jit-dump.c, jit/jit-except.c, jit/jit-function.c, jit/jit-insn.c,
	jit/jit-internal.h, jit/jit-interp.c, 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, jit/jit-setjmp.h:
	rewrite the exception region routines to make them easier
	to use from CLI and JVM style systems.

	* jit/jit-rules-interp.c (_jit_gen_start_block): set the address
	of the exception handler for interpreted code.

	* include/jit/jit-plus.h, jitplus/jit-plus-function.cpp:
	add missing functions to the C++ API.

2004-05-22  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-block.c (_jit_block_peephole_branch): don't allow
	conditional branches to cross an exception context boundary,
	because doing so will violate "finally" semantics.

	* dpas/dpas-parser.y, include/jit/jit-insn.h, jit/jit-function.c,
	jit/jit-insn.c, jit/jit-internal.h: rename "jit_insn_move_blocks"
	to "jit_insn_move_blocks_to_end" and add a new function
	"jit_insn_move_blocks_to_start" for creating initialization code.

	* include/jit/jit-opcode.h, jit/jit-except.c, jit/jit-function.c,
	jit/jit-insn.c, jit/jit-internal.h, jit/jit-interp.c, jit/jit-opcode.c,
	jit/jit-setjmp.h: modify the function call logic to use "setjmp"
	with native back ends.

2004-05-21  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-gen-arm.c, jit/jit-gen-arm.h: modify the ARM codegen
	macros so that they can be used for branch elimination.

	* include/jit/jit-except.h, jit/jit-except.cpp, jit/jit-function.c,
	jit/jit-insn.c, jit/jit-internal.h, jit/jit-interp.cpp,
	jit/jit-interp.h, jit/jit-setjmp.h: redesign the exception handling
	mechanism to use "setjmp" rather than C++ exceptions.

	* configure.in, doc/Makefile.am, doc/libjit.texi, dpas/Makefile.am,
	jit/Makefile.am, jit/jit-except.c, jit/jit-except.cpp,
	jit/jit-interp.c, jit/jit-interp.cpp, jitdynamic/Makefile.am:
	remove the last remaining C++ code from libjit.so so that
	it is now a pure C library.

	* include/jit/jit-insn.h, include/jit/jit-opcode.h,
	include/jit/jit-plus.h, jit/jit-insn.c, jit/jit-interp.c,
	jit/jit-opcode.c, jitplus/jit-plus-function.cpp:
	add the "jit_insn_alloca" instruction.

	* configure.in, jit/.cvsignore, jit/Makefile.am, jit/jit-interp.c,
	jit/mklabel.sh: use computed goto's in the interpreter if supported
	by the underlying compiler.

2004-05-20  Rhys Weatherley  <rweather@southern-storm.com.au>

	* include/jit/jit-value.h, jit/jit-insn.c, jit/jit-value.c:
	convert constant conditional branches such as "if true goto L" into
	unconditional branches.

	* jit/jit-block.c, jit/jit-internal.h, jit/jit-live.c,
	jit/jit-rules-interp.c: perform peephole optimization of
	branches to branches before live variable analysis, so that
	the back ends don't need to worry about jump threading.

	* jit/jit-block.c, jit/jit-live.c: treat dead blocks as empty
	when peepholing branches to the next block.

2004-05-15  Rhys Weatherley  <rweather@southern-storm.com.au>

	* tools/gen-apply.c: fix a macro generation bug for Win32 systems.

	* jit/jit-reg-alloc.c: fix a compile bug.

2004-05-14  Rhys Weatherley  <rweather@southern-storm.com.au>

	* include/jit/Makefile.am, include/jit/jit-objmodel-private.h,
	include/jit/jit-objmodel.h, include/jit/jit.h, jit/Makefile.am,
	jit/jit-objmodel.c: put some infrastructure in place to support
	pluggable object models.

2004-05-13  Rhys Weatherley  <rweather@southern-storm.com.au>

	* dpas/dpas-parser.y, dpas/dpas-types.c, dpas/dpas-types.h:
	put some infrastructure (incomplete) in place to support array
	index expressions.

	* configure.in, NEWS: update version for the "0.0.2" release.

	* configure.in: updating working version to "0.0.3".

2004-05-12  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jitdynamic/Makefile.am, jitplus/Makefile.am: use both .libs and
	non.libs versions of the so paths, because some versions of libtool
	add .libs implicitly and others don't.

	* dpas/dpas-builtin.c, dpas/dpas-parser.y, dpas/dpas-types.c,
	dpas/dpas-types.h: add the "SameType" and "SameShape" builtins,
	to assist with unit testing type coercions.

	* dpas/dpas-parser.y (IfTail): fix a bug that caused the "then"
	case of an "if" to fall through to the "else".

	* dpas/dpas-parser.y: resolve ea-based lvalues in operators.

	* include/jit/jit-defs.h.in: incorrect values for jit_max_int
	and jit_max_long.

	* dpas/dpas-scanner.l (dpas_parse_hex): ignore the 'H' on the
	end of a hexadecimal constant.

	* Makefile.am, configure.in, tests/.cvsignore, tests/Makefile.am,
	tests/coerce.pas: check in some initial infrastructure for the
	dpas-based test suite.

	* jit/jit-type.c (jit_type_promote_int): promote ubyte and ushort
	to uint, not int.

	* jit/jit-insn.c, tests/coerce.pas: more coercion test cases and fixes.

	* dpas/dpas-builtin.c, jit/jit-dump.c, jit/jit-value.c: add builtins
	for mathematical operations.

	* dpas/dpas-parser.y, jit/jit-interp.cpp, tests/Makefile.am,
	tests/math.pas: test cases and bug fixes for mathematical operations.

	* dpas/dpas-main.c, include/jit/jit-context.h, jit/jit-context.c,
	jit/jit-insn.c, tests/Makefile.am: add the "--dont-fold" option
	to Dynamic Pascal, so that we can run the test cases without folding.

	* tests/README: add a README file to describe how to write test cases.

2004-05-11  Rhys Weatherley  <rweather@southern-storm.com.au>

	* include/jit/jit-insn.h, jit/jit-insn.c, jit/jit-interp.cpp,
	jit/jit-interp.h, jit/jit-opcode.c, jit/jit-rules-interp.c:
	round out the function call handling opcodes for the interpreter.

	* jit/jit-rules-interp.c, jit/jit-rules-interp.h: implement
	the exception-handling opcodes for the interpreter.

	* dpas/dpas-parser.y, dpas/dpas-scope.c, dpas/dpas-scope.h:
	fix a bug that caused global variables in Dynamic Pascal
	to be incorrectly allocated as locals.

	* jit/jit-reg-alloc.c (_jit_regs_load_to_top_two): handle the
	case where the second value is on the stack but not the first.

	* dpas/dpas-parser.y, dpas/dpas-types.c, dpas/dpas-types.h:
	report errors for unimplemented expressions and statements,
	so that users are not "surprised" when things silently fail.

	* .cvsignore, auto_gen.sh, configure.in, doc/.cvsignore,
	dpas/.cvsignore, dpas/Makefile.am, include/.cvsignore,
	jit/.cvsignore, jit/Makefile.am, jitdynamic/.cvsignore,
	jitdynamic/Makefile.am, jitplus/.cvsignore, jitplus/Makefile.am,
	tools/.cvsignore, tutorial/.cvsignore, tutorial/Makefile.am:
	modify the autoconf/automake build system to use libtool.

2004-05-10  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-reg-alloc.c, jit/jit-reg-alloc.h, jit/jit-rules-interp.c:
	interpreter code conversion for relative pointer and copy opcodes;
	fix some bugs in stack-based register allocation.

	* dpas/dpas-parser.y, dpas/dpas-types.c, dpas/dpas-types.h:
	loading and storing record fields in Dynamic Pascal.

	* dpas/dpas-builtin.c: implement the "New" and "Dispose" builtins.

2004-05-08  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-cache.c, jit/jit-cache.h, jit/jit-dump.c, jit/jit-interp.h,
	jit/jit-rules-interp.c: add "_jit_cache_get_end_method", to allow
	the end of a method's code to be located without explicit marking.

	* configure.in, include/jit/jit-util.h, jit/jit-string.c:
	remove the locale-sensitive string comparison routines because
	they aren't used in libjit, and front ends will normally have
	their own functions for this purpose.

	* Makefile.am, configure.in, doc/Makefile.am, doc/libjit.texi,
	include/jit/Makefile.am, include/jit/jit-dynamic.h,
	include/jit/jit-util.h, jit/Makefile.am, jit/jit-dynlib.c,
	jit/jit-mangle.c, jitdynamic/.cvsignore, jitdynamic/Makefile.am,
	jitdynamic/jit-cpp-mangle.c, jitdynamic/jit-dynlib.c:
	move the dynlib and C++ name mangling routines into a separate
	"jitdynamic" library, which will handle all of the cross-language
	naming and dynamic invocation logic.

	* include/jit/jit-type.h, jit/jit-internal.h, jit/jit-type.c,
	jitdynamic/jit-cpp-mangle.c: move the "JIT_TYPE_xxx" constants
	into the public headers and add "jit_type_get_kind" so that
	front end code can classify types quickly.

	* jit/jit-dump.c: use "objdump" to dump compiled native code.

2004-05-07  Rhys Weatherley  <rweather@southern-storm.com.au>

	* dpas/dpas-function.c, dpas/dpas-internal.h, dpas/dpas-main.c,
	dpas/dpas-parser.y, jit/jit-interp.cpp, jit/jit-interp.h,
	jit/jit-opcode.c, jit/jit-rules-interp.c: execute the "main"
	method once a Dynamic Pascal program has been compiled;
	fix some calling convention problems with "call_external".

	* dpas/dpas-builtin.c, dpas/dpas-scanner.l: add the "Flush"
	and "Terminate" builtins; fix a small bug in string scanning.

	* include/jit/jit-elf.h, jit/Makefile.am, jit/jit-context.c,
	jit/jit-elf-read.c, jit/jit-internal.h, jit/jit-symbol.c:
	implement symbol relocations for the ELF binary reader.

	* dpas/dpas-parser.y: code generation for "for" loops.

2004-05-06  Rhys Weatherley  <rweather@southern-storm.com.au>

	* dpas/Makefile.am, dpas/dpas-builtin.c, dpas/dpas-function.c,
	dpas/dpas-internal.h, dpas/dpas-main.c, dpas/dpas-parser.y,
	dpas/dpas-scope.c, dpas/dpas-scope.h, dpas/dpas-semantics.h,
	dpas/dpas-types.c, dpas/dpas-types.h, include/jit/jit-block.h,
	include/jit/jit-insn.h, include/jit/jit-plus.h, jit/jit-block.c,
	jit/jit-dump.c, jit/jit-function.c, jit/jit-insn.c, jit/jit-interp.cpp,
	jit/jit-opcode.c, jit/jit-rules-arm.c, jit/jit-rules-interp.c,
	jit/jit-rules-x86.c, jit/jit-type.c, jit/jit-value.c,
	jitplus/jit-plus-function.cpp: get basic compilation working
	in Dynamic Pascal.

2004-05-03  Rhys Weatherley  <rweather@southern-storm.com.au>

	* tools/gen-apply.c: improve the maintainability of the apply macros.

	* include/jit/jit-block.h, include/jit/jit-context.h,
	include/jit/jit-dump.h, include/jit/jit-elf.h, include/jit/jit-init.h,
	include/jit/jit-meta.h, include/jit/jit-type.h, include/jit/jit-util.h,
	jit/jit-type.c, jit/jit-value.c: add more instances of JIT_NOTHROW
	to the headers; add some special meta tags for types.

	* include/jit/jit-type.h, jit/jit-type.c: tag the system-dependent
	types so that they can be distinguished from the fixed-sized types
	when it is necessary to do so.

	* jit/Makefile.am, jit/jit-mangle.c: add the beginnings of a C++
	name mangler, to help with extracting C++ symbols from dynamic
	shared libraries.

	* doc/Makefile.am, doc/libjit.texi, doc/mangling_rules.txt,
	include/jit/jit-type.h, include/jit/jit-util.h, jit/jit-mangle.c,
	jit/jit-type.c: continue the implementation of the C++ name
	mangling routines.

2004-05-01  Rhys Weatherley  <rweather@southern-storm.com.au>

	* jit/jit-apply-x86.c, jit/jit-rules-x86.c, tools/gen-apply.c:
	fix function prolog and epilog handling for structure returns
	under x86/cdecl.

	* configure.in: set the initial working version to 0.0.1.

	* jit/jit-rules-x86.c: implement x86 code generation for some of
	the basic operators.

	* include/jit/jit-insn.h, include/jit/jit-opcode.h,
	include/jit/jit-plus.h, jit/jit-insn.c, jit/jit-interp.cpp,
	jit/jit-opcode.c, jit/jit-reg-alloc.c, jit/jit-reg-alloc.h,
	jit/jit-rules-interp.c, jitplus/jit-plus-function.cpp:
	add array access instructions.

	* tools/gen-apply.c: clean up the builder/parser macros and
	detect padding of the floating-point registers.

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

	* include/jit/jit-function.h, include/jit/jit-insn.h,
	include/jit/jit-opcode.h, include/jit/jit-plus.h, jit/jit-except.cpp,
	jit/jit-function.c, jit/jit-insn.c, jit/jit-internal.h,
	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.
