expmed.c (store_bit_field): Ignore adjustment to bitpos and use bitnum to decide...
authorRoman Zippel <zippel@linux-m68k.org>
Mon, 27 Aug 2001 22:43:37 +0000 (22:43 +0000)
committerRichard Henderson <rth@gcc.gnu.org>
Mon, 27 Aug 2001 22:43:37 +0000 (15:43 -0700)
        * expmed.c (store_bit_field): Ignore adjustment to bitpos
        and use bitnum to decide about register move.

From-SVN: r45215

gcc/ChangeLog
gcc/expmed.c

index 42e7883a94723e7b20acec47e3c4a24620201f37..3d64ee7950a33e44ba521fab4b0e7dfc9f3aaadb 100644 (file)
@@ -1,3 +1,8 @@
+2001-08-27  Roman Zippel  <zippel@linux-m68k.org>
+
+       * expmed.c (store_bit_field): Ignore adjustment to bitpos
+       and use bitnum to decide about register move.
+
 2001-08-27  Richard Henderson  <rth@redhat.com>
 
        * genattr.c (main): Emit state_t even when not doing scheduling.
index 7cbc8573f7d681b17ce02072f96d6ae7c5de6922..af5e56fdd7578abd510da286501bab42404de844 100644 (file)
@@ -350,14 +350,14 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size)
      done with a simple store.  For targets that support fast unaligned
      memory, any naturally sized, unit aligned field can be done directly.  */
      
-  if (bitsize == GET_MODE_BITSIZE (fieldmode)
+  if (bitnum == 0
+      && bitsize == GET_MODE_BITSIZE (fieldmode)
       && (GET_CODE (op0) != MEM
          ? (GET_MODE_SIZE (fieldmode) >= UNITS_PER_WORD
             || GET_MODE_SIZE (GET_MODE (op0)) == GET_MODE_SIZE (fieldmode))
          : (! SLOW_UNALIGNED_ACCESS (fieldmode, align)
             || (offset * BITS_PER_UNIT % bitsize == 0
-                && align % GET_MODE_BITSIZE (fieldmode) == 0)))
-      && (BYTES_BIG_ENDIAN ? bitpos + bitsize == unit : bitpos == 0))
+                && align % GET_MODE_BITSIZE (fieldmode) == 0))))
     {
       if (GET_MODE (op0) != fieldmode)
        {