* expmed.c (mask_rtx): Avoid undefined shifts for BITSIZE of 0.
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Fri, 18 Apr 2003 22:27:18 +0000 (22:27 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 18 Apr 2003 22:27:18 +0000 (18:27 -0400)
From-SVN: r65796

gcc/ChangeLog
gcc/expmed.c

index 0847ad9610ddfb7aed47d8c18e51d5a5205cb11c..3df6d2ccb3235840c4c641233817d03e02f3093b 100644 (file)
@@ -1,3 +1,7 @@
+2003-04-18  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * expmed.c (mask_rtx): Avoid undefined shifts for BITSIZE of 0.
+
 2003-04-18  Olivier Hainque <hainque@act-europe.fr>
 
        * calls.c (expand_call): Move special case for constructor calls
index 33d815280bf0c3bf0d32ece6f972bffd26387859..b48576bfc781a07a1a57b513072229c3709a6ab8 100644 (file)
@@ -1698,7 +1698,9 @@ mask_rtx (mode, bitpos, bitsize, complement)
 {
   HOST_WIDE_INT masklow, maskhigh;
 
-  if (bitpos < HOST_BITS_PER_WIDE_INT)
+  if (bitsize == 0)
+    masklow = 0;
+  else if (bitpos < HOST_BITS_PER_WIDE_INT)
     masklow = (HOST_WIDE_INT) -1 << bitpos;
   else
     masklow = 0;
@@ -1712,7 +1714,9 @@ mask_rtx (mode, bitpos, bitsize, complement)
   else
     maskhigh = (HOST_WIDE_INT) -1 << (bitpos - HOST_BITS_PER_WIDE_INT);
 
-  if (bitpos + bitsize > HOST_BITS_PER_WIDE_INT)
+  if (bitsize == 0)
+    maskhigh = 0;
+  else if (bitpos + bitsize > HOST_BITS_PER_WIDE_INT)
     maskhigh &= ((unsigned HOST_WIDE_INT) -1
                 >> (2 * HOST_BITS_PER_WIDE_INT - bitpos - bitsize));
   else