From 703f5e6e2825cc376fd1d69fb2e83b6e0e8a62a0 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 4 Aug 1997 21:00:37 +0000 Subject: [PATCH] * config/tc-mips.c (macro): Fix handling of a double load from a symbol plus an offset. This is the test case, with -mips1: l.d $f0,values+256 --- gas/ChangeLog | 3 +++ gas/config/tc-mips.c | 16 +++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 5b72f26e6b..1407355bf2 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,8 @@ Mon Aug 4 11:28:35 1997 Ian Lance Taylor + * 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. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 64c735074c..790a88616d 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -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)