Thread (17 messages) 17 messages, 7 authors, 2011-04-28

ARM unaligned MMIO access with attribute((packed))

From: davem@davemloft.net (David Miller)
Date: 2011-02-02 21:37:57
Also in: lkml

From: Russell King - ARM Linux <redacted>
Date: Wed, 2 Feb 2011 16:37:02 +0000
1. there's no way to tell GCC that the inline assembly is a load
   instruction and therefore it needs to schedule the following
   instructions appropriately.
Just add a dummy '"m" (pointer)' asm input argument to the inline asm
statement.  Just make sure "typeof(pointer)" has a size matching the
size of the load your are performing.
2. GCC will needlessly reload pointers from structures and other such
   behaviour because it can't be told clearly what the inline assembly
   is doing, so the inline asm needs to have a "memory" clobber.
This behavior is correct, and in fact needed.  Writing to chip registers
can trigger changes to arbitrary main memory locations.
3. It seems to misses out using the pre-index addressing, prefering to
   create add/sub instructions prior to each inline assembly load/store.
Yes, this is indeed a problem.

But you really need that memory clobber there whether you like it or
not, see above.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help