This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: question regarding asm()
- To: crux at Pool dot Informatik dot RWTH-Aachen dot DE
- Subject: Re: question regarding asm()
- From: chris at lslsun dot epfl dot ch (Christian Iseli)
- Date: Tue, 9 Dec 1997 16:27:50 +0100
- Cc: meissner at cygnus dot com, law at cygnus dot com, rth at cygnus dot com, pcg at goof dot com, egcs at cygnus dot com
Hello again...
I see one of your reload patches got into the latest snapshot... great!
I twiddled a little bit the other one (dated August 21...) and applied
it as well. I still had some cases where the compiler stopped saying
"fixed or forbidden register was spilled...". So I whipped up the
following kludge and now my test cases seem to compile fine (and run
fine too... :-)
Do you see anything blatantly wrong with this fix to your patch?
Thanks for your feedback,
Christian
*** reload1.c.orig Tue Dec 9 14:27:30 1997
--- reload1.c Tue Dec 9 15:47:06 1997
*************** order_regs_for_reload (chain, global)
*** 1550,1563 ****
hard_reg_n_uses[i].regno = i;
hard_reg_n_uses[i].uses = 0;
! if (fixed_regs[i] || i == HARD_FRAME_POINTER_REGNUM)
{
SET_HARD_REG_BIT (bad_spill_regs, i);
continue;
}
regno = chain->inverse_renum_before[i];
! if (regno < 0)
SET_HARD_REG_BIT (bad_spill_regs, i);
else if (regno > 0 && ! REGNO_REG_SET_P (spilled_pseudos, regno))
{
--- 1550,1566 ----
hard_reg_n_uses[i].regno = i;
hard_reg_n_uses[i].uses = 0;
! if (fixed_regs[i]
! || (i == HARD_FRAME_POINTER_REGNUM
! && (!SMALL_REGISTER_CLASSES
! || frame_pointer_needed)))
{
SET_HARD_REG_BIT (bad_spill_regs, i);
continue;
}
regno = chain->inverse_renum_before[i];
! if (regno < 0 && !SMALL_REGISTER_CLASSES)
SET_HARD_REG_BIT (bad_spill_regs, i);
else if (regno > 0 && ! REGNO_REG_SET_P (spilled_pseudos, regno))
{
*************** order_regs_for_reload (chain, global)
*** 1571,1577 ****
}
regno = chain->inverse_renum_after[i];
! if (regno < 0)
SET_HARD_REG_BIT (bad_spill_regs, i);
else if (regno > 0 && ! REGNO_REG_SET_P (spilled_pseudos, regno)
&& regno != chain->inverse_renum_before[i])
--- 1574,1580 ----
}
regno = chain->inverse_renum_after[i];
! if (regno < 0 && !SMALL_REGISTER_CLASSES)
SET_HARD_REG_BIT (bad_spill_regs, i);
else if (regno > 0 && ! REGNO_REG_SET_P (spilled_pseudos, regno)
&& regno != chain->inverse_renum_before[i])