http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53110
--- Comment #10 from H. Peter Anvin <hpa at zytor dot com> 2012-04-25 20:32:29 UTC --- There still seems to be a redundant copy in there, but that's pretty common in gcc-generated code; the movl %esi, %esi could get completely elided and the zero extend folded into "movq %rsi, %rdx" by changing it to movl %esi, %edx. This is a second-order issue though...