]>
git.unchartedbackwaters.co.uk Git - francis/libjit.git/log
Rhys Weatherley [Fri, 11 Jun 2004 03:48:00 +0000 (03:48 +0000)]
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).
Rhys Weatherley [Fri, 11 Jun 2004 02:01:18 +0000 (02:01 +0000)]
Implement global register allocation for parameters in stack slots.
Rhys Weatherley [Fri, 11 Jun 2004 01:39:00 +0000 (01:39 +0000)]
Implement tail calls from a function to itself.
Rhys Weatherley [Thu, 10 Jun 2004 05:20:05 +0000 (05:20 +0000)]
_jit_regs_load_value: avoid unnecessary spills if a temporary value
won't be used again in the current block.
Rhys Weatherley [Thu, 10 Jun 2004 03:06:07 +0000 (03:06 +0000)]
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.
Rhys Weatherley [Thu, 10 Jun 2004 02:05:56 +0000 (02:05 +0000)]
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.
Rhys Weatherley [Thu, 10 Jun 2004 00:38:35 +0000 (00:38 +0000)]
Dump the hex address of external functions, to aid with debugging
native disassembly dumps.
Rhys Weatherley [Thu, 10 Jun 2004 00:07:36 +0000 (00:07 +0000)]
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.
Rhys Weatherley [Wed, 9 Jun 2004 23:40:34 +0000 (23:40 +0000)]
Redesign the ARM code generation macros so that they have stronger
protection against buffer overruns.
Rhys Weatherley [Wed, 9 Jun 2004 07:39:37 +0000 (07:39 +0000)]
_jit_gen_load_value: use ARM register pairs properly for "long"
and "float64" values.
Rhys Weatherley [Wed, 9 Jun 2004 07:12:10 +0000 (07:12 +0000)]
Optimize the use of rotated immediate values.
Rhys Weatherley [Wed, 9 Jun 2004 06:49:13 +0000 (06:49 +0000)]
_arm_alu_reg_imm: forgot to update the instruction pointer when
loading the immediate value.
Rhys Weatherley [Wed, 9 Jun 2004 02:22:47 +0000 (02:22 +0000)]
Fix some bugs in the encoding of floating-point load and store instructions.
Rhys Weatherley [Wed, 9 Jun 2004 01:16:02 +0000 (01:16 +0000)]
flush_constants: update the instruction location after flushing the
constant table.
Rhys Weatherley [Tue, 8 Jun 2004 10:43:14 +0000 (10:43 +0000)]
Implement a constant pool for ARM, which gets complicated constants out
of the main stream of execution.
Rhys Weatherley [Tue, 8 Jun 2004 07:14:25 +0000 (07:14 +0000)]
ARM parameters cannot be split between registers and the stack.
Rhys Weatherley [Tue, 8 Jun 2004 06:40:53 +0000 (06:40 +0000)]
Minor register assignment bugs.
Rhys Weatherley [Tue, 8 Jun 2004 06:16:12 +0000 (06:16 +0000)]
_jit_gen_spill_reg: spill properly to global registers for ARM.
Rhys Weatherley [Tue, 8 Jun 2004 05:53:41 +0000 (05:53 +0000)]
_jit_gen_spill_reg: spill properly to global registers for ARM.
Rhys Weatherley [Tue, 8 Jun 2004 05:33:37 +0000 (05:33 +0000)]
Introduce conditional rules into "gen-sel" so that we can disable
certain rules on ARM platforms that lack floating-point support.
Rhys Weatherley [Tue, 8 Jun 2004 03:27:50 +0000 (03:27 +0000)]
arm_call: use a more efficient form of call for offsets beyond the
simple target range.
Rhys Weatherley [Tue, 8 Jun 2004 03:17:14 +0000 (03:17 +0000)]
_jit_regs_set_outgoing: implement missing function.
Rhys Weatherley [Tue, 8 Jun 2004 02:30:55 +0000 (02:30 +0000)]
More x86 instruction selection rules.
Rhys Weatherley [Tue, 8 Jun 2004 00:46:54 +0000 (00:46 +0000)]
Remove obsolete opcodes which violate "_jit_load_opcode"'s rules.
Rhys Weatherley [Mon, 7 Jun 2004 22:53:50 +0000 (22:53 +0000)]
Add an API for querying the x86 "cpuid" information.
Rhys Weatherley [Mon, 7 Jun 2004 22:07:11 +0000 (22:07 +0000)]
Fix ROUND_END_PTR so that it adds the size after casting to jit_nuint.
Rhys Weatherley [Mon, 7 Jun 2004 10:00:49 +0000 (10:00 +0000)]
(jit_flush_exec): warning fix for ia64.
Rhys Weatherley [Mon, 7 Jun 2004 09:54:27 +0000 (09:54 +0000)]
Gen-apply fix for ia64.
Rhys Weatherley [Mon, 7 Jun 2004 07:15:30 +0000 (07:15 +0000)]
Bypass the auto-detection logic in gen-apply under MacOSX because
it doesn't work with Apple's version of gcc.
Rhys Weatherley [Mon, 7 Jun 2004 04:36:31 +0000 (04:36 +0000)]
Add "_setjmp" to the list of names to try to work around the
"setjmp" macro (needed for Win32).
Rhys Weatherley [Mon, 7 Jun 2004 04:25:46 +0000 (04:25 +0000)]
Fix misnaming of jit_type_get_abi, jit_abi_stdcall, and jit_abi_fastcall.
Rhys Weatherley [Mon, 7 Jun 2004 04:21:25 +0000 (04:21 +0000)]
Expand floating-point instructions for ARM.
Rhys Weatherley [Mon, 7 Jun 2004 03:18:34 +0000 (03:18 +0000)]
Add floating-point instruction macros.
Rhys Weatherley [Mon, 7 Jun 2004 01:01:33 +0000 (01:01 +0000)]
Use "sigsetjmp" instead of "setjmp", because "setjmp" may
be a macro on some systems.
Rhys Weatherley [Mon, 7 Jun 2004 00:35:58 +0000 (00:35 +0000)]
Fix a warning.
Rhys Weatherley [Mon, 7 Jun 2004 00:20:40 +0000 (00:20 +0000)]
Work around a SIGFPE for sqrt(-1) on Alpha; it should return NaN instead.
Rhys Weatherley [Mon, 7 Jun 2004 00:06:22 +0000 (00:06 +0000)]
Alignment problem with "push_const_float32" on 64-bit platforms.
Rhys Weatherley [Sun, 6 Jun 2004 23:52:14 +0000 (23:52 +0000)]
Gen-apply fixes for Alpha platforms.
Rhys Weatherley [Sun, 6 Jun 2004 04:59:57 +0000 (04:59 +0000)]
jit_flush_exec: flush cache lines properly if the start is not
on a line boundary.
Rhys Weatherley [Sun, 6 Jun 2004 04:53:08 +0000 (04:53 +0000)]
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.
Rhys Weatherley [Wed, 2 Jun 2004 10:18:55 +0000 (10:18 +0000)]
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.
Rhys Weatherley [Wed, 2 Jun 2004 07:29:47 +0000 (07:29 +0000)]
_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.
Rhys Weatherley [Wed, 2 Jun 2004 07:17:23 +0000 (07:17 +0000)]
Implement a simple global register allocation policy, based on usage counts.
Rhys Weatherley [Tue, 1 Jun 2004 10:20:41 +0000 (10:20 +0000)]
Enable the x86 back end by default on platforms where it makes sense,
and add the option "--enable-interpreter" to "configure".
Rhys Weatherley [Tue, 1 Jun 2004 09:55:54 +0000 (09:55 +0000)]
More instruction selection rules for ARM.
Rhys Weatherley [Tue, 1 Jun 2004 06:46:37 +0000 (06:46 +0000)]
Fix some gcc 3.x compile warnings.
Rhys Weatherley [Mon, 31 May 2004 11:24:49 +0000 (11:24 +0000)]
Throw exceptions correctly for "check_null".
Rhys Weatherley [Mon, 31 May 2004 10:50:09 +0000 (10:50 +0000)]
Inline and optimize divisions for x86.
Rhys Weatherley [Mon, 31 May 2004 07:25:46 +0000 (07:25 +0000)]
Optimize multiplications for x86.
Rhys Weatherley [Sun, 30 May 2004 10:14:30 +0000 (10:14 +0000)]
Fix a cpu vs non-cpu register problem in the floating-point
"push" operations for x86.
Rhys Weatherley [Sun, 30 May 2004 09:05:05 +0000 (09:05 +0000)]
Add "jit_insn_defer_pop_stack" and "jit_insn_flush_defer_pop",
to defer the popping of function call arguments as long as possible.
Rhys Weatherley [Sun, 30 May 2004 05:37:05 +0000 (05:37 +0000)]
Improve instruction selection for floating-point "push" operations.
Rhys Weatherley [Sun, 30 May 2004 03:00:26 +0000 (03:00 +0000)]
Another small change.
Rhys Weatherley [Sun, 30 May 2004 02:58:52 +0000 (02:58 +0000)]
Small update to LLVM URL.
Rhys Weatherley [Sun, 30 May 2004 02:24:16 +0000 (02:24 +0000)]
jit_insn_convert: use intrinsic functions for conversions when the
back end doesn't support the opcode.
Rhys Weatherley [Sun, 30 May 2004 01:39:19 +0000 (01:39 +0000)]
Clarify the text that describes LLVM, at the request of Chris Lattner,
LLVM's author.
Rhys Weatherley [Sat, 29 May 2004 10:14:11 +0000 (10:14 +0000)]
Stub out JIT_OP_RETURN_REG, which doesn't need any special handling for x86.
Rhys Weatherley [Sat, 29 May 2004 09:44:51 +0000 (09:44 +0000)]
Continue the x86 back end; particularly byte/short stores.
Rhys Weatherley [Thu, 27 May 2004 04:36:30 +0000 (04:36 +0000)]
Relative loads and stores for x86.
Rhys Weatherley [Thu, 27 May 2004 01:05:30 +0000 (01:05 +0000)]
dpas_type_identical: treat "float64" and "nfloat" as identical on
platforms whose "long double" type is the same as "double".
Rhys Weatherley [Thu, 27 May 2004 00:49:53 +0000 (00:49 +0000)]
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.
Rhys Weatherley [Wed, 26 May 2004 07:21:04 +0000 (07:21 +0000)]
Add the beginnings of the instruction selector for ARM.
Rhys Weatherley [Wed, 26 May 2004 03:47:38 +0000 (03:47 +0000)]
More selection cases for the x86 back end.
Rhys Weatherley [Wed, 26 May 2004 01:19:38 +0000 (01:19 +0000)]
Add "jit_block_current_is_dead" to simplify testing if the last block
is reachable or not, taking empty trailing blocks into account.
Rhys Weatherley [Wed, 26 May 2004 01:05:03 +0000 (01:05 +0000)]
Add "jit_insn_new_block" to simplify creating a new block that
doesn't have an explicit label.
Rhys Weatherley [Wed, 26 May 2004 00:31:51 +0000 (00:31 +0000)]
More bug fixes for the x86 back end.
Rhys Weatherley [Tue, 25 May 2004 23:59:22 +0000 (23:59 +0000)]
Fix some compile issues in the x86 native back end.
Rhys Weatherley [Tue, 25 May 2004 10:24:10 +0000 (10:24 +0000)]
Selectors for call instructions.
Rhys Weatherley [Tue, 25 May 2004 05:13:22 +0000 (05:13 +0000)]
Selectors for branch instructions.
Rhys Weatherley [Tue, 25 May 2004 04:09:23 +0000 (04:09 +0000)]
Check in the initial instruction selector for x86 (incomplete).
Rhys Weatherley [Tue, 25 May 2004 01:22:27 +0000 (01:22 +0000)]
Add the "gen-sel" program to the tree, to assist with building
native instruction selectors.
Rhys Weatherley [Mon, 24 May 2004 06:19:53 +0000 (06:19 +0000)]
Add missing functions to the C++ API.
Rhys Weatherley [Mon, 24 May 2004 05:53:55 +0000 (05:53 +0000)]
_jit_gen_start_block: set the address of the exception handler for
interpreted code.
Rhys Weatherley [Mon, 24 May 2004 04:19:42 +0000 (04:19 +0000)]
Rewrite the exception region routines to make them easier
to use from CLI and JVM style systems.
Rhys Weatherley [Sat, 22 May 2004 02:08:07 +0000 (02:08 +0000)]
Modify the function call logic to use "setjmp" with native back ends.
Rhys Weatherley [Fri, 21 May 2004 23:32:32 +0000 (23:32 +0000)]
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.
Rhys Weatherley [Fri, 21 May 2004 22:51:42 +0000 (22:51 +0000)]
_jit_block_peephole_branch: don't allow conditional branches to cross
an exception context boundary, because doing so will violate "finally"
semantics.
Rhys Weatherley [Fri, 21 May 2004 05:55:49 +0000 (05:55 +0000)]
Use computed goto's in the interpreter if supported by the underlying compiler.
Rhys Weatherley [Fri, 21 May 2004 04:58:27 +0000 (04:58 +0000)]
Add the "jit_insn_alloca" instruction.
Rhys Weatherley [Fri, 21 May 2004 04:24:24 +0000 (04:24 +0000)]
Remove the last remaining C++ code from libjit.so so that
it is now a pure C library.
Rhys Weatherley [Fri, 21 May 2004 02:20:00 +0000 (02:20 +0000)]
Redesign the exception handling mechanism to use "setjmp" rather
than C++ exceptions.
Rhys Weatherley [Fri, 21 May 2004 00:22:19 +0000 (00:22 +0000)]
Treat dead blocks as empty when peepholing branches to the next block.
Rhys Weatherley [Thu, 20 May 2004 09:53:37 +0000 (09:53 +0000)]
Treat dead blocks as empty when peepholing branches to the next block.
Rhys Weatherley [Thu, 20 May 2004 02:15:52 +0000 (02:15 +0000)]
Perform peephole optimization of branches to branches before live
variable analysis, so that the back ends don't need to worry
about jump threading.
Rhys Weatherley [Thu, 20 May 2004 01:24:54 +0000 (01:24 +0000)]
Convert constant conditional branches such as "if true goto L" into
unconditional branches.
Rhys Weatherley [Sat, 15 May 2004 10:33:02 +0000 (10:33 +0000)]
Fix a compile bug.
Rhys Weatherley [Sat, 15 May 2004 10:21:34 +0000 (10:21 +0000)]
Fix a macro generation bug for Win32 systems.
Rhys Weatherley [Fri, 14 May 2004 07:10:59 +0000 (07:10 +0000)]
Put some infrastructure in place to support pluggable object models.
Rhys Weatherley [Thu, 13 May 2004 04:59:52 +0000 (04:59 +0000)]
Updating working version to "0.0.3".
Rhys Weatherley [Thu, 13 May 2004 03:24:17 +0000 (03:24 +0000)]
Update version for the "0.0.2" release.
Rhys Weatherley [Thu, 13 May 2004 02:45:48 +0000 (02:45 +0000)]
Put some infrastructure (incomplete) in place to support
array index expressions.
Rhys Weatherley [Wed, 12 May 2004 11:38:31 +0000 (11:38 +0000)]
Add a README file to describe how to write test cases.
Rhys Weatherley [Wed, 12 May 2004 07:33:45 +0000 (07:33 +0000)]
Add the "--dont-fold" option to Dynamic Pascal, so that we can run
the test cases without folding.
Rhys Weatherley [Wed, 12 May 2004 06:58:45 +0000 (06:58 +0000)]
Test cases and bug fixes for mathematical operations.
Rhys Weatherley [Wed, 12 May 2004 04:52:03 +0000 (04:52 +0000)]
Add builtins for mathematical operations.
Rhys Weatherley [Wed, 12 May 2004 03:34:34 +0000 (03:34 +0000)]
More coercion test cases and fixes.
Rhys Weatherley [Wed, 12 May 2004 03:00:17 +0000 (03:00 +0000)]
jit_type_promote_int: promote ubyte and ushort to uint, not int.
Rhys Weatherley [Wed, 12 May 2004 01:11:17 +0000 (01:11 +0000)]
Check in some initial infrastructure for the dpas-based test suite.
Rhys Weatherley [Wed, 12 May 2004 00:54:30 +0000 (00:54 +0000)]
dpas_parse_hex: ignore the 'H' on the end of a hexadecimal constant.
Rhys Weatherley [Wed, 12 May 2004 00:53:09 +0000 (00:53 +0000)]
Incorrect values for jit_max_int and jit_max_long.