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