* ax-general.c (ax_const_l): Select proper opcode for the given
authorJim Blandy <jimb@codesourcery.com>
Sun, 7 Jan 2007 15:35:44 +0000 (15:35 +0000)
committerJim Blandy <jimb@codesourcery.com>
Sun, 7 Jan 2007 15:35:44 +0000 (15:35 +0000)
value.

gdb/ChangeLog
gdb/ax-general.c

index 25dac419421b8f586c48206ce61f3962b575043f..2fa60c1597b71e0a759c16a582942b23cb39c5a4 100644 (file)
@@ -1,3 +1,8 @@
+2007-01-07  Jim Blandy  <jimb@codesourcery.com>
+
+       * ax-general.c (ax_const_l): Select proper opcode for the given
+       value.
+
 2007-01-04  Vladimir Prus  <vladimir@codesourcery.com>
 
        * varobj.c (c_value_of_root): Don't select frame if variable
index c08272a3b7a5a042c5535923eff0e2ef940be809..8c1dfe1b68aeea2c0a7be5e1f9a604a7a923b1d2 100644 (file)
@@ -231,8 +231,12 @@ ax_const_l (struct agent_expr *x, LONGEST l)
      signed or unsigned; we always reproduce the value exactly, and
      use the shortest representation.  */
   for (op = 0, size = 8; size < 64; size *= 2, op++)
-    if (-((LONGEST) 1 << size) <= l && l < ((LONGEST) 1 << size))
-      break;
+    {
+      LONGEST lim = 1 << (size - 1);
+
+      if (-lim <= l && l <= lim - 1)
+        break;
+    }
 
   /* Emit the right opcode... */
   ax_simple (x, ops[op]);