http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50339
--- Comment #2 from Marc Glisse <glisse at gcc dot gnu.org> 2012-11-02 14:33:27 UTC --- It looks even worse in 4.8: movq %rdi, %r9 movq %rsi, %rdi movq %rsi, %r10 sarq $63, %rdi movq %rdi, %rcx xorq %r9, %rcx movq %rcx, %rax movq %r10, %rcx xorq %rdi, %rcx subq %rdi, %rax movq %rcx, %rdx sbbq %rdi, %rdx ret