https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108552
--- Comment #15 from Uroš Bizjak <ubizjak at gmail dot com> --- Sorry, %esi/%edi is the correct order. -24(%ebp): some value previously saved to stack frame %ecx: address to write to %eax/%edx: loop iterator %esi/%edi: 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 == %esi/%edi xorl %edx, %ebx < movl %ebx, -20(%ebp) < movl %esi, %ebx < xorl %eax, %ebx < orl -20(%ebp), %ebx < jne .L1469 <