This is the mail archive of the
mailing list for the GCC project.
Re: Can shrink-wrapping ever move prologue past an ASM statement?
- From: Richard Earnshaw <Richard dot Earnshaw at foss dot arm dot com>
- To: Jeff Law <law at redhat dot com>, Josh Poimboeuf <jpoimboe at redhat dot com>, Segher Boessenkool <segher at kernel dot crashing dot org>
- Cc: GCC Mailing List <gcc at gcc dot gnu dot org>, Vojtech Pavlik <vojtech at suse dot cz>
- Date: Fri, 10 Jul 2015 10:02:06 +0100
- Subject: Re: Can shrink-wrapping ever move prologue past an ASM statement?
- Authentication-results: sourceware.org; auth=none
- References: <20150707175349 dot GA2325 at virgil dot suse dot cz> <20150707184415 dot GB13004 at gate dot crashing dot org> <20150708092309 dot GB2325 at virgil dot suse dot cz> <20150708103631 dot GA23975 at gate dot crashing dot org> <20150708162234 dot GB4687 at treble dot redhat dot com> <20150708205111 dot GD4687 at treble dot redhat dot com> <559D92E0 dot 6030008 at redhat dot com>
On 08/07/15 22:15, Jeff Law wrote:
> On 07/08/2015 02:51 PM, Josh Poimboeuf wrote:
>> On Wed, Jul 08, 2015 at 11:22:34AM -0500, Josh Poimboeuf wrote:
>>> On Wed, Jul 08, 2015 at 05:36:31AM -0500, Segher Boessenkool wrote:
>>>> On Wed, Jul 08, 2015 at 11:23:09AM +0200, Martin Jambor wrote:
>>>>>> For other archs, e.g. x86-64, you can do
>>>>>> register void *sp asm("%sp");
>>>>>> asm volatile("call func" : "+r"(sp));
>> I've found that putting "sp" in the clobber list also seems to work:
>> asm volatile("call func" : : : "sp");
>> This syntax is nicer because it doesn't need a local variable associated
>> with the register. Do you see any issues with this approach?
> Given that SP isn't subject to register allocation, I'd expect it's
> fine. Note that some folks have (loudly) requested that GCC issue an
> error if an asm tries to clobber sp.
> The call doesn't actually clobber the stack pointer does it? ISTM that
> a use of sp makes more sense and is better "future proof'd" than
> clobbering sp.
This isn't going to reliably work for ARM or AArch64. If the only call
within a leaf function is via the ASM the compiler doesn't guarantee to
ensure the stack is aligned to the ABI requirements.