https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97756

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ppalka at gcc dot gnu.org

--- Comment #3 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Perhaps related to this PR: On x86_64, the following basic wrapper around
int128 addition

  __uint128_t f(__uint128_t x, __uint128_t y) { return x + y; }

gets compiled (/w -O3, -O2 or -Os) to the seemingly suboptimal

        movq    %rdi, %r9
        movq    %rdx, %rax
        movq    %rsi, %r8
        movq    %rcx, %rdx
        addq    %r9, %rax
        adcq    %r8, %rdx
        ret

Clang does:

        movq    %rdi, %rax
        addq    %rdx, %rax
        adcq    %rcx, %rsi
        movq    %rsi, %rdx
        retq

Reply via email to