As discussed on gcc.

Committed to trunk.

gcc/

        Revert
        2011-11-16  Andreas Krebbel  <andreas.kreb...@de.ibm.com>

        PR middle-end/50325
        * expmed.c (store_bit_field_1): Use extract_bit_field on big
        endian targets if the source cannot be exactly covered by word
        mode chunks.
---
 gcc/ChangeLog |   10 ++++++++++
 gcc/expmed.c  |   15 +++------------
 2 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index aea8611..854b00e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2011-11-21  David S. Miller  <da...@davemloft.net>
+
+       Revert
+       2011-11-16  Andreas Krebbel  <andreas.kreb...@de.ibm.com>
+
+       PR middle-end/50325
+       * expmed.c (store_bit_field_1): Use extract_bit_field on big
+       endian targets if the source cannot be exactly covered by word
+       mode chunks.
+
 2011-11-21  Jakub Jelinek  <ja...@redhat.com>
 
        PR debug/50827
diff --git a/gcc/expmed.c b/gcc/expmed.c
index ea42e9c..b3e6d6d 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -557,18 +557,9 @@ store_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT 
bitsize,
                                            0)
                                     : (int) i * BITS_PER_WORD);
          rtx value_word = operand_subword_force (value, wordnum, fieldmode);
-         unsigned HOST_WIDE_INT new_bitsize =
-           MIN (BITS_PER_WORD, bitsize - i * BITS_PER_WORD);
-
-         /* If the remaining chunk doesn't have full wordsize we have
-            to make sure that for big endian machines the higher order
-            bits are used.  */
-         if (new_bitsize < BITS_PER_WORD && BYTES_BIG_ENDIAN)
-           value_word = extract_bit_field (value_word, new_bitsize, 0,
-                                           true, false, NULL_RTX,
-                                           BLKmode, word_mode);
-
-         if (!store_bit_field_1 (op0, new_bitsize,
+
+         if (!store_bit_field_1 (op0, MIN (BITS_PER_WORD,
+                                           bitsize - i * BITS_PER_WORD),
                                  bitnum + bit_offset,
                                  bitregion_start, bitregion_end,
                                  word_mode,
-- 
1.7.6.401.g6a319

Reply via email to