https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108552
--- Comment #14 from Uroš Bizjak <ubizjak at gmail dot com> --- The loop is actually pretty simple, please see the interpretation below -24(%ebp): some value previously saved to stack frame %ecx: address to write to %eax/%edx: loop iterator %edi/%esi: termination value .L1469: movl %eax, __gcov0.prep_compound_page+56 movl -24(%ebp), %ebx addl $1, %eax <- increase loop iterator (low word)... movl %edx, __gcov0.prep_compound_page+60 adcl $0, %edx <- ... and high word addl $40, %ecx <- increase address pointer movl $1024, -28(%ecx) <- write to address movl %ebx, -36(%ecx) < movl %edi, %ebx <- loop exit test: %eax/%edx == %edi/%esi xorl %edx, %ebx < movl %ebx, -20(%ebp) < movl %esi, %ebx < xorl %eax, %ebx < orl -20(%ebp), %ebx < jne .L1469 < So, are loop iterator and termination value correct at the beginning of the loop?