[U-Boot] Strange arm9 behaviour reading long(s) not aligned to 4 bytes boundary

Hi,
I have something like this on a 32 bit little endian arm9 board (SAM9 L9260):
char buffer[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
long A = * ( (long*) buffer ); long B = * ( (long*) (buffer + 2) );
printf("A: %08x B: %08x", A, B);
I would expect that A = 0x03020100 and B = 0x05040302 instead I get the right value for A but B is 0x01000302 or something like this but anyway not what I expect. Is there something wrong on the board? It seems that only 4 bytes aligned long are read correctly.
Thank you in advance, Antonio.

"dibacco@libero.it" dibacco@libero.it writes:
Hi,
I have something like this on a 32 bit little endian arm9 board (SAM9 L9260):
char buffer[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
long A = * ( (long*) buffer ); long B = * ( (long*) (buffer + 2) );
printf("A: %08x B: %08x", A, B);
I would expect that A = 0x03020100 and B = 0x05040302 instead I get the right value for A but B is 0x01000302 or something like this but anyway not what I expect. Is there something wrong on the board? It seems that only 4 bytes aligned long are read correctly.
ARM9 does not support unaligned load/store. Yours is apparently configured in the round-and-rotate mode.
participants (2)
-
dibacco@libero.it
-
Måns Rullgård