https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79185
Bug ID: 79185
Summary: Possible regression in gcc 4.9 and later with the
addition of two 128 bit ints
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: drraph at gmail dot com
Target Milestone: ---
Consider this code:
__int128_t ai (__int128_t x, __int128_t y) {
return x + y;
}
In gcc 4.8.5, clang and icc using -O2 this gives code that is more or less
exactly:
ai:
mov rax, rdx
mov rdx, rcx
add rax, rdi
adc rdx, rsi
ret
However in gcc 4.9 and later you get
ai:
mov r9, rdi
mov r10, rsi
add r9, rdx
adc r10, rcx
mov rax, r9
mov rdx, r10
ret
Interestingly, that is also the code you get in gcc 4.8.5 if you use -O instead
of -O2.
Is this addition of two extra mov's a regression?