diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2005-01-20 17:36:02 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2005-01-20 17:36:02 +0000 |
commit | 711fefd61bc7b0f610e7b9fe4fcc0be5d991e60d (patch) | |
tree | fab1f8f98b8670fcafba8c310e79dd5665c50c7e | |
parent | dc8eb481d64d2820e4c7872733fe5d1e67a82f0d (diff) |
Backport from mainline.
* expmed.c (store_bit_field): Use simplify_gen_subreg instead
of gen_rtx_SUBREG directly.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/gcc-3_4-e500-branch@93968 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog.e500 | 7 | ||||
-rw-r--r-- | gcc/expmed.c | 19 |
2 files changed, 11 insertions, 15 deletions
diff --git a/gcc/ChangeLog.e500 b/gcc/ChangeLog.e500 index 1f4ebccfdff..a38feefccce 100644 --- a/gcc/ChangeLog.e500 +++ b/gcc/ChangeLog.e500 @@ -1,3 +1,10 @@ +2005-01-21 Aldy Hernandez <aldyh@redhat.com> + + Backport from mainline. + + * expmed.c (store_bit_field): Use simplify_gen_subreg instead + of gen_rtx_SUBREG directly. + 2005-01-20 Aldy Hernandez <aldyh@redhat.com> Backport from mainline. diff --git a/gcc/expmed.c b/gcc/expmed.c index 88db488feef..531a19c6fcb 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -391,22 +391,11 @@ store_bit_field (rtx str_rtx, unsigned HOST_WIDE_INT bitsize, { if (GET_MODE (op0) != fieldmode) { - if (GET_CODE (op0) == SUBREG) - { - if (GET_MODE (SUBREG_REG (op0)) == fieldmode - || GET_MODE_CLASS (fieldmode) == MODE_INT - || GET_MODE_CLASS (fieldmode) == MODE_PARTIAL_INT) - op0 = SUBREG_REG (op0); - else - /* 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. */ - abort (); - } - if (GET_CODE (op0) == REG) - op0 = gen_rtx_SUBREG (fieldmode, op0, byte_offset); + if (GET_CODE (op0) == MEM) + op0 = adjust_address (op0, fieldmode, offset); else - op0 = adjust_address (op0, fieldmode, offset); + op0 = simplify_gen_subreg (fieldmode, op0, GET_MODE (op0), + byte_offset); } emit_move_insn (op0, value); return value; |