From 43444ac2d822b7e78fa2f76a50bbf6ec9b63ec95 Mon Sep 17 00:00:00 2001 From: Aleksey Demakov Date: Sun, 12 Feb 2006 13:55:09 +0000 Subject: [PATCH] Fixed JIT_OP_CALL_FINALLY --- ChangeLog | 8 ++++++-- jit/jit-rules-x86.sel | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) 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 -- 2.47.3