On 7/30/07, Siddhesh Poyarekar wrote:
> On 7/30/07, Dinesh Joshi wrote:
> > How will it add an extra condition? The compiler is smart enough to
> > understand while( true ) is an unconditional loop and will not
> > generate the code for a condition check instead it'll just put a JMP
> > instruction back to the start of the block. So no overheads there.
>
> Exactly. So does this happen even with optimization turned off? If it
> does then shouldn't my code in query two cause a miss in the
> instruction pipeline all the time?

Again, we come to the implementation part. Depends on the processor on
which you run the code on. It all depends on the branch prediction
logic. But here branch prediction doesn't come into picture! The JMP
instruction is an unconditional jump. Your code will generate assembly
like this:

        .file   "test2.c"
        .text
.globl main
        .type   main, @function
main:
        leal    4(%esp), %ecx
        andl    $-16, %esp
        pushl   -4(%ecx)
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ecx
        subl    $16, %esp
.L2:
        addl    $1, -8(%ebp)
        jmp     .L2
        .size   main, .-main
        .ident  "GCC: (GNU) 4.1.0 20060304 (Red Hat 4.1.0-3)"
        .section        .note.GNU-stack,"",@progbits

See the unconditional JMP instruction that GCC generated?

The C source for this assembly is :

int main() {
        int i;
        while( 1 ) {
                i++;
        }
        return 0;
}

Now get it ?

-- 
Regards,
Dinesh A. Joshi

-- 
http://mm.glug-bom.org/mailman/listinfo/linuxers

Reply via email to