bug in recent function.c change

David S. Miller davem@dm.cobaltmicro.com
Fri Oct 2 00:09:00 GMT 1998


   Date: Thu, 01 Oct 1998 19:51:15 -0600
   From: Jeffrey A Law <law@cygnus.com>

   This change:

 ...

   Is causing problems on the PA (and I suspect any other big endian machine).

Remove the BYTES_BIG_ENDIAN bits in the change, turns out that
store_bit_field and friends do this adjustment "for you".  I ran into
learning about this amidst my subreg hacks... Take a look:

  /* If OP0 is a register, BITPOS must count within a word.
     But as we have it, it counts within whatever size OP0 now has.
     On a bigendian machine, these are not the same, so convert.  */
  if (BYTES_BIG_ENDIAN
      && GET_CODE (op0) != MEM
      && unit > GET_MODE_BITSIZE (GET_MODE (op0)))
    bitpos += unit - GET_MODE_BITSIZE (GET_MODE (op0));

All of the bit store and extraction parts of the compiler have loads
of inconsistancies about endianness, sizes, units, etc. and I plan on
cleaning this up someday.

Later,
David S. Miller
davem@dm.cobaltmicro.com




More information about the Gcc-bugs mailing list