aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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. */
{