This is the mail archive of the
mailing list for the GCC project.
Re: Does GCC generate LDRD/STRD (Register) forms?
- From: "Bin.Cheng" <amker dot cheng at gmail dot com>
- To: "Anmol Paralkar (anmparal)" <anmparal at cisco dot com>
- Cc: "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Date: Tue, 7 Jul 2015 12:52:47 +0800
- Subject: Re: Does GCC generate LDRD/STRD (Register) forms?
- Authentication-results: sourceware.org; auth=none
- References: <D1C09E0B dot 6720%anmparal at cisco dot com>
On Tue, Jul 7, 2015 at 10:05 AM, Anmol Paralkar (anmparal)
> Does GCC generate LDRD/STRD (Register) forms [A8.8.74/A8.8.211 per ARMv7-A
> & ARMv7-R ARM]?
> Based on various attempts to write code to get GCC to generate a sample
> form, and subsequently inspecting the code I see in
> config/arm/arm.c/output_move_double () & arm.md [GCC 4.9.2], I think that
> these register based forms of LDRD/STRD are
> not generated, but I thought it might be a good idea to ask on the list,
> just in case.
Register based LDRD is harder than immediate version. ARM doesn't
support [base + reg + offset] addressing mode, so address computation
of the second memory reference is scattered both in and out of memory
reference. To identify such opportunities, one needs to trace
registers in address expression the memory access instruction and does
some kind of value computation and re-association.