From: Aleksey Demakov Date: Sun, 12 Feb 2006 13:55:09 +0000 (+0000) Subject: Fixed JIT_OP_CALL_FINALLY X-Git-Tag: before.move.to.git~272 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=43444ac2d822b7e78fa2f76a50bbf6ec9b63ec95;p=francis%2Flibjit.git Fixed JIT_OP_CALL_FINALLY --- diff --git a/ChangeLog b/ChangeLog index bbe3135..2b1d0d8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,14 @@ +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 for a more precise liveness analyses - based on the control flow graph. + * jit/jit-cfg.h: initial code drop for a more precise liveness + analysis based on control flow graph. 2006-02-04 Aleksey Demakov diff --git a/jit/jit-rules-x86.sel b/jit/jit-rules-x86.sel index 75085fe..b56715f 100644 --- a/jit/jit-rules-x86.sel +++ b/jit/jit-rules-x86.sel @@ -1879,7 +1879,23 @@ JIT_OP_LEAVE_FINALLY: spill_before JIT_OP_CALL_FINALLY: spill_before [] -> { - inst = output_branch(func, inst, 0xE8 /* call */, insn); + jit_block_t block; + + block = jit_block_from_label(func, (jit_label_t)(insn->dest)); + if(!block) + { + return; + } + + if(block->address) + { + x86_call_code(inst, block->address); + } + else + { + x86_call_imm(inst, block->fixup_list); + block->fixup_list = (void *)(inst - 4); + } } JIT_OP_ENTER_FILTER: manual