diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2005-01-20 16:18:02 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2005-01-20 16:18:02 +0000 |
commit | dc8eb481d64d2820e4c7872733fe5d1e67a82f0d (patch) | |
tree | b132a8edb86a9ae98a97bd176c34214de7d574c5 | |
parent | 62734ea608c57df4c705f00c7f2b04d54d8a8481 (diff) |
* expmed.c (extract_bit_field): When extracting from non-integer mode,
force a SUBREG into a register because we may be taking a further
SUBREG of it.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/gcc-3_4-e500-branch@93962 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog.e500 | 10 | ||||
-rw-r--r-- | gcc/expmed.c | 12 |
2 files changed, 16 insertions, 6 deletions
diff --git a/gcc/ChangeLog.e500 b/gcc/ChangeLog.e500 index 4418e57bcb5..1f4ebccfdff 100644 --- a/gcc/ChangeLog.e500 +++ b/gcc/ChangeLog.e500 @@ -1,3 +1,13 @@ +2005-01-20 Aldy Hernandez <aldyh@redhat.com> + + Backport from mainline. + + 2004-11-26 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * expmed.c (extract_bit_field): When extracting from non-integer mode, + force a SUBREG into a register because we may be taking a further + SUBREG of it. + 2005-01-19 Aldy Hernandez <aldyh@redhat.com> Backport from mainline. diff --git a/gcc/expmed.c b/gcc/expmed.c index b4ae0ab1463..88db488feef 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -1145,12 +1145,12 @@ extract_bit_field (rtx str_rtx, unsigned HOST_WIDE_INT bitsize, enum machine_mode imode = int_mode_for_mode (GET_MODE (op0)); if (imode != GET_MODE (op0)) { - if (GET_CODE (op0) == MEM) - op0 = adjust_address (op0, imode, 0); - else if (imode != BLKmode) - op0 = gen_lowpart (imode, op0); - else - abort (); + op0 = gen_lowpart (imode, op0); + + /* If we got a SUBREG, force it into a register since we aren't going + to be able to do another SUBREG on it. */ + if (GET_CODE (op0) == SUBREG) + op0 = force_reg (imode, op0); } } |