expmed.c (extract_bit_field): allow non-integral modes if we want to extract a whole...
authorDJ Delorie <dj@redhat.com>
Wed, 31 Jan 2001 19:05:49 +0000 (14:05 -0500)
committerDJ Delorie <dj@gcc.gnu.org>
Wed, 31 Jan 2001 19:05:49 +0000 (14:05 -0500)
* expmed.c (extract_bit_field): allow non-integral modes if we
want to extract a whole register from itself.

From-SVN: r39381

gcc/ChangeLog
gcc/expmed.c

index d82c6c99bcf9e759b00bcb8167a7a2ccd2bac66d..fb457a14a7f36c63f01cc4ab232c39a19615738c 100644 (file)
@@ -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
index 5a2e7f0131e9195bda56bf2137c3cccdebcc4156..6eb5f9ebfee3048b95e5142a1e19f4817919825f 100644 (file)
@@ -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.  */
   {