Re: More questions about "asm volatile"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ingo Rohloff <Ingo.Rohloff@xxxxxxxxxxxxxx> writes:

> The document mentioned above says:
> "Similarly, you can't expect a sequence of volatile asm instructions to remain perfectly
> consecutive. If you want consecutive output, use a single asm."
>
> Does that mean that the order of "volatile asm" instructions might be swapped, or does this just
> mean that the different "volatile asm" instructions might be interspersed with other instructions ?

Different non-volatile asm instructions might be interspersed with
volatile asm instructions.

> If there is a guarantee that "volatile asm" instructions CANNOT be swapped, then I think the
> "Extended-Asm.html" document should state this.

The whole extended-asm section could use an intelligent rewrite.  This
is difficult.  Patches welcome.


> The document mentioned above says
> "Note that even a volatile asm instruction can be moved relative to other code, including across
> jump instructions. "
> and there are a number of old discussions about that behavior.
>
> Unfortunately neither the document above nor the discussions I have read make any statement if this
> just means that "volatile" has no meaning or if there are circumstances in which there still is SOME
> guarantee.
>
> What I am wondering in particular: If I have this code:
>
>
> extern volatile int *gPtr;
> void foo()
> {
>   int v;
>   v=*gPtr;
>   asm volatile ( <Something> );
>   *gPtr=5;
> }
>
> Is it possible that the "asm volatile" is swapped with the accesses to the "volatile" pointer, or
> does the "asm volatile" interact with "volatile" pointer accesses, so that it is guaranteed that a
> "asm volatile" will not be swapped with a "volatile" pointer access ?
> Of course I am interested in the general case: Is there a guarantee that "asm volatile" will stay in
> order with accesses to volatile pointers ?

A volatile asm is very much like a volatile load or store from memory.
They can not be interchanged.

Ian


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux