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: [EMAIL PROTECTED] ~]$ 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); } [EMAIL PROTECTED] ~]$ gcc -Os -S tmp.c [EMAIL PROTECTED] ~]$ 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 [EMAIL PROTECTED] ~]$ gcc -Os -fno-function-cse -S tmp.c [EMAIL PROTECTED] ~]$ 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 [EMAIL PROTECTED] ~]$ gcc -Os -fno-function-cse -fno-optimize-sibling-calls -S tmp.c [EMAIL PROTECTED] ~]$ 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 [EMAIL PROTECTED] ~]$ 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