Alien-LibJIT
view release on metacpan or search on metacpan
libjit/ChangeLog view on Meta::CPAN
option.
* jit/jit-internal.h (struct _jit_builder): add position_independent
field.
* jit/jit-function.c (_jit_function_ensure_builder): initialize
position_independent field.
* jit/jit-rules-x86.c (throw_builtin):
* jit/jit-rules-x86.ins (JIT_OP_ADDRESS_OF_LABEL, JIT_OP_JUMP_TABLE)
(JIT_OP_THROW, JIT_OP_LOAD_PC): add position_independent check and
stub missing cases.
2006-11-26 Kirill Kononenko <Kirill.Kononenko@gmail.com>
* jit/jit-rules-x86.ins: if JIT_USE_SIGNALS is defined do not emit
explicit division by zero check (patch #5278).
2006-11-26 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-reg-alloc.c (choose_output_register): fix global register
use cost computation.
* jit/jit-rules-x86.ins: mark as commutative JIT_OP_IADD,
JIT_OP_IMUL, JIT_OP_LADD, JIT_OP_IAND, JIT_OP_IOR, JIT_OP_IXOR,
JIT_OP_LAND, JIT_OP_LOR, JIT_OP_XOR rules.
2006-11-25 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-reg-alloc.c (exch_stack_top, free_value): fix freeing
stack registers.
2006-11-25 Kirill Kononenko <Kirill.Kononenko@gmail.com>
* jit/jit-rules-x86.ins: add JIT_OP_ISIGN and JIT_OP_LSIGN rules
(patch #5533), optimize JIT_OP_LNEG rule (patch #5555). [with
some modifications by Aleksey Demakov.]
2006-11-11 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-rules-x86.ins: add JIT_OP_IABS and JIT_OP_LABS rules.
2006-11-04 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-rules-x86.ins: make comparison opcodes use three-address
patterns.
2006-11-01 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-reg-alloc.c (commit_input_value, commit_output_value):
do not increment/decrement the top of the register stack in case of
fp-value coalescing.
2006-10-23 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-rules-x86.ins: JIT_OP_EXPAND_INT and JIT_OP_EXPAND_UINT
rules were broken for local byte or short values. Fixed by removing
the local pattern altogether as the reg pattern produces the same
code but without the bug.
2006-10-18 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-reg-alloc.c (clobbers_register, bind_value): enable
coalescing of the destination value of a copy operation with the
source value in a single register.
* jit/jit-rules-x86.ins: tag COPY rules with the "copy" keyword
and change patterns of TRUNC rules to have a separate destination
register.
2006-10-16 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-interp.h, jit/jit-interp.c (_jit_run_function):
* jit/jit-opcode.c, jit/jit-rules-interp.c (_jit_gen_insn): Repair
struct handling broken since the last interpreter reorganization,
remove unused interpreter opcodes.
* jit/jit-rules-interp.c (_jit_gen_start_block): check if the fixup
position is before the cache end. This prevents segmentation fault
when the end of cache block is reached and jit_function_compile()
attempts to generate more code (it checks for the cache end way too
late).
2006-10-14 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-rules-interp.c (_jit_create_call_return_insns): fix return
code in case of no return value or struct returned via pointer (this
is just like 2006-02-20 fix for x86).
* jit/jit-cfg.c (create_value_entry): an uninitialized value was
used (thanks Klaus for spotting).
2006-10-02 Klaus Treichel <ktreichel@web.de>
* jit/jit-intrinsic.c: Fix a copy bug in jit_ulong_mul (replace - by *).
2006-09-25 Aleksey Demakov <ademakov@gmail.com>
* include/jit/jit-arch-x86.h, include/jit/jit-arch-generic.h: add
headers for architecture-specific definitions.
(_JIT_ARCH_GET_CURRENT_FRAME): add macro to find the stack frame
pointer.
* include/jit/Makefile.am: create jit-arch.h as a symlink to one of
the jit-arch-*.h files depending on the JIT_ARCH value.
* configure.in: set JIT_ARCH according to the system architecture.
* include/jit/jit-walk.h (jit_get_current_frame):
* jit/jit-walk.c (jit_get_starting_frame):
* tools/gen-apply.c (find_return_offset, detect_frame_offsets): use
_JIT_ARCH_GET_CURRENT_FRAME macro if available. This resolves the
problem with gcc 4.1.* where __builtin_frame_address() function is
broken (thanks Klaus for identifing the problem).
2006-09-15 Radek Polak <psonek2@seznam.cz>
* include/jit/jit-insn.h, jit/jit-insn.c, jit/jit-debugger.c: new
instruction jit_insn_mark_breakpoint_variable.
2006-09-14 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-reg-alloc.h, jit/jit-reg-alloc.c: remove "old" register
allocation code.
libjit/ChangeLog view on Meta::CPAN
for consistency.
2006-06-27 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-insn.c (accumulate_relative_offset): add function that
accumulates JIT_OP_ADD_RELATIVE offsets.
(jit_insn_store_relative, jit_insn_load_relative)
(jit_insn_add_relative): use accumulate_relative_offset() instead
of previous_relative() to find the offset from the original address
and do not replace the accumulated instructions with JIT_OP_NOP as
it was before. The old approach is problematic because it is unknown
at this point if the values we accumulated are dead or they will be
used by instructions added later. The dead code elimination pass
removes unused values just as well but with enough knowledge to be
safe. The new code also does not move JIT_OP_ADDRESS_OF towards the
relative instructions that uses the address. Supposedly such move
may be used by the code generator as a hint. However currently the
code generator does not use such a hint. The old code is kept for
reference #ifdefed out.
2006-06-17 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-reg-alloc.h, jit/jit-reg-alloc.c: implement support of the
JIT_REGS_FREE_DEST flag for 3-argument instructions. Tweak reg alloc
API.
* tools/gen-rules-parser.y: adjust for reg alloc API changes. Use
'$0' pattern element to refer to destination register in 3-argument
instructions.
* jit/jit-rules-x86.ins: rewrite JIT_OP_IDIV, JIT_OP_IDIV_UN,
JIT_OP_IREM, JIT_OP_IREM_UN, JIT_OP_ADDRESS_OF_LABEL,
JIT_OP_LOAD_RELATIVE_FLOAT32, JIT_OP_LOAD_RELATIVE_FLOAT32,
JIT_OP_LOAD_RELATIVE_NFLOAT, JIT_OP_LOAD_ELEMENT_FLOAT32,
JIT_OP_LOAD_ELEMENT_FLOAT64, JIT_OP_LOAD_ELEMENT_NFLOAT rules.
2006-06-16 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-rules-x86.sel, jit/jit-rules-x86.ins: fix JIT_OP_IDIV and
JIT_OP_IREM rules for the divisor value of -1.
2006-06-09 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-rules-x86.ins: rewrite JIT_OP_STORE_RELATIVE_BYTE,
JIT_OP_STORE_RELATIVE_SHORT, JIT_OP_STORE_RELATIVE_LONG,
JIT_OP_STORE_RELATIVE_FLOAT32, JIT_OP_STORE_RELATIVE_FLOAT64,
JIT_OP_STORE_RELATIVE_NFLOAT, JIT_OP_STORE_ELEMENT_LONG,
JIT_OP_STORE_ELEMENT_NFLOAT rules to use regular pattern
syntax instead of manual.
2006-06-03 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-rules-x86.ins: remove _jit_regs_free_reg() call from
JIT_OP_RETURN_FLOAT32, JIT_OP_PUSH_FLOAT32, JIT_OP_RETURN_FLOAT64,
JIT_OP_RETURN_NFLOAT, JIT_OP_PUSH_FLOAT64, and JIT_OP_PUSH_NFLOAT
rules. With new ``gen-rules'' tool it frees wrong register and
the right register is anyway freed automatically by the new
allocator.
* jit/jit-reg-alloc.h, jit/jit-reg-alloc.c (_jit_regs_abort): add
function to unbind values from registers if the code generation
failed. This is required because new allocator may temporary bind
constants to registers and if neither _jit_regs_commit() nor
_jit_regs_abort() is called the constant value will be left in
inconsistent state. The problem shows up when the end of a cache
block has been reached and the compilation is restarted with a new
block.
* jit/jit-reg-alloc.c (_jit_regs_begin, _jit_regs_end): add
convenience functions.
* tools/gen-rules-parser.y (gensel_output_clauses): make generated
code more readable by using _jit_regs_begin() and _jit_regs_end()
where appropriate.
* jit/jit-reg-alloc.c: allow to load the second part of a register
pair to a global register. This is because x86 long arithmetics
use 4 registers at once: EAX:EDX and ECX:EBX. At the same time
EBX is the global register candidate. If the instruction clobbers
the global register, the new allocator automatically pushes it on
the stack before and pops after the instruction.
* jit/jit-function.c (compile_block): modify trace messages.
2006-05-28 Klaus Treichel <ktreichel@web.de>
* jit/jit-insn.c: Add a code_label in initialize_setjmp_block just
before the end_label that is moved with the block to the start of
the function as jump target to the code. Otherwise other blocks
moved to the start after this block will never be executed.
2006-05-27 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-reg-alloc.c (free_value, save_value): the value that has
a global register and is also associated with a local register
needs to be unbound from the local one.
* jit/jit-reg-alloc.c (compute_spill_cost): assume that the spill
cost for clean values is not zero. This keeps them in registers
as long as there are free registers and thus reduces the number of
loads.
2006-05-25 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-reg-alloc.c (use_cheapest_register): fix cost calculation
again for 'spill_before' rules. The last patch did not work for
values stored in global registers. Now both global and non-global
values should be copied to EAX.
2006-05-25 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-reg-alloc.c (use_cheapest_register): fix cost calculation
that sometimes caused overlooking free registers. This was a serious
problem as there are some 'spill_before' rules that assume that the
allocator will always choose EAX as the first free register.
2006-05-21 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-reg-alloc.h: add _JIT_REGS_FREE_DEST flag to be used in
cases when the destination register is independent of any input
register.
* tools/gen-rules-parser.y: allow specification of independent
libjit/ChangeLog view on Meta::CPAN
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.
( run in 0.966 second using v1.01-cache-2.11-cpan-2398b32b56e )