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