asm volatile("":::"memory) uncertainty.
Andrew Haley
aph@redhat.com
Tue May 10 16:05:00 GMT 2016
On 05/10/2016 04:58 PM, Tom Udale wrote:
> To my mind, the only reason that these would not be considered "memory
> references" is because the compiler has already decided to put the
> memory into registers (true these are mostly automatic variables so they
> can easily be put into registers). But from an abstract machine
> standpoint a=b is a memory read and a memory write is it not (or is that
> a totally incorrect statement)? It seems odd therefore that a register
> allocation choice can fundamentally alter program behavior.
An auto variable is only considered to be "memory" if its address
is taken with & . "memory" means that this object is reachable from
some pointer somewhere.
> It appears that the "memory" clobberer is operating at a level much
> lower than the C statement which means you _really_ need to be careful
> with it since what is memory and what is not could easily change with
> the addition or removal of reference (i.e. something that once was held
> in memory is not any longer because a removed reference made another
> variable be better suited to the stack allowing the one-time memory
> variable the better candidate for a register).
Not really. If a variable is not addressable by any means then it
can't be affected by a memory access. Whether the compiler spills
that variable to a stack frame makes no difference.
Andrew.
More information about the Gcc-help
mailing list