gcc-2.95.1,2/i386 internal error--unrecognizable insn

Bernd Schmidt bernds@pathia.cygnus.co.uk
Tue Nov 30 23:59:00 GMT 1999


>   > 	* reload.c (push_reload): When selecting a register for
>   > 	reload_reg_rtx, make sure that all registers in a multi-reg
>   > 	hard register are OK to uye.
> This is OK.  Note it will need updating to apply to the mainline
> sources.

Err, I just noticed that the patch I sent was completely broken.  I'll
install the one below (which actually does what the ChangeLog entry claims it
does).

Bernd

Index: reload.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/reload.c,v
retrieving revision 1.90
diff -c -p -r1.90 reload.c
*** reload.c	1999/11/11 14:36:30	1.90
--- reload.c	1999/11/29 12:06:04
*************** push_reload (in, out, inloc, outloc, cla
*** 1460,1471 ****
  	    && GET_MODE_SIZE (inmode) <= GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
  	    && HARD_REGNO_MODE_OK (regno, inmode)
  	    && GET_MODE_SIZE (outmode) <= GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
! 	    && HARD_REGNO_MODE_OK (regno, outmode)
! 	    && TEST_HARD_REG_BIT (reg_class_contents[(int) class], regno)
! 	    && !fixed_regs[regno])
  	  {
! 	    rld[i].reg_rtx = gen_rtx_REG (inmode, regno);
! 	    break;
  	  }
      }
  
--- 1460,1480 ----
  	    && GET_MODE_SIZE (inmode) <= GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
  	    && HARD_REGNO_MODE_OK (regno, inmode)
  	    && GET_MODE_SIZE (outmode) <= GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
! 	    && HARD_REGNO_MODE_OK (regno, outmode))
  	  {
! 	    int offs;
! 	    int nregs = HARD_REGNO_NREGS (regno, inmode);
! 	    for (offs = 0; offs < nregs; offs++)
! 	      if (fixed_regs[regno + offs]
! 		  || ! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
! 					  regno + offs))
! 		break;
! 
! 	    if (offs == nregs)
! 	      {
! 		rld[i].reg_rtx = gen_rtx_REG (inmode, regno);
! 		break;
! 	      }
  	  }
      }
  



More information about the Gcc-patches mailing list