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.

Reply via email to