* config/tc-mips.c (macro): Shift the 32-bit address range
authorMaciej W. Rozycki <macro@linux-mips.org>
Tue, 9 Jul 2002 00:42:57 +0000 (00:42 +0000)
committerMaciej W. Rozycki <macro@linux-mips.org>
Tue, 9 Jul 2002 00:42:57 +0000 (00:42 +0000)
accessible with a lone "lui" down by 32768.

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

index 2fc3cfe..f57681c 100644 (file)
@@ -1,5 +1,10 @@
 2002-07-08  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
 
+       * config/tc-mips.c (macro): Shift the 32-bit address range
+       accessible with a lone "lui" down by 32768.
+
+2002-07-08  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
+
        * config/tc-mips.c (load_address): Use non-trapping "daddu"
        instead of "dadd" in address calculations.
        (macro): Likewise.
index 47f43b0..ba4480c 100644 (file)
@@ -5497,13 +5497,15 @@ macro (ip)
             If we have 64-bit addresses, as an optimization, for
             addresses which are 32-bit constants (e.g. kseg0/kseg1
             addresses) we fall back to the 32-bit address generation
-            mechanism since it is more efficient.  This code should
+            mechanism since it is more efficient.  Note that due to
+            the signed offset used by memory operations, the 32-bit
+            range is shifted down by 32768 here.  This code should
             probably attempt to generate 64-bit constants more
             efficiently in general.
           */
          if (HAVE_64BIT_ADDRESSES
              && !(offset_expr.X_op == O_constant
-                  && IS_SEXT_32BIT_NUM (offset_expr.X_add_number)))
+                  && IS_SEXT_32BIT_NUM (offset_expr.X_add_number + 0x8000)))
            {
              p = NULL;