sim/mips/
authorRichard Sandiford <rdsandiford@googlemail.com>
Sun, 7 Oct 2007 09:04:43 +0000 (09:04 +0000)
committerRichard Sandiford <rdsandiford@googlemail.com>
Sun, 7 Oct 2007 09:04:43 +0000 (09:04 +0000)
* 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.

sim/mips/ChangeLog
sim/mips/mips.igen

index 1797b99..d6d9784 100644 (file)
@@ -1,3 +1,9 @@
+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.
index 0589ac7..fb5d562 100644 (file)
          {
            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);