please look at the 32-bit asm. dump: _Z3msby: pushl %ebx movl 12(%esp), %edx movl 8(%esp), %eax popl %ebx movl %edx, %eax xorl %edx, %edx shrl $24, %eax movzbl %al,%ecx movzbl %cl, %eax ret wow! this could be done within two intructions: movzbl 11(%esp), %eax ret the 64-bits variant looks fine: _Z3msby: movq %rdi, %rax shrq $56, %rax ret
Created attachment 13563 [details] sources
Try with -fomit-frame-pointer.
(In reply to comment #2) > Try with -fomit-frame-pointer. Andrew, please look at the makefile. -fomit.. is there already.
current 4.3 works fine: (32-bits): _Z3msby: movzbl 11(%esp), %eax ret (64-bits): _Z3msby: shrq $56, %rdi movl %edi, %eax ret
This was the normal "subreg" issue which was fixed by Ian back on 2007-01-31.