2006-04-07 Klaus Treichel * jit/jit-internal.h (struct _jit_function): add indirector field. * jit/jit-function.c (jit_function_compile, jit_function_create): use indirector. * jit/jit-apply-x86.h: define jit_indirector_size. * jit/jit-apply-func.h, jit/jit-apply-x86.c (_jit_create_indirector): add function that emits indirector code. 2006-04-07 Aleksey Demakov * jit/jit-insn.c (create_call_setup_insns): zero struct_return in case of tail calls (the problem was found by Klaus). 2006-04-03 Aleksey Demakov * tools/gen-rules-scanner.l: * tools/gen-rules-parser.y: add `reversible', `x87arith', and `copy' keywords. Fix bugs. 2006-03-23 Klaus Treichel * jit/jitc-except.c: Walk the stack to build the stack trace in jit_exception_get_stack_trace when the frame is not broken. 2006-03-23 Aleksey Demakov * tools/Makefile.am: * tools/gen-rules-parser.y, tools/gen-rules-scanner.l: add "gen-rules" tool that is similar to "gen-sel" but uses new register allocator. 2006-03-12 Klaus Treichel * jit/jit-insn.c: Pop the setjump context on return from functions with a catcher. 2006-03-11 Kirill Kononenko * jit/jit-insn.c (create_call_setup_insn): fix tail calls, work if the called function is not the callee function (thanks klausT for finding the bug). 2006-02-27 Aleksey Demakov * jit/jit-insn.c (jit_insn_convert): fix int->uint and uint->int conversion. 2006-02-26 Aleksey Demakov * jit/jit-rules-x86.sel: fix JIT_OP_STORE_RELATIVE_LONG. * jit/jit-gen-x86.h (x86_pop_mem, x86_pop_membase): fix opcode -- it was 0x87 (xchg) instead of 0x8f (pop). 2006-02-24 Aleksey Demakov * jit/jit-insn.c (jit_insn_address_of_label): fix a typo. * jit/jit-rules-x86.sel: fix JIT_OP_ADDRESS_OF_LABEL rule. 2006-02-20 Aleksey Demakov * jit/jit-rules-x86.c (_jit_create_call_return_insns): fix return code in case of no return value or struct returned via pointer. 2006-02-19 Aleksey Demakov * jit/jit-reg-alloc.h: * jit/jit-reg-alloc.c: Initial version of new local register allocator. * jit/jit-rules.h: * jit/jit-rules-arm.c (_jit_gen_spill_global): * jit/jit-rules-interp.c (_jit_gen_spill_global): * jit/jit-rules-x86.c (_jit_gen_spill_global): add function for spilling global registers. Used by the new allocator. Only x86 version is really implemented. 2006-02-13 Aleksey Demakov * jit/jit-internal.h (struct _jit_value): add index field. * jit/jit-value.c (alloc_value): initialize index field; * jit/Makefile.am (libjit_la_SOURCES): add jit-bitset.c and jit-cfg.c. 2006-02-12 Aleksey Demakov * jit/jit-rules-x86.sel: fix JIT_OP_CALL_FINALLY. 2006-02-10 Aleksey Demakov * jit/jit-bitset.c: * jit/jit-bitset.h: * jit/jit-cfg.c: * jit/jit-cfg.h: initial code drop for a more precise liveness analysis based on control flow graph. 2006-02-04 Aleksey Demakov * jit/jit-rules-x86.sel: fix a typo in JIT_OP_JUMP_TABLE. 2006-01-30 Aleksey Demakov * jit/jit-rules-x86.c (_jit_gen_load_value): optimize loading of zero constants. Allow to move a value from one register to another. 2006-01-15 Rhys Weatherley * configure.in, NEWS: update version for the "0.0.6" release. * configure.in: updating working version to "0.0.7". 2006-01-14 Aleksey Demakov * 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 * 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 * 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 * 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 * jit/jit-rules-x86.sel: implement JIT_OP_MEMMOVE rule. Get rid of compiler warnings in JIT_OP_MEMSET. 2005-12-24 Avinash Atreya * dpas/dpas-parser.y: implement array expressions (committed by Aleksey Demakov, jit_insn_throw replaced with throw_builtin_exception) 2005-12-24 Aleksey Demakov * 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 * 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 * 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 * 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 * jit/jit-insn.c (jit_insn_address_of): return null if the value is constant. 2005-12-15 Avinash Atreya * jit/jit-insn.c: Store constants to a temporary to obtain address of constant values (Gopal). 2005-12-13 Aleksey Demakov * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * doc/libjit.3: fix manpage formatting issues. (patch attached to bug #10779, Gopal). 2004-10-28 Rhys Weatherley * 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 * 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 * 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 * 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 * jit/jit-rules-x86.sel: pointer-relative loads and stores for structures in the x86 back end. 2004-09-09 Rhys Weatherley * 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 * 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 * samples/hellovm.c: add a sample program that demonstrates a simple VM based on libjit (committed by Rhys). 2004-08-30 Rhys Weatherley * jit-rules-x86.sel: fix x86 code generation for floating-point return instructions. 2004-08-16 Rhys Weatherley * 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 * 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 * 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 * 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 * 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 * jit/jit-opcode.c: fix the operand types for "call_vtable_ptr". 2004-06-25 Rhys Weatherley * 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 * 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 * 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 * 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 * 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 * 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 * tools/gen-sel-parser.y: add a missing semi-colon. 2004-06-14 Rhys Weatherley * 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 * 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 * 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 * 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 * 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 * 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 * jit/jit-alloc.c: fix ROUND_END_PTR so that it adds the size after casting to jit_nuint. 2004-06-07 Thong Nguyen * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * */*: Initial public release. Most of the skeleton code is in place.