Use unsigned shift instead of signed shift.
authorNick Clifton <nickc@cygnus.com>
Thu, 23 Sep 1999 14:58:54 +0000 (14:58 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Thu, 23 Sep 1999 14:58:54 +0000 (14:58 +0000)
From-SVN: r29621

gcc/ChangeLog
gcc/combine.c

index 4cec47e..aee30b9 100644 (file)
@@ -1,3 +1,8 @@
+Thu Sep 23 15:54:12 1999  Nick Clifton  <nickc@cygnus.com>
+
+       * combine.c (simplify_comparison): Use an unsigned shift to adjust
+       the constant.
+
 Thu Sep 23 08:46:21 1999  Guy Harris  <guy@netapp.com>
 
        * gcc.1: Fix a formatting error.
index 6c24caa..0e556db 100644 (file)
@@ -10362,8 +10362,12 @@ simplify_comparison (code, pop0, pop1)
                  & ~ (mask >> (INTVAL (XEXP (op0, 1))
                                + ! equality_comparison_p))) == 0)
            {
-             const_op >>= INTVAL (XEXP (op0, 1));
-             op1 = GEN_INT (const_op);
+             /* We must perform a logical shift, not an arithmetic one,
+                as we want the top N bits of C to be zero.  */
+             unsigned HOST_WIDE_INT temp = const_op;
+             
+             temp >>= INTVAL (XEXP (op0, 1));
+             op1 = GEN_INT (temp);
              op0 = XEXP (op0, 0);
              continue;
            }