This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: question regarding asm()


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])


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]