diff options
author | DJ Delorie <dj@redhat.com> | 2001-01-31 14:05:49 -0500 |
---|---|---|
committer | DJ Delorie <dj@gcc.gnu.org> | 2001-01-31 14:05:49 -0500 |
commit | aac280fbf0443390d32f7e29f8085e9902a95aa7 (patch) | |
tree | 3b31354684a89f542ccdbbd80b48703981355637 | |
parent | ce662d4c92d5a0fd86a4ea80e91ca58db778b7ee (diff) | |
download | gcc-aac280fbf0443390d32f7e29f8085e9902a95aa7.zip gcc-aac280fbf0443390d32f7e29f8085e9902a95aa7.tar.gz gcc-aac280fbf0443390d32f7e29f8085e9902a95aa7.tar.bz2 |
expmed.c (extract_bit_field): allow non-integral modes if we want to extract a whole register from itself.
* expmed.c (extract_bit_field): allow non-integral modes if we
want to extract a whole register from itself.
From-SVN: r39381
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/expmed.c | 9 |
2 files changed, 14 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d82c6c9..fb457a1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-12-31 DJ Delorie <dj@redhat.com> + + * expmed.c (extract_bit_field): allow non-integral modes if we + want to extract a whole register from itself. + 2001-01-31 Jakub Jelinek <jakub@redhat.com> * c-typeck.c (set_init_index): If first is equal to last, assume as diff --git a/gcc/expmed.c b/gcc/expmed.c index 5a2e7f0..6eb5f9e 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -1027,6 +1027,15 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp, op0 = SUBREG_REG (op0); } + if (GET_CODE (op0) == REG + && mode == GET_MODE (op0) + && bitnum == 0 + && bitsize == GET_MODE_BITSIZE (GET_MODE (op0))) + { + /* We're trying to extract a full register from itself. */ + return op0; + } + /* Make sure we are playing with integral modes. Pun with subregs if we aren't. */ { |