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.