hard_regno_nregs == 0 ?
Jim Wilson
wilson@specifix.com
Wed Jan 9 19:27:00 GMT 2008
DJ Delorie wrote:
> Which assumption is wrong? That hard_regno_nregs can be zero (m32c),
> or that hard_regno_nregs will never be zero (rtlanal)?
I would say the m32c port is wrong. HARD_REGNO_MODE_OK indicates
whether a register can hold a mode. HARD_REGNO_NREGS indicates how many
registers we need to hold a value. This is a number that can be larger
than 1 if the value is larger than one register, but it makes no sense
for it to be zero, as no (non-void) value can ever be held in zero
registers. The number of registers needed is irrespective of whether
the register can actually hold the value, as that is specified by
HARD_REGNO_MODE_OK. There are lots of places that use HARD_REGNO_NREGS
in division/modulus operations. It would be complicated to fix them all
to handle a zero value.
However, as Ian mentioned, there does seem to be something else wrong
here, as it seems odd that you have an invalid subreg being passed in here.
--
Jim Wilson, GNU Tools Support, http://www.specifix.com
More information about the Gcc
mailing list