* config/tc-mips.c (macro_build_ldst_constoffset,load_register,macro):
authorThiemo Seufer <ths@networkno.de>
Wed, 1 Oct 2003 18:57:16 +0000 (18:57 +0000)
committerThiemo Seufer <ths@networkno.de>
Wed, 1 Oct 2003 18:57:16 +0000 (18:57 +0000)
Unbreak overflow checks.

gas/ChangeLog
gas/config/tc-mips.c

index 70396f5..0f4d6e9 100644 (file)
@@ -1,3 +1,8 @@
+2003-10-01  Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+       * config/tc-mips.c (macro_build_ldst_constoffset,load_register,macro):
+       Unbreak overflow checks.
+
 2003-10-01  Chris Demetriou  <cgd@broadcom.com>
 
        * config/tc-mips.c (s_cpreturn): Correct errors in comment.
index 644e76a..cd1b424 100644 (file)
@@ -3267,10 +3267,10 @@ macro_build_ldst_constoffset (char *place, int *counter, expressionS *ep,
   assert (ep->X_op == O_constant);
 
   /* Sign-extending 32-bit constants makes their handling easier.  */
-  if (! dbl)
+  if (! dbl && ! ((ep->X_add_number & ~((bfd_vma) 0x7fffffff))
+                 == ~((bfd_vma) 0x7fffffff)))
     {
-      if (ep->X_add_number & ~((bfd_vma) 0x7fffffff)
-         && ~(ep->X_add_number | 0x7fffffff))
+      if (ep->X_add_number & ~((bfd_vma) 0xffffffff))
        as_bad (_("too large constant specified"));
 
     ep->X_add_number = (((ep->X_add_number & 0xffffffff) ^ 0x80000000)
@@ -3431,10 +3431,10 @@ load_register (int *counter, int reg, expressionS *ep, int dbl)
       assert (ep->X_op == O_constant);
 
       /* Sign-extending 32-bit constants makes their handling easier.  */
-      if (! dbl)
+      if (! dbl && ! ((ep->X_add_number & ~((bfd_vma) 0x7fffffff))
+                     == ~((bfd_vma) 0x7fffffff)))
        {
-         if (ep->X_add_number & ~((bfd_vma) 0x7fffffff)
-             && ~(ep->X_add_number | 0x7fffffff))
+         if (ep->X_add_number & ~((bfd_vma) 0xffffffff))
            as_bad (_("too large constant specified"));
 
        ep->X_add_number = (((ep->X_add_number & 0xffffffff) ^ 0x80000000)
@@ -5941,10 +5941,11 @@ macro (struct mips_cl_insn *ip)
          described below.  */
       if ((! HAVE_64BIT_ADDRESSES
           && (! HAVE_64BIT_GPRS && offset_expr.X_op == O_constant))
-          && (offset_expr.X_op == O_constant))
+          && (offset_expr.X_op == O_constant)
+         && ! ((offset_expr.X_add_number & ~((bfd_vma) 0x7fffffff))
+               == ~((bfd_vma) 0x7fffffff)))
        {
-         if (offset_expr.X_add_number & ~((bfd_vma) 0x7fffffff)
-             && ~(offset_expr.X_add_number | 0x7fffffff))
+         if (offset_expr.X_add_number & ~((bfd_vma) 0xffffffff))
            as_bad (_("too large constant specified"));
 
        offset_expr.X_add_number = (((offset_expr.X_add_number & 0xffffffff)