On Mon, 29 Jun 2020 at 10:56, Andre Vieira (lists)
<andre.simoesdiasvie...@arm.com> wrote:
>
>
> On 23/06/2020 21:52, Christophe Lyon wrote:
> > On Tue, 23 Jun 2020 at 15:28, Andre Vieira (lists)
> > <andre.simoesdiasvie...@arm.com> wrote:
> >> On 23/06/2020 13:10, Kyrylo Tkachov wrote:
> >>>> -----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
> >> As I was getting ready to push this I noticed I didn't add any skip-ifs
> >> to prevent this failing with specific target options. So here's a new
> >> version with those.
> >>
> >> Still OK?
> >>
> > Hi,
> >
> > This is not sufficient to skip arm-linux-gnueabi* configs built with
> > non-default cpu/fpu.
> >
> > For instance, with arm-linux-gnueabihf --with-cpu=cortex-a9
> > --with-fpu=neon-fp16 --with-float=hard
> > I see:
> > FAIL: gcc.target/arm/pr95646.c (test for excess errors)
> > Excess errors:
> > cc1: error: ARMv8-M Security Extensions incompatible with selected FPU
> > cc1: error: target CPU does not support ARM mode
> >
> > and the testcase is compiled with -mcpu=cortex-m23 -mcmse -Os
> Resending as I don't think my earlier one made it to the lists (sorry if
> you are receiving this double!)
>
> I'm not following this, before I go off and try to reproduce it, what do
> you mean by 'the testcase is compiled with -mcpu=cortex-m23 -mcmse -Os'?
> These are the options you are seeing in the log file? Surely they should
> override the default options? Only thing I can think of is this might
> need an extra -mfloat-abi=soft to make sure it overrides the default
> float-abi.  Could you give that a try?

No it doesn't make a difference alone.

I also had to add:
-mfpu=auto (that clears the above warning)
-mthumb otherwise we now get cc1: error: target CPU does not support ARM mode

Looks like some effective-target machinery is needed

Christophe


>
> Cheers,
> Andre
> >
> > Christophe
> >
> >> Cheers,
> >> Andre
> >>>> 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