]> git.unchartedbackwaters.co.uk Git - francis/libjit.git/commitdiff
Fixed JIT_OP_CALL_FINALLY
authorAleksey Demakov <ademakov@gmail.com>
Sun, 12 Feb 2006 13:55:09 +0000 (13:55 +0000)
committerAleksey Demakov <ademakov@gmail.com>
Sun, 12 Feb 2006 13:55:09 +0000 (13:55 +0000)
ChangeLog
jit/jit-rules-x86.sel

index bbe3135a2729788f4fc251272bc43069dc11b47a..2b1d0d8865a9f542059ef20ef15889f11b6fa23b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,10 +1,14 @@
+2006-02-12  Aleksey Demakov  <ademakov@gmail.com>
+
+       * jit/jit-rules-x86.sel: fix JIT_OP_CALL_FINALLY.
+
 2006-02-10  Aleksey Demakov  <ademakov@gmail.com>
 
        * 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  <ademakov@gmail.com>
 
index 75085fe021c9c761a039bcaf6e39f993eb969e7a..b56715f481e8ea6398ec6161b86451c7491997b6 100644 (file)
@@ -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