aboutsummaryrefslogtreecommitdiff
path: root/gcc/expmed.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2011-11-21 21:50:41 +0000
committerDavid S. Miller <davem@gcc.gnu.org>2011-11-21 13:50:41 -0800
commite57a3447f7117ade80869bbcfeb8f8abc3af346a (patch)
treec625bcca76b7a6bc131656dcf4a473913df5f6d1 /gcc/expmed.c
parent7fefb1d1a9dcad78452aaace6202f44091befd71 (diff)
downloadgcc-e57a3447f7117ade80869bbcfeb8f8abc3af346a.zip
gcc-e57a3447f7117ade80869bbcfeb8f8abc3af346a.tar.gz
gcc-e57a3447f7117ade80869bbcfeb8f8abc3af346a.tar.bz2
Revert regression causing changes to store_bit_field_1.
Revert 2011-11-16 Andreas Krebbel <Andreas.Krebbel@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. From-SVN: r181598
Diffstat (limited to 'gcc/expmed.c')
-rw-r--r--gcc/expmed.c15
1 files changed, 3 insertions, 12 deletions
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,