This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: basic asm and memory clobbers
- From: <Paul_Koning at Dell dot com>
- To: <dw at LimeGreenSocks dot com>
- Cc: <gcc at gcc dot gnu dot org>
- Date: Tue, 24 Nov 2015 16:58:20 +0000
- Subject: Re: basic asm and memory clobbers
- Authentication-results: sourceware.org; auth=none
- References: <564AC155 dot 4040601 at LimeGreenSocks dot com> <564B9CB1 dot 1060001 at redhat dot com> <564E762B dot 6070705 at LimeGreenSocks dot com> <564EF338 dot 4030703 at redhat dot com> <564EF7FF dot 1070107 at LimeGreenSocks dot com> <564F008B dot 8040703 at redhat dot com> <564F1436 dot 2060005 at LimeGreenSocks dot com> <564F1A7D dot 9050607 at redhat dot com> <20151120152039 dot GA15922 at gate dot crashing dot org> <564F3C6E dot 5010908 at redhat dot com> <20151120153431 dot GJ5675 at tucnak dot redhat dot com> <564F46CF dot 2030403 at redhat dot com> <564FB2ED dot 70803 at LimeGreenSocks dot com> <56506A03 dot 7030609 at LimeGreenSocks dot com> <5652E4A6 dot 9090905 at redhat dot com> <56537921 dot 9070809 at redhat dot com> <565386CA dot 8080005 at LimeGreenSocks dot com> <C080D84D-C192-46F6-BAE9-9E3B5A9F766C at dell dot com> <5653BFC5 dot 5080305 at LimeGreenSocks dot com>
> On Nov 23, 2015, at 8:39 PM, David Wohlferd <dw@LimeGreenSocks.com> wrote:
>
> On 11/23/2015 1:44 PM, Paul_Koning@Dell.com wrote:
>>> On Nov 23, 2015, at 4:36 PM, David Wohlferd <dw@LimeGreenSocks.com> wrote:
>>>
>>> ...
>>>> The more I think about it, I'm just not keen on forcing all those old-style asms to change.
>>> If you mean you aren't keen to change them to "clobber all," I'm with you. If you are worried about changing them from basic to extended, what kinds of problems do you foresee? I've been reading a lot of basic asm lately, and it seems to me that most of it would be fine with a simple colon. Certainly no worse than the current behavior.
>> I'm not sure. I have some asm("sync") which I think assume that this means asm("sync"::"memory")
>
> Another excellent reason to nudge people towards using extended asm. If you saw asm("sync":::"memory"), you would *know* what it did, without having to read the docs (which don't say anyway).
>
> I'm pretty confident that asm("") doesn't clobber memory on i386, but maybe that behavior is platform-specific. Since i386 doesn't have "sync", I assume you are on something else?
Yes, MIPS.
>
> If you have a chance to experiment, I'd love confirmation from other platforms that asm("blah") is the same as asm("blah":). Feel free to email me off list to discuss.
I'm really concerned with loosening the meaning of basic asm. I wish I could find the documentation that says, or implies, that it is a memory clobber. And/or that it is implicitly volatile.
The problem is that it's clear from existing code that this assumption was made, and that defining it otherwise would break such code. For example, the code I quoted clearly won't work if stores are moved across the asm("sync").
Given the ever improving optimizers, these things are time bombs -- code that worked for years might suddenly break when the compiler is upgraded.
If such breakage is to be done, it must at least come with a warning (which must default to ON). But I'd prefer to see the more conservative approach (more clobbers) taken.
paul