> -----Original Message-----
> From: Andre Vieira (lists) <andre.simoesdiasvie...@arm.com>
> Sent: 22 June 2020 09:52
> To: gcc-patches@gcc.gnu.org
> Cc: Kyrylo Tkachov <kyrylo.tkac...@arm.com>
> Subject: [PATCH][GCC][Arm] PR target/95646: Do not clobber callee saved
> registers with CMSE
> 
> Hi,
> 
> As reported in bugzilla when the -mcmse option is used while compiling
> for size (-Os) with a thumb-1 target the generated code will clear the
> registers r7-r10. These however are callee saved and should be preserved
> accross ABI boundaries. The reason this happens is because these
> registers are made "fixed" when optimising for size with Thumb-1 in a
> way to make sure they are not used, as pushing and popping hi-registers
> requires extra moves to and from LO_REGS.
> 
> To fix this, this patch uses 'callee_saved_reg_p', which accounts for
> this optimisation, instead of 'call_used_or_fixed_reg_p'. Be aware of
> 'callee_saved_reg_p''s definition, as it does still take call used
> registers into account, which aren't callee_saved in my opinion, so it
> is a rather misnoemer, works in our advantage here though as it does
> exactly what we need.
> 
> Regression tested on arm-none-eabi.
> 
> Is this OK for trunk? (Will eventually backport to previous versions if
> stable.)

Ok.
Thanks,
Kyrill

> 
> Cheers,
> Andre
> 
> gcc/ChangeLog:
> 2020-06-22  Andre Vieira  <andre.simoesdiasvie...@arm.com>
> 
>          PR target/95646
>          * config/arm/arm.c: (cmse_nonsecure_entry_clear_before_return):
> Use 'callee_saved_reg_p' instead of
>          'calL_used_or_fixed_reg_p'.
> 
> gcc/testsuite/ChangeLog:
> 2020-06-22  Andre Vieira  <andre.simoesdiasvie...@arm.com>
> 
>          PR target/95646
>          * gcc.target/arm/pr95646.c: New test.

Reply via email to