
On Fri, Jan 21, 2011 at 9:50 AM, Wolfgang Denk wd@denx.de wrote:
Dear Tom Warren,
In message AANLkTimcTq74=jz0HJcMSUMYe3Tf2zeUY9R9f7QVtVBV@mail.gmail.com you wrote:
I'll take a look at the ARM asm code generated, but you are probably right. But shouldn't the compiler have complained if I wasn't passing the struct address?
I'm surprised about this, too. But then, current mainline code still has the horrible "(*(volatile unsigned int *)(a) = (v))" definition, so the cast will eat all potential warnings :-(
Yes, I noticed this with x86 - I can do something like the following without the compiler warning me:
typdef struct blah { u32 foo; u16 bar; } blah_t;
blah_t *fred = 0x00001000;
writel(1, &fred->foo); writel(1, &fred->bar); writew(1, &fred->foo); writew(1, &fred->bar);
This is particularly nasty with the sc520's Memory Mapped Control Registers - I have found a few here and there where longs were being written to words and visa-versa
Regards,
Graeme