* 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 2fc3cfe5b399909058cba5359fdfe3715022d11a..f57681c940548b3cfa5fe3b83bc289f1bc15d56c 100644 (file)
@@ -1,3 +1,8 @@
+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"
index 47f43b058b68c701468a99c606be9ae201367396..ba4480cb4ab6f9f33a6c0c9eb5db124ebe7de161 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;