aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2004-12-01 09:49:20 -0800
committerRichard Henderson <rth@gcc.gnu.org>2004-12-01 09:49:20 -0800
commitd7cf6dd66ad3c1ecb1164b7ef02c95e680fce0a8 (patch)
treeb0d33250e1630b94029b3d702918f400c955690e /gcc
parente56d74096083df15062ce006efa6c9ecd17dc2a9 (diff)
downloadgcc-d7cf6dd66ad3c1ecb1164b7ef02c95e680fce0a8.zip
gcc-d7cf6dd66ad3c1ecb1164b7ef02c95e680fce0a8.tar.gz
gcc-d7cf6dd66ad3c1ecb1164b7ef02c95e680fce0a8.tar.bz2
expmed.c (store_bit_field): Use simplify_gen_subreg instead of gen_rtx_SUBREG directly.
* expmed.c (store_bit_field): Use simplify_gen_subreg instead of gen_rtx_SUBREG directly. From-SVN: r91569
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/expmed.c18
2 files changed, 9 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6bd3d49..bae8a77 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-12-01 Richard Henderson <rth@redhat.com>
+
+ * expmed.c (store_bit_field): Use simplify_gen_subreg instead
+ of gen_rtx_SUBREG directly.
+
2004-12-01 David Edelsohn <edelsohn@gnu.org>
Nathan Sidwell <nathan@codesourcery.com>
diff --git a/gcc/expmed.c b/gcc/expmed.c
index 37d6768..fe0db06 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -431,21 +431,11 @@ store_bit_field (rtx str_rtx, unsigned HOST_WIDE_INT bitsize,
{
if (GET_MODE (op0) != fieldmode)
{
- if (GET_CODE (op0) == SUBREG)
- {
- /* Else we've got some float mode source being extracted
- into a different float mode destination -- this
- combination of subregs results in Severe Tire
- Damage. */
- gcc_assert (GET_MODE (SUBREG_REG (op0)) == fieldmode
- || GET_MODE_CLASS (fieldmode) == MODE_INT
- || GET_MODE_CLASS (fieldmode) == MODE_PARTIAL_INT);
- op0 = SUBREG_REG (op0);
- }
- if (REG_P (op0))
- op0 = gen_rtx_SUBREG (fieldmode, op0, byte_offset);
- else
+ if (MEM_P (op0))
op0 = adjust_address (op0, fieldmode, offset);
+ else
+ op0 = simplify_gen_subreg (fieldmode, op0, GET_MODE (op0),
+ byte_offset);
}
emit_move_insn (op0, value);
return value;