Hi Alex,

> -----Original Message-----
> From: Alex Coplan <alex.cop...@arm.com>
> Sent: 15 May 2020 11:36
> To: gcc-patches@gcc.gnu.org
> Cc: nd <n...@arm.com>; ni...@redhat.com; Richard Earnshaw
> <richard.earns...@arm.com>; Ramana Radhakrishnan
> <ramana.radhakrish...@arm.com>; Kyrylo Tkachov
> <kyrylo.tkac...@arm.com>
> Subject: [PATCH] [arm] Don't generate invalid LDRD insns
> 
> Hello,
> 
> This patch fixes a bug in the arm backend where GCC generates invalid LDRD
> instructions. The LDRD instruction requires the first transfer register to be
> even, but GCC attempts to use odd registers here. For example, with the
> following C code:
> 
>     struct c {
>       double a;
>     } __attribute((aligned)) __attribute((packed));
>     struct c d;
>     struct c f(struct c);
>     void e() { f(d); }
> 
> The struct d is passed in registers r1 and r2 to the function f, and GCC
> attempts to do this with a LDRD instruction when compiling with -
> march=armv7-a
> on a soft float toolchain.
> 
> The fix is analogous to the corresponding one for STRD in the same function:
> https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=52057dc4ac5295caebf83147f6
> 88d769c93cbc8d
> 
> Testing:
>  - New unit tests which pass after applying the patch.
>  - Tested on an x64 -> arm-none-eabi cross.
>  - Bootstrapped and regtested on arm-none-linux-gnueabihf (in both thumb
> and arm
>    modes).
> 
> OK for master?

Ok.
Please apply for write-after-approval commit access to the repo by filling the 
form at:
https://sourceware.org/cgi-bin/pdw/ps_form.cgi
listing me as your sponsor.
You can then push the patch yourself.

Thanks,
Kyrill

> 
> Thanks,
> Alex
> 
> ---
> 
> gcc/ChangeLog:
> 
> 2020-05-15  Alex Coplan  <alex.cop...@arm.com>
>         * config/arm/arm.c (output_move_double): Fix codegen when loading
> into
>         a register pair with an odd base register.
> 
> gcc/testsuite/ChangeLog:
> 
> 2020-05-15  Alex Coplan  <alex.cop...@arm.com>
>         * gcc.c-torture/compile/packed-aligned-1.c: New test.
>         * gcc.c-torture/execute/packed-aligned.c: New test.

Reply via email to