]> git.unchartedbackwaters.co.uk Git - francis/libjit.git/commitdiff
fixed a bug with coalescing values on x87-register stack
authorAleksey Demakov <ademakov@gmail.com>
Wed, 1 Nov 2006 17:41:36 +0000 (17:41 +0000)
committerAleksey Demakov <ademakov@gmail.com>
Wed, 1 Nov 2006 17:41:36 +0000 (17:41 +0000)
ChangeLog
jit/jit-reg-alloc.c

index 7f686dcdba4d1bab30587eac280cd2ba4f62a53f..097092407cd7aaa7a873d3600476772d8b6b340e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+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
@@ -79,7 +85,7 @@
 
        * jit/jit-reg-alloc.h, jit/jit-reg-alloc.c:
        * tools/gen-rules-parser.y: add _JIT_REGS_CLOBBER_STACK flag and use
-       it in the code genearted for "only" rules instead of the explicit
+       it in the code generated for "only" rules instead of the explicit
        stack top check followed by the _jit_regs_spill_all() call.
 
 2006-09-02  Aleksey Demakov  <ademakov@gmail.com>
index 9bae2bfaf6b21483d083f21fea517f0cdada07e6..0d1b3b8de7b57f59b7d3dcaa81e2273fed232be2 100644 (file)
@@ -127,6 +127,10 @@ static void dump_regs(jit_gencode_t gen, const char *name)
                }
                putc('\n', stdout);
        }
+#ifdef JIT_REG_STACK
+       printf("stack_top: %d\n", gen->reg_stack_top);
+#endif
+       fflush(stdout);
 }
 #endif
 
@@ -2274,7 +2278,7 @@ commit_input_value(jit_gencode_t gen, _jit_regs_t *regs, int index)
        if(desc->copy)
        {
 #ifdef JIT_REG_STACK
-               if(IS_STACK_REG(desc->reg))
+               if(IS_STACK_REG(desc->reg) && !regs->copy)
                {
                        --(gen->reg_stack_top);
                }
@@ -2299,7 +2303,7 @@ commit_input_value(jit_gencode_t gen, _jit_regs_t *regs, int index)
                }
                unbind_value(gen, desc->value, reg, other_reg);
 #ifdef JIT_REG_STACK
-               if(IS_STACK_REG(reg))
+               if(IS_STACK_REG(reg) && !regs->copy)
                {
                        --(gen->reg_stack_top);
                }
@@ -2334,7 +2338,7 @@ commit_output_value(jit_gencode_t gen, _jit_regs_t *regs)
        }
 
 #ifdef JIT_REG_STACK
-       if(IS_STACK_REG(desc->reg))
+       if(IS_STACK_REG(desc->reg) && !regs->copy)
        {
                ++(gen->reg_stack_top);
        }