From: Aleksey Demakov Date: Fri, 18 Aug 2006 18:14:27 +0000 (+0000) Subject: fix a problem with the clobber flag being ignored X-Git-Tag: before.move.to.git~213 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=02b95ffc5eb96b220d5b45633116b9e9eb5f6ffb;p=francis%2Flibjit.git fix a problem with the clobber flag being ignored --- diff --git a/ChangeLog b/ChangeLog index ccee029..d12e494 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-08-19 Aleksey Demakov + + * jit/jit-reg-alloc.c (set_regdesc_flags): fix a problem with the + clobber flag being ignored. The problem was introduced by the patch + from 2006-06-17. + 2006-08-15 Thomas Cort * jit/jit-rules-alpha.c jit/jit-rules-alpha.h jit/jit-rules-alpha.ins Add a TODO() macro to print unimplemented warnings. Fix some diff --git a/jit/jit-reg-alloc.c b/jit/jit-reg-alloc.c index d14ead4..8ea4219 100644 --- a/jit/jit-reg-alloc.c +++ b/jit/jit-reg-alloc.c @@ -2165,8 +2165,8 @@ static int set_regdesc_flags(jit_gencode_t gen, _jit_regs_t *regs, int index) { _jit_regdesc_t *desc; - int reg, other_reg; - int clobber, stack_start; + int reg, other_reg, stack_start; + int clobber, clobber_input; #ifdef JIT_REG_DEBUG printf("set_regdesc_flags(index = %d)\n", index); @@ -2199,6 +2199,18 @@ set_regdesc_flags(jit_gencode_t gen, _jit_regs_t *regs, int index) /* See if the value clobbers the register it is assigned to. */ clobber = clobbers_register(gen, regs, index, desc->reg, desc->other_reg); + if(jit_reg_is_used(regs->clobber, desc->reg)) + { + clobber_input = 1; + } + else if(desc->other_reg >= 0 && jit_reg_is_used(regs->clobber, desc->other_reg)) + { + clobber_input = 1; + } + else + { + clobber_input = (clobber & CLOBBER_INPUT_VALUE) != 0; + } if((clobber & CLOBBER_REG) != 0) { jit_reg_set_used(regs->clobber, desc->reg); @@ -2235,7 +2247,7 @@ set_regdesc_flags(jit_gencode_t gen, _jit_regs_t *regs, int index) { if(desc->value != regs->descs[0].value) { - clobber |= CLOBBER_INPUT_VALUE; + clobber_input = 1; } } } @@ -2305,7 +2317,7 @@ set_regdesc_flags(jit_gencode_t gen, _jit_regs_t *regs, int index) { if(desc->used) { - if(!desc->copy && (clobber & CLOBBER_INPUT_VALUE) != 0) + if(!desc->copy && clobber_input) { desc->save = 1; desc->kill = 1; @@ -2324,7 +2336,7 @@ set_regdesc_flags(jit_gencode_t gen, _jit_regs_t *regs, int index) { if(desc->used) { - if((clobber & CLOBBER_INPUT_VALUE) != 0) + if(clobber_input) { desc->kill = 1; }