[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [avr-gcc-list] Avr-libc-user-manual: "Problems with reordering code"
From: |
Georg-Johann Lay |
Subject: |
Re: [avr-gcc-list] Avr-libc-user-manual: "Problems with reordering code" |
Date: |
Thu, 08 Dec 2016 21:46:40 +0100 |
User-agent: |
Thunderbird 2.0.0.24 (Windows/20100228) |
Marcin Godlewski schrieb:
Dear all,
Thanks for the reply to David. However I'm not trying to find a solution for
the described issue. What I'm trying to say in this e-mail is that this part of
Atmel documentation:
http://www.atmel.com/webdoc/AVRLibcReferenceManual/optimization_1optim_code_reorder.html
is innacurate and should be corrected. The conclusion says:
memory barriers ensure proper ordering of volatile accesses
memory barriers don't ensure statements with no volatile accesses to be reordered across the barrier
while it should say:
memory barriers ensure proper ordering of global variables accesses
memory barriers don't ensure local variables accesses to be reordered
across the barrier
At least the "local" vs. "global" is not completely correct. After
all it's about memory accesses, and it doesn't matter if the memory
is local (e.g. local static) or if you are dereferencing a pointer
(which might point to a local auto or to an object on heap).
The code example you quoted above is actually due to a subtle
implementation detail of division, modulo and some other arithmetic
of GCC's avr backend (the division is _not_ a call actually).
IIRC the solution for me back then was -fno-tree-ter as any messing
with inline asm doesn't hit the point.
Johann
I don't know whether this group is the right place to post it however I do not
know any better place. Hope someone here can trigger the change of the
documentation and I also hope to be corrected if I am wrong.
Thanks and regards,
Marcin