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