+2007-10-07  Richard Sandiford  <rsandifo@nildram.co.uk>
+
+       * mips.igen (ll): Fix mask for WITH_TARGET_WORD_BITSIZE == 32.
+       (sc, swxc1): Likewise.  Also fix big-endian and reverse-endian
+       shifts for that case.
+
 2007-09-04  Nick Clifton  <nickc@redhat.com>
 
        * interp.c (options enum): Add OPTION_INFO_MEMORY.
 
          {
            unsigned64 memval = 0;
            unsigned64 memval1 = 0;
-           unsigned64 mask = 0x7;
+           unsigned64 mask = (WITH_TARGET_WORD_BITSIZE == 64 ? 0x7 : 0x3);
            unsigned int shift = 2;
            unsigned int reverse = (ReverseEndian ? (mask >> shift) : 0);
            unsigned int bigend = (BigEndianCPU ? (mask >> shift) : 0);
          {
            unsigned64 memval = 0;
            unsigned64 memval1 = 0;
-           unsigned64 mask = 0x7;
+           unsigned64 mask = (WITH_TARGET_WORD_BITSIZE == 64 ? 0x7 : 0x3);
+           address_word reverseendian = (ReverseEndian ? (mask ^ AccessLength_WORD) : 0);
+           address_word bigendiancpu = (BigEndianCPU ? (mask ^ AccessLength_WORD) : 0);
            unsigned int byte;
-           paddr = ((paddr & ~mask) | ((paddr & mask) ^ (ReverseEndian << 2)));
-           byte = ((vaddr & mask) ^ (BigEndianCPU << 2));
+           paddr = ((paddr & ~mask) | ((paddr & mask) ^ reverseendian));
+           byte = ((vaddr & mask) ^ bigendiancpu);
            memval = ((unsigned64) GPR[RT] << (8 * byte));
            if (LLBIT)
              {
     {
      unsigned64 memval = 0;
      unsigned64 memval1 = 0;
-     unsigned64 mask = 0x7;
+     unsigned64 mask = (WITH_TARGET_WORD_BITSIZE == 64 ? 0x7 : 0x3);
+     address_word reverseendian = (ReverseEndian ? (mask ^ AccessLength_WORD) : 0);
+     address_word bigendiancpu = (BigEndianCPU ? (mask ^ AccessLength_WORD) : 0);
      unsigned int byte;
-     paddr = ((paddr & ~mask) | ((paddr & mask) ^ (ReverseEndian << 2)));
-     byte = ((vaddr & mask) ^ (BigEndianCPU << 2));
+     paddr = ((paddr & ~mask) | ((paddr & mask) ^ reverseendian));
+     byte = ((vaddr & mask) ^ bigendiancpu);
      memval = (((unsigned64)COP_SW(1,FS)) << (8 * byte));
       {
        StoreMemory(uncached,AccessLength_WORD,memval,memval1,paddr,vaddr,isREAL);