This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 11/15/2015 06:23 PM, David Wohlferd wrote:
I'd disagree. A traditional asm has to be considered an opaque blob that read/write/clobber any register or memory location.On 11/9/2015 1:32 AM, Segher Boessenkool wrote:On Sun, Nov 08, 2015 at 04:10:01PM -0800, David Wohlferd wrote:It seems like a doc update is what is needed to close PR24414 (Old-style asms don't clobber memory).What is needed to close the bug is to make the compiler work properly.The question of course is, what does 'properly' mean? My assertion is that 10 years on, 'properly' means whatever it's doing now. Changing it at this point will probably break more than it fixes, and (as you said) there is a plausible work-around using extended asm. So while this bug could be resolved as 'invalid' (since the compiler is behaving 'properly'), I'm thinking to split the difference and 'fix' it with a doc patch that describes the supported behavior.
It's also the case that assuming an old style asm can read or clobber any memory location is the safe, conservative thing to do. So the right thing in my mind is to ensure that behaviour and document it.
Andrew's logic is just plain wrong in that BZ.
Having an traditional asm clobber memory should not break user code. It may pessimize it slightly, but if it does, that code was already broken.Whether that means clobbering memory or not, I don't much care -- with the status quo, if you want your asm to clobber memory you have to use extended asm; if basic asm is made to clobber memory, if you want your asm to *not* clobber memory you have to use extended asm (which you can with no operands by writing e.g. asm("bork" : ); ). So both behaviours are available whether we make a change or not. But changing things now will likely break user code.
(dot space space).+Basic @code{asm} statements are not treated as though they used a "memory" +clobber, although they do implicitly perform a clobber of the flags +(@pxref{Clobbers}).They do not clobber the flags. Observe:Ouch. i386 shows the same thing for basic asm.
Sadly, I suspect this isn't consistent across targets. Jeff
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |