From: Aleksey Demakov Date: Wed, 24 May 2006 18:56:32 +0000 (+0000) Subject: fix spill cost calculation problem X-Git-Tag: before.move.to.git~240 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=abd8f6c4e5c037e256ab60109346b51724ec7eac;p=francis%2Flibjit.git fix spill cost calculation problem --- diff --git a/ChangeLog b/ChangeLog index 9227aec..718623c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-05-25 Aleksey Demakov + + * jit/jit-reg-alloc.c (use_cheapest_register): fix cost calculation + that sometimes caused overlooking free registers. This was a serious + problem as there are some 'spill_before' rules that assume that the + allocator will always choose EAX as the first free register. + 2006-05-21 Aleksey Demakov * jit/jit-reg-alloc.h: add _JIT_REGS_FREE_DEST flag to be used in diff --git a/jit/jit-reg-alloc.c b/jit/jit-reg-alloc.c index cea4fe5..47f9011 100644 --- a/jit/jit-reg-alloc.c +++ b/jit/jit-reg-alloc.c @@ -2504,7 +2504,7 @@ use_cheapest_register(jit_gencode_t gen, _jit_regs_t *regs, int index, jit_regus } else { - cost = 10 + compute_spill_cost(gen, regs, reg, other_reg); + cost = compute_spill_cost(gen, regs, reg, other_reg); } if(cost < suitable_cost @@ -3562,6 +3562,7 @@ _jit_regs_init(_jit_regs_t *regs, int flags) regs->on_stack = (flags & _JIT_REGS_STACK) != 0; regs->x87_arith = (flags & _JIT_REGS_X87_ARITH) != 0; regs->reversible = (flags & _JIT_REGS_REVERSIBLE) != 0; + regs->free_dest = (flags & _JIT_REGS_FREE_DEST) != 0; regs->no_pop = 0; regs->reverse_dest = 0;