0.1.2 (10 Decemeber 2008) * Switch from GPL to LGPL 2.1 license. * Implement x86-64 backend (Klaus Treichel). * Fix interpreter backend (Klaus Treichel, Aleksey Demakov). * Introduce jit-unwind interface (Aleksey Demakov, Klaus Treichel). * Code cache pages can now grow if needed (Aleksey Demakov). * Various fixes (Klaus Treichel, Aleksey Demakov, Juan Jesus Garcia de Soria, Dalibor Topic, Arto Bendiken) 0.1.0 (3 March 2007) General improvements: * Add on-demand compilation driver (Aleksey Demakov, Klaus Treichel). * Add jit_function_from_vtable_pointer function (Klaus Treichel). * Add jit_insn_mark_breakpoint_variable function (Radek Polak). * Add signal handlers (Kirill Kononenko). * Add JIT_OPTION_POSITION_INDEPENDENT context option (not supported by the backends yet) (Aleksey Demakov). * Add function indirectors (Klaus Treichel). * Allocate function redirectors and indirectors in the code cache (Aleksey Demakov). * Use mmap to allocate executable memory where available (Klaus Treichel). * Now can dump to any stream not just stdout and stderr (Radek Polak). * Use a global lock during context initialization (Aleksey Demakov). * Fix problems that take place after compilation is restarted on cache page overflow (Aleksey Demakov). Register allocation/instruction selection improvements (Aleksey Demakov): * Completely rewrite register allocator. The new allocator works with three-value intermediate instructions rather than with individual values. This allows to fully analyze the effect of the instruction and makes it possible to optimize commutative instructions and eliminate in some cases redundant register spills and loads. * Support three-address architectures. * Add register classes. * The allocator may now allocate scratch registers for instructions. * The allocator now automatically handles cases when a global register is clobbered by the instruction (which may happen on the register constrained x86 architecture). * Implement value coalescing for copy instructions. * Provide for efficient handling of x87 floating point stack. * Add gen-rules program that supersedes gen-sel. It generates code for new register allocator and extends the syntax of instruction selection rules to make use of new features such as register classes, scratch registers, etc. Alpha: * Add Alpha backend (not yet fully functional) (Thomas Cort). x86: * Update x86 instruction selector for new register allocator and rules syntax. Take advantage of their new features to generate better code and/or simplify rules (Aleksey Demakov). * optimize code generated by throw_builtin, JIT_OP_THROW, JIT_OP_LOAD_PC if the position-independent option is not set (Kirill Kononenko). * Implement JIT_OP_IMIN_UN, JIT_OP_ISIGN, JIT_OP_LSIGN, JIT_OP_IABS, JIT_OP_LABS, JIT_OP_LOW_WORD, JIT_OP_EXPAND_INT, JIT_OP_EXPAND_UINT, JIT_OP_INT_TO_NFLOAT, JIT_OP_UINT_TO_NFLOAT, JIT_OP_LONG_TO_NFLOAT, JIT_OP_ULONG_TO_NFLOAT rules (Aleksey Demakov, Kirill Kononenko). * optimize loading of zero constants. (Aleksey Demakov). Interpreter: * The interpreter backend does not use register stack and register allocator anymore (Aleksey Demakov). 0.0.6 (15 January 2006) x86: * Be careful when using EBX in cpuid instructions so as not to confuse gcc in PIC mode (Rhys W). * Fixes to floating point instruction selection (Rhys Weatherley). * Some support for structure copying (Rhys Weatherley). * Pointer-relative loads and stores (Rhys Weatherley). * Correct the offset for long-form backwards branches (Evin Robertson). * Constant pointers in relative offset operations (Rhys Weatherley). * Merge in Mono's changes to jit-gen-x86.h (Aleksey Demakov). * Array loads and stores for floating point values (Aleksey Demakov). * Memcpy, memset, and memmove operations (Aleksey Demakov). * Return buffer problems in apply function with gcc 4.0.2 (Aleksey Demakov). x86-64: * Use the correct library entry point when calling jit_memcpy from compiled code (Klaus Treichel). Interpreter: * Return area pointers (Rhys Weatherley). * Prevent double push of indirect function pointers (Rhys Weatherley). Function/instruction core: * Clear block addresses and fixup lists if a function restart is needed (Evin Robertson). * Use destination type for store type, not source type (Evin Robertson). * Tail call implementation (Rhys Weatherley). * Address of constants (Avinash Atreya, Aleksey Demakov). * Functions for locating the proper start of a function in the cache (Aleksey Demakov). * New exception type for array out of bounds (Aleksey Demakov). * Jump tables (Aleksey Demakov). * Intrinsics that return exception codes should be labeled "int" (Aleksy D). * Spill both parts of a register pair properly (Aleksey Demakov). * Fixes to freeing of register pairs (Aleksey Demakov). Dpas: * Throw builtin exceptions (Aleksey Demakov). * Implement array expressions (Avinash Atreya). Other: * Sample VM for demonstrating libjit (Norbert Bellow). * Debug interface for line numbers and breakpoints (Rhys Weatherley). * Man page formatting issues (Peter Lund). * Wrong return value in jit_function_apply_vararg (Evin Robertson). * Make debug dumping work with cygwin (Aleksey Demakov). * Option to force use on long double on Win32 (Aleksey Demakov). 0.0.4 (8 August 2004) * Pluggable object models. * Problems with "gen-apply" on Win32 systems. * Optimize "if true goto" into "goto". * Peephole optimization on branches. * Adjust ARM codegen macros to support branch elimination instructions. * Redesign exception handling to use "setjmp" everywhere. * Remove C++ code from "libjit.so" so that it is a pure C library. * Use computed goto's in the interpreter if the compiler supports them. * Don't allow conditional branches to jump out of exception contexts. * Block movement to allow initialization code to be moved to the start of a function, or loop condition code to be moved to the end. * Rewrite the exception region routines to make them easier to use. * Add the "gen-sel" program, for creating instruction selectors. * Write instruction selectors for x86 and ARM (only x86 is enabled). * Portability fixes for ARM, PPC, Alpha, IA64, and amd64. * Clarify the description of LLVM, at the request of LLVM's author. * Deferred argument popping after function calls. * Add "--enable-interpreter" to force the interpreter to be used. * Implement a simple global register allocator based on usage counts. * Recognise increment and decrement idioms. * Align cache flushes properly (Miroslaw Dobrzanski-Neumann). * Querying of x86 cpuid where necessary. * Add a constant pool for ARM, to make constant loads more efficient. * Handle register pairs for 64-bit values properly. * Support for parameter areas on the stack, to reduce push/pop overhead. * Avoid unnecessary register spills if a value won't be used again. * Implement tail calls from a function to itself. * Optimize x86 prologs and epilogs to avoid doing unnecessry work. * Centralise the code that handles parameter passing. * Support for parallel builds. 0.0.2 (13 May 2004) * Function and instruction building API basics in place, in C and C++. * Operations include arithmetic, overflow checking, conversion, mathematical (sin, sqrt, etc), branching, exception handling, function calls, structure types, and arrays. * Up-front or on-demand compilation and re-compilation. * Interpreter at par with instruction building requirements. * x86 and ARM in early stages (not enabled yet). * Register allocation for register-based and stack-based architectures. * Nested functions. * Dynamic Pascal language is usable, suitable for writing test cases. * Beginnings of ELF support for eventual ahead-of-time compilation.