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. 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.