Fikret Skrgic
int main() { unsigned * a=malloc(100000000*sizeof(unsigned)), * b=a+1, * c=a+2, * d=a+3; register unsigned x, y, z, w; register int i; for(i=0;i<6250000;i++) { x+=*a; a+=4; y+=*b; b+=4; z+=*c; c+=4; w+=*d; d+=4; x+=*a; a+=4; y+=*b; b+=4; z+=*c; c+=4; w+=*d; d+=4; x+=*a; a+=4; y+=*b; b+=4; z+=*c; c+=4; w+=*d; d+=4; x+=*a; a+=4; y+=*b; b+=4; z+=*c; c+=4; w+=*d; d+=4; } x+=(y+z+w); }
.file "bug.c" .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp subl $24, %esp andl $-16, %esp movl $0, %eax addl $15, %eax addl $15, %eax shrl $4, %eax sall $4, %eax subl %eax, %esp subl $12, %esp pushl $400000000 call malloc addl $16, %esp movl %eax, -4(%ebp) movl -4(%ebp), %eax addl $4, %eax movl %eax, -8(%ebp) movl -4(%ebp), %eax addl $8, %eax movl %eax, -12(%ebp) movl -4(%ebp), %eax addl $12, %eax movl %eax, -16(%ebp) movl $0, -20(%ebp) .L2: cmpl $6249999, -20(%ebp) jg .L3 leal -4(%ebp), %eax addl $16, (%eax) leal -8(%ebp), %eax addl $16, (%eax) leal -12(%ebp), %eax addl $16, (%eax) leal -16(%ebp), %eax addl $16, (%eax) leal -4(%ebp), %eax addl $16, (%eax) leal -8(%ebp), %eax addl $16, (%eax) leal -12(%ebp), %eax addl $16, (%eax) leal -16(%ebp), %eax addl $16, (%eax) leal -4(%ebp), %eax addl $16, (%eax) leal -8(%ebp), %eax addl $16, (%eax) leal -12(%ebp), %eax addl $16, (%eax) leal -16(%ebp), %eax addl $16, (%eax) leal -4(%ebp), %eax addl $16, (%eax) leal -8(%ebp), %eax addl $16, (%eax) leal -12(%ebp), %eax addl $16, (%eax) leal -16(%ebp), %eax addl $16, (%eax) incl -20(%ebp) jmp .L2 .L3: leave ret .size main, .-main .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)"
.file "bug.c" .text .p2align 2,,3 .globl main .type main, @function main: pushl %ebp movl %esp, %ebp subl $8, %esp andl $-16, %esp subl $28, %esp pushl $400000000 call malloc addl $16, %esp movl $6249999, %eax .p2align 2,,3 .L5: decl %eax jns .L5 leave ret .size main, .-main .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)"