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]

Re: basic asm and memory clobbers - Proposed solution


On 11/12/15 22:18, David Wohlferd wrote:

> And here are the three solutions that have been proposed:
> 
> Solution 1:
> Just document the current behavior of basic asm.
> 
> People who have written incorrect code can be pointed at the text and 
> told to fix their code.  People whose code is damaged by optimizations 
> can rewrite using extended to add dependencies (possibly doc this?).
> 
> Solution 2:
> Change the docs to say that basic asm clobbers everything (memory, all 
> registers, etc) or perhaps just memory (some debate here), but that due 
> to bugs that will eventually be addressed, it doesn't currently work 
> this way. 

It's not just bugs which make clobbering all registers unwise and/or
impossible.

> Eventually (presumably in a future phase 1) modify the code to
> implement this.
> 
> People who have written their code incorrectly may have some 
> hard-to-find problems solved for them.  This is particularly valuable 
> for projects that are no longer being maintained.  And while clobbers 
> aren't the best solution to dependencies, they can help.
> 
> Solution 3:
> Deprecate (and eventually disallow) the use of basic asm within 
> functions (perhaps excluding asm("") and naked functions).  Do this by 
> emitting warnings (and eventually fatal errors).  Doc this plan.

You've missed the most practical solution, which meets most common
usage: clobber memory, but not registers.  That allows most of the
effects that people intuitively want and expect, but avoids the
breakage of register clobbers.  It allows basic asm to be used in a
sensible way by pushing and popping all used registers.

Andrew.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]