http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40893
paul walmsley <paul at pwsan dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |paul at pwsan dot com
--- Comment #2 from paul walmsley <paul at pwsan dot com> 2010-10-05 18:14:35
UTC ---
Here's a minimal test case:
void foo(unsigned int v)
{
*(volatile unsigned short *)0xabcdefab = (v);
}
arm-linux-gcc -O2 -march=armv7-a -c test.c; arm-linux-objdump -DS test.o
| less
00000000 <foo>:
0: e30e3fff movw r3, #61439 ; 0xefff
4: e34a3bcd movt r3, #43981 ; 0xabcd
8: e6ff0070 uxth r0, r0
c: e14305b4 strh r0, [r3, #-84]
10: e12fff1e bx lr
As David notes, the expected behavior is that the uxth should not be generated
for >= armv6 targets, and the two shifts should not be generated on < armv6
targets, as they should be superfluous.
http://marc.info/?l=linux-omap&m=128630215909798&w=2