https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94806
Bug ID: 94806 Summary: Failure to optimize unary minus for 128-bit operand Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: gabravier at gmail dot com Target Milestone: --- __int128 f(__int128 x) { return -x; } It would appear like unary minus is badly optimized by GCC. This is what LLVM outputs for this : f(__int128): # @f(__int128) mov rax, rdi xor edx, edx neg rax sbb rdx, rsi ret And this is what GCC outputs : f(__int128): mov rax, rdi mov rdx, rsi neg rax adc rdx, 0 neg rdx ret GCC's output is obviously worse (unless an `adc`+`neg` pair can somehow be better than an `sbb`) (See also https://godbolt.org/z/9AUd79)