This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH][arm] Avoid STRD with odd register for TARGET_ARM in output_move_double


Hi Christophe,

On 02/07/18 13:17, Christophe Lyon wrote:
On Fri, 29 Jun 2018 at 15:32, Kyrill Tkachov
<kyrylo.tkachov@foss.arm.com> wrote:
Hi all,

In this testcase the user forces an odd register as the starting reg for a DFmode value.
The output_move_double function tries to store that using an STRD instruction.
But for TARGET_ARM the starting register of an STRD must be an even one.
This is always the case with compiler-allocated registers for DFmode values, but the
inline assembly forced our hand here.

This patch  restricts the STRD-emitting logic in output_move_double to not avoid
odd-numbered source registers in STRD.
I'm not a fan of the whole function, we should be exposing a lot of the logic in there
to RTL rather than at the final output stage, but that would need to be fixed separately.

This patch is much safer for backporting purposes.

Bootstrapped and tested on arm-none-linux-gnueabihf.

Hi Kyrill,

I think you want to skip this test if one overrides -mfloat-abi, like
the small attached patch does.
OK?

Ok.
Thanks,
Kyrill


Thanks,

Christophe

Committing to trunk.
Thanks,
Kyrill

2018-06-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

      * config/arm/arm.c (output_move_double): Don't allow STRD instructions
      if starting source register is not even.

2018-06-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

      * gcc.target/arm/arm-soft-strd-even.c: New test.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]