For this code (from PR23525):

extern int waiting_for_initial_map;
extern int cp_pipe[2];
extern int pc_pipe[2];
extern int close (int __fd);

void
first_map_occurred(void)
{
    close(cp_pipe[0]);
    close(pc_pipe[1]);
    waiting_for_initial_map = 0;
}

gcc -march=i686 -O2 generates: 

        movl    cp_pipe, %eax
        movl    %eax, (%esp)
        call    close
        movl    pc_pipe+4, %eax
        movl    %eax, (%esp)
        call    close

The Intel compiler with the same flags generates:

        pushl     cp_pipe                                       #9.11
        call      close                                         #9.5
        pushl     4+pc_pipe                                     #10.11
        call      close                                         #10.5
 

gcc -march=i686 -Os generates similar code to the Intel compiler.

Is there a performance difference between the movl + movl and pushl
code sequences? If not maybe then gcc should generate pushl for -O2
too because it is smaller code.

Thanks

Reply via email to