http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53823
--- Comment #14 from dave.anglin at bell dot net 2012-07-31 22:54:59 UTC --- On 31-Jul-12, at 5:29 PM, rth at gcc dot gnu.org wrote: > How does this -O1 output compare with native? There seems to an off by one error in various shifts, etc. For example, ;(insn 8 4 10 (set (reg:SI 19 %r19 [104]) ; (lshiftrt:SI (reg:SI 24 %r24 [orig:100 y+4 ] [100]) ; (const_int 27 [0x1b]))) xxx.c:5 179 {lshrsi3} ; (nil)) extru %r24,4,5,%r19 ; 8 lshrsi3/2 [length = 4] With 4.6, I see something similar to what you see: ;(insn 8 62 10 (set (reg:SI 20 %r20 [104]) ; (lshiftrt:SI (reg:SI 24 %r24 [orig:136+4 ] [136]) ; (const_int 28 [0x1c]))) xxx.c:5 178 {lshrsi3} ; (nil)) extru %r24,3,4,%r20 ; 8 lshrsi3/2 [length = 4] -- John David Anglin dave.ang...@bell.net