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