GCC-4.1 -fno-function-cse still supported?

Etienne Lorrain etienne_lorrain@yahoo.fr
Fri May 12 18:40:00 GMT 2006


  Hello,

  the docs for "-fno-function-cse" says:
`-fno-function-cse'
     Do not put function addresses in registers; make each instruction
     that calls a constant function contain the function's address
     explicitly.

     This option results in less efficient code, but some strange hacks
     that alter the assembler output may be confused by the
     optimizations performed when this option is not used.

     The default is `-ffunction-cse'

  But when I tried (replacing in Gujin some calll by lcallw based on which function
 is called) it did not work as I expected it. For instance, -fno-function-cse seem
 ignored here:

[etienne@localhost ~]$ cat tmp.c
int (*fct) (int i);

int test_function_cse (int j) {
        if (j > 0)
                return fct(j - 1);
        else
                return fct(j + 1);
        }
[etienne@localhost ~]$ gcc -Os -S tmp.c
[etienne@localhost ~]$ cat tmp.s
        .file   "tmp.c"
        .text
.globl test_function_cse
        .type   test_function_cse, @function
test_function_cse:
        pushl   %ebp
        movl    fct, %ecx
        movl    %esp, %ebp
        movl    8(%ebp), %eax
        testl   %eax, %eax
        jle     .L2
        decl    %eax
        jmp     .L6
.L2:
        incl    %eax
.L6:
        movl    %eax, 8(%ebp)
        popl    %ebp
        jmp     *%ecx
        .size   test_function_cse, .-test_function_cse
        .comm   fct,4,4
        .ident  "GCC: (GNU) 4.1.0 20060304 (Red Hat 4.1.0-3)"
        .section        .note.GNU-stack,"",@progbits
[etienne@localhost ~]$ gcc -Os -fno-function-cse -S tmp.c
[etienne@localhost ~]$ cat tmp.s
        .file   "tmp.c"
        .text
.globl test_function_cse
        .type   test_function_cse, @function
test_function_cse:
        pushl   %ebp
        movl    fct, %ecx
        movl    %esp, %ebp
        movl    8(%ebp), %eax
        testl   %eax, %eax
        jle     .L2
        decl    %eax
        jmp     .L6
.L2:
        incl    %eax
.L6:
        movl    %eax, 8(%ebp)
        popl    %ebp
        jmp     *%ecx
        .size   test_function_cse, .-test_function_cse
        .comm   fct,4,4
        .ident  "GCC: (GNU) 4.1.0 20060304 (Red Hat 4.1.0-3)"
        .section        .note.GNU-stack,"",@progbits
[etienne@localhost ~]$ gcc -Os -fno-function-cse -fno-optimize-sibling-calls -S tmp.c
[etienne@localhost ~]$ cat tmp.s
        .file   "tmp.c"
        .text
.globl test_function_cse
        .type   test_function_cse, @function
test_function_cse:
        pushl   %ebp
        movl    fct, %edx
        movl    %esp, %ebp
        movl    8(%ebp), %eax
        testl   %eax, %eax
        jle     .L2
        decl    %eax
        jmp     .L6
.L2:
        incl    %eax
.L6:
        pushl   %eax
        call    *%edx
        popl    %edx
        leave
        ret
        .size   test_function_cse, .-test_function_cse
        .comm   fct,4,4
        .ident  "GCC: (GNU) 4.1.0 20060304 (Red Hat 4.1.0-3)"
        .section        .note.GNU-stack,"",@progbits
[etienne@localhost ~]$

  Thanks,
  Etienne.


	

	
		
___________________________________________________________________________ 
Faites de Yahoo! votre page d'accueil sur le web pour retrouver directement vos services préférés : vérifiez vos nouveaux mails, lancez vos recherches et suivez l'actualité en temps réel. 
Rendez-vous sur http://fr.yahoo.com/set



More information about the Gcc mailing list