Patchwork Revert regression causing changes to store_bit_field_1.

login
register
mail settings
Submitter David Miller
Date Nov. 21, 2011, 9:51 p.m.
Message ID <20111121.165134.269509835993417731.davem@davemloft.net>
Download mbox | patch
Permalink /patch/126949/
State New
Headers show

Comments

David Miller - Nov. 21, 2011, 9:51 p.m.
As discussed on gcc.

Committed to trunk.

gcc/

	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.
---
 gcc/ChangeLog |   10 ++++++++++
 gcc/expmed.c  |   15 +++------------
 2 files changed, 13 insertions(+), 12 deletions(-)

Patch

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  <davem@davemloft.net>
+
+	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.
+
 2011-11-21  Jakub Jelinek  <jakub@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,