PR middle-end/51893
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 27 Mar 2012 20:50:16 +0000 (20:50 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 27 Mar 2012 20:50:16 +0000 (20:50 +0000)
* expmed.c (store_bit_field_1): Fix wordnum value for big-endian
targets.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@185897 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/expmed.c

index cc4f0cb..a7a7661 100644 (file)
@@ -1,3 +1,9 @@
+2012-03-27  Aurelien Buhrig  <aurelien.buhrig.gcc@gmail.com>
+
+       PR middle-end/51893
+       * expmed.c (store_bit_field_1): Fix wordnum value for big-endian
+       targets.
+
 2012-03-27  Oleg Endo  <olegendo@gcc.gnu.org>
 
        PR target/50751
index 54e51dc..5eea2ab 100644 (file)
@@ -550,7 +550,10 @@ store_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT bitsize,
        {
          /* If I is 0, use the low-order word in both field and target;
             if I is 1, use the next to lowest word; and so on.  */
-         unsigned int wordnum = (backwards ? nwords - i - 1 : i);
+         unsigned int wordnum = (backwards
+                                 ? GET_MODE_SIZE (fieldmode) / UNITS_PER_WORD
+                                 - i - 1
+                                 : i);
          unsigned int bit_offset = (backwards
                                     ? MAX ((int) bitsize - ((int) i + 1)
                                            * BITS_PER_WORD,