aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2001-01-31 14:05:49 -0500
committerDJ Delorie <dj@gcc.gnu.org>2001-01-31 14:05:49 -0500
commitaac280fbf0443390d32f7e29f8085e9902a95aa7 (patch)
tree3b31354684a89f542ccdbbd80b48703981355637
parentce662d4c92d5a0fd86a4ea80e91ca58db778b7ee (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/expmed.c9
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. */
{