* config/tc-mips.c (macro): Fix handling of a double load from a
authorIan Lance Taylor <ian@airs.com>
Mon, 4 Aug 1997 21:00:37 +0000 (21:00 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 4 Aug 1997 21:00:37 +0000 (21:00 +0000)
symbol plus an offset.
This is the test case, with -mips1:
l.d $f0,values+256

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

index 5b72f26..1407355 100644 (file)
@@ -1,5 +1,8 @@
 Mon Aug  4 11:28:35 1997  Ian Lance Taylor  <ian@cygnus.com>
 
+       * config/tc-mips.c (macro): Fix handling of a double load from a
+       symbol plus an offset.
+
        * ecoff.c (ecoff_build_symbols): Set fMerge to 0 for an FDR which
        has an associated external symbol.
 
index 64c7350..790a886 100644 (file)
@@ -5295,9 +5295,19 @@ macro (ip)
                 subtract it out, and then subtract another 4 to make
                 the first reloc come out right.  The second reloc
                 will come out right because we are going to add 4 to
-                offset_expr when we build its instruction below.  */
-             offset_expr.X_add_number -= 8;
-             offset_expr.X_op = O_constant;
+                offset_expr when we build its instruction below.
+
+                If we have a symbol, then we don't want to include
+                the offset, because it will wind up being included
+                when we generate the reloc.  */
+
+             if (offset_expr.X_op == O_constant)
+               offset_expr.X_add_number -= 8;
+             else
+               {
+                 offset_expr.X_add_number = -4;
+                 offset_expr.X_op = O_constant;
+               }
            }
          macro_build_lui (p, &icnt, &offset_expr, AT);
          if (p != NULL)