https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93006
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- But even bar is unnecessarily long: movl a(%rip), %edx leal -1(%rdx), %eax cmpl $1, %edx movl %eax, a(%rip) movl %edi, %eax adcl %esi, %eax ret We could use movl a(%rip), %edx subl $1, %edx movl %edx, a(%rip) movl %edi, %eax adcl %esi, %eax ret or even subl $1, a(%rip) movl %edi, %eax adcl %esi, %eax ret