From: "Maciej W. Rozycki" <macro@linux-mips.org>
To: Richard Sandiford <rdsandiford@googlemail.com>
Cc: binutils@sourceware.org
Subject: [PATCH 1/5] MIPS/GAS: Fix o32 LD to the base register
Date: Sun, 31 Oct 2010 22:46:00 -0000 [thread overview]
Message-ID: <alpine.LFD.2.00.1010312127400.25426@eddie.linux-mips.org> (raw)
In-Reply-To: <alpine.LFD.2.00.1010181752570.15889@eddie.linux-mips.org>
On Mon, 18 Oct 2010, Maciej W. Rozycki wrote:
> > > Disassembly of section .text:
> > >
> > > 00000000 <.text>:
> > > 0: 00800821 move at,a0
> > > 4: 8c240000 lw a0,0(at)
> > > 8: 8c250004 lw a1,4(at)
> >
> > Why are you doing it this way, rather than reversing the loads?
>
> Because I've got a hole in my imagination here? :/
>
> > Seems a shame to use $at when we don't need to.
>
> Indeed, although we're no better elsewhere, consider e.g.:
>
> $ cat ld-base-1.s
> .comm foo, 1024
> ld $4, foo
> $ as -32 -o ld-base-1.o ld-base-1.s
> $ objdump -dr ld-base-1.o
>
> ld-base-1.o: file format elf32-tradbigmips
>
>
> Disassembly of section .text:
>
> 00000000 <.text>:
> 0: 3c010000 lui at,0x0
> 0: R_MIPS_HI16 foo
> 4: 8c240000 lw a0,0(at)
> 4: R_MIPS_LO16 foo
> 8: 8c250004 lw a1,4(at)
> 8: R_MIPS_LO16 foo
> c: 00000000 nop
>
> where $a1 could be used in place of $at, couldn't it?
So this has evolved into a mini-batch now too. I have verified changes
in this series with mips-linux, mips64-linux, mipstx39-elf, mipsisa64-elf
and mips-ecoff targets and their little-endian counterparts (including
binutils and LD tests too :) ).
These patches apply on top of the NewABI reloc LD/SD fix where
applicable.
2010-10-31 Maciej W. Rozycki <macro@linux-mips.org>
gas/
* config/tc-mips.c (macro)[M_LD_OB]: If the first load of the
pair would overwrite the base register, then swap the accesses.
OK?
binutils-2.20.51-20100925-mips-gas-ld-o-base.patch
Index: binutils-2.20.51/gas/config/tc-mips.c
===================================================================
--- binutils-2.20.51.orig/gas/config/tc-mips.c
+++ binutils-2.20.51/gas/config/tc-mips.c
@@ -7346,17 +7346,29 @@ macro (struct mips_cl_insn *ip)
case M_LD_OB:
s = HAVE_64BIT_GPRS ? "ld" : "lw";
+ off = 1;
+ /* If the first load would overwrite the base register,
+ then swap the accesses. */
+ if (!HAVE_64BIT_GPRS && treg == breg && breg != ZERO)
+ {
+ offset_expr.X_add_number += 4;
+ treg += 1;
+ off = -1;
+ }
goto sd_ob;
+
case M_SD_OB:
s = HAVE_64BIT_GPRS ? "sd" : "sw";
+ off = 1;
+
sd_ob:
macro_build (&offset_expr, s, "t,o(b)", treg,
-1, offset_reloc[0], offset_reloc[1], offset_reloc[2],
breg);
if (!HAVE_64BIT_GPRS)
{
- offset_expr.X_add_number += 4;
- macro_build (&offset_expr, s, "t,o(b)", treg + 1,
+ offset_expr.X_add_number += 4 * off;
+ macro_build (&offset_expr, s, "t,o(b)", treg + off,
-1, offset_reloc[0], offset_reloc[1], offset_reloc[2],
breg);
}
next prev parent reply other threads:[~2010-10-31 22:46 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-17 16:22 [PATCH 1/2] " Maciej W. Rozycki
2010-10-18 7:48 ` Richard Sandiford
2010-10-18 17:05 ` Maciej W. Rozycki
2010-10-31 22:46 ` Maciej W. Rozycki [this message]
2010-11-01 21:28 ` [PATCH 1/5] " Richard Sandiford
2010-11-01 21:34 ` Richard Sandiford
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.LFD.2.00.1010312127400.25426@eddie.linux-mips.org \
--to=macro@linux-mips.org \
--cc=binutils@sourceware.org \
--cc=rdsandiford@googlemail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).