Hi Christophe,

On 02/07/18 13:17, Christophe Lyon wrote:
On Fri, 29 Jun 2018 at 15:32, Kyrill Tkachov
<kyrylo.tkac...@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.tkac...@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.tkac...@arm.com>

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

Reply via email to