https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113982
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Note some of this is due to return register issues. If we instead do stores: ``` add_wide_1(unsigned long long, unsigned long long, add_result*): mov rax, rdi lea rcx, [rdi+rsi] xor edi, edi add rsi, rax mov QWORD PTR [rdx], rcx adc rdi, 0 mov BYTE PTR [rdx+8], dil and BYTE PTR [rdx+8], 1 ret ``` Which is better. add_wide_2 becomes: ``` add_wide_2(unsigned long long, unsigned long long, add_result*): add rdi, rsi setc BYTE PTR [rdx+8] mov QWORD PTR [rdx], rdi and BYTE PTR [rdx+8], 1 ret ``` Which is better, the extra and is filed already though I can't seem to find it.