http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48696
--- Comment #5 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-04-20 12:15:14 UTC --- (In reply to comment #4) > (In reply to comment #3) > > So something changed between 4.0.3 and 4.0.4? Or maybe a typo? > > I only have 32bit compilers for both and see, for 4.0.3: > > show_bug: > pushl %ebp > movl %esp, %ebp > movl 8(%ebp), %edx > movl (%edx), %eax > andl $-64, %eax > movl %eax, (%edx) > shrl $6, %eax > popl %ebp > movzwl %ax, %eax > ret > > and for 4.0.4: > > show_bug: > pushl %ebp > movl %esp, %ebp > movl 8(%ebp), %eax > andb $-64, (%eax) > movl (%eax), %eax > leave > shrl $6, %eax > movzwl %ax, %eax > ret Actually the 4.0.4 compiler is x86_64, the code with -m32. The 4.0.3 compiler is i586. /space/rguenther/install/gcc-4.0.3/libexec/gcc/i686-pc-linux-gnu/4.0.3/cc1 -quiet -v t.c -quiet -dumpbase t.c -m32 -mtune=pentiumpro -auxbase t -O2 -version -o t.s /space/rguenther/install/gcc-4.0.4/libexec/gcc/x86_64-unknown-linux-gnu/4.0.4/cc1 -quiet -v t.c -quiet -dumpbase t.c -m32 -mtune=k8 -auxbase t -O2 -version -o t.s but no -march/tune combination makes the bug vanish for the 4.0.4 compiler (maybe a HWI dependent "optimization")