https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79185
--- Comment #17 from Raphael C <drraph at gmail dot com> --- Tested in gcc 11.1 with -O2 ai(__int128, __int128): mov r9, rdi mov rax, rdx mov r8, rsi mov rdx, rcx add rax, r9 adc rdx, r8 ret This looks like two more mov's than needed but I may be wrong. By contrast clang gives ai(__int128, __int128): mov rax, rdi add rax, rdx adc rsi, rcx mov rdx, rsi ret