This is the mail archive of the gcc-help@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: asm volatile statement reordering


On 17/10/17 12:20, David Brown wrote:
I am trying to establish exactly what gcc does, and what guarantees it
may or may not give.  Based on that, I can see if current solutions in
source code are strong enough, or if they need workarounds, and if I
should be filing an enhancement request.

I disagree.  If you want a bunch of asms to execute in a particular
order, add a memory clobber or some dependencies.  It's not difficult
once you have the understanding.  In this particular case, fixing it
is trivial, and there are many ways to do it.

I understand about dependencies.  (I also know about memory clobbers,
but these tend to be a fairly blunt instrument and can lead to wasted
cpu cycles, especially on RISC cpus with lots of registers.  When you
are dealing with things like critical sections with interrupts disabled,
you are often trying to minimise the cycle time.)  My solution to this
particular ordering problem is:
I performed a simple test on x86_64.  With -O GCC kept "status" in
register.  The clobber just tells GCC there is a dependency and won't
slow down the program.
The cost of memory clobbers only appears when you have data that could
have been kept in registers, but is forced out (with extra loads and/or
extra stores) due to the clobber.  You don't see it on simple tests, and
you get it much more often on devices with more registers.


Would something similar to the thread fence semantics (acquire, release, etc.) of the C11/C++11 atomics for inline asm statements help?

--
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.


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