cudcv@warwick.ac.uk (Rob McMahon) (09/26/88)
GCC 1.28, Gould PN6000 When a pseudo-reg gets spilt to a stack slot, alter_reg now tries to re-use a slot which was previously allocated to the same hard reg. If the mode was different, though, this slot may have had an offset added by assign_stack_local, which won't be appropriate for the current mode. The result is a misaligned stack slot, and a core dump on big-endian machines that care about alignment. The offset could probably be adjusted, but I've just punted and stopped it reusing a stack slot allocated to a different mode. Around line 1069 in reload.c (alter_reg): if (from_reg == -1) x = assign_stack_local (GET_MODE (regno_reg_rtx[i]), PSEUDO_REGNO_BYTES (i)); => else if (spill_stack_slot[from_reg] != 0 => && GET_MODE (regno_reg_rtx[i]) => == GET_MODE (spill_stack_slot[from_reg])) x = spill_stack_slot[from_reg]; else spill_stack_slot[from_reg] = x = assign_stack_local (GET_MODE (regno_reg_rtx[i]), PSEUDO_REGNO_BYTES (i)); Rob -- UUCP: ...!mcvax!ukc!warwick!cudcv PHONE: +44 203 523037 JANET: cudcv@uk.ac.warwick ARPA: cudcv@warwick.ac.uk Rob McMahon, Computing Services, Warwick University, Coventry CV4 7AL, England