+2008-07-06 Juan Jesus Garcia de Soria <juanj.g_soria@grupobbva.com>
+
+ * jit/jit-reg-alloc.c (choose_input_order): take into account global
+ registers to see if it is suitable to exchange input values. This
+ fixes a problem that took place when a commutative op is applied to
+ a value that resides in a global register and is both the dest and
+ the second source value of the op.
+
2008-05-30 Aleksey Demakov <ademakov@gmail.com>
* include/jit/jit-common.h: remove unused jit_function_compiled_t
{
if(regs->commutative)
{
+ /* This depends on choose_input_order()
+ doing its job on the next step. */
use_cost = 0;
}
else
{
if(regs->commutative)
{
+ /* This depends on choose_input_order()
+ doing its job on the next step. */
use_cost = 0;
}
#ifdef JIT_REG_STACK
else if(regs->reversible && regs->no_pop)
{
+ /* This depends on choose_input_order()
+ doing its job on the next step. */
use_cost = 0;
}
#endif
static void
choose_input_order(jit_gencode_t gen, _jit_regs_t *regs)
{
- if(regs->descs[2].value
- && regs->descs[2].value->in_register
- && regs->descs[2].value->reg == regs->descs[0].reg
- && regs->descs[2].value != regs->descs[1].value)
+ jit_value_t value;
+
+ value = regs->descs[2].value;
+ if(value && value != regs->descs[1].value
+ && ((value->in_register
+ && value->reg == regs->descs[0].reg)
+ || (value->in_global_register
+ && value->global_reg == regs->descs[0].reg)))
{
#ifdef JIT_REG_STACK
if(regs->reversible && regs->no_pop)