2009-03-23 6 views
9

Quelqu'un pourrait-il donner un exemple d'utilisation de fastcall pour une utilisation avec gcc? Si possible, pourriez-vous fournir l'appel équivalent sans utiliser fastcall et expliquer comment ils seraient différents?Fastcall Exemple GCC

Répondre

17

Il n'y a pas de différence dans la façon dont un appel de fonction donnée apparaît dans le code C. La seule différence serait dans la déclaration de fonction. Le GCC manual a plus de détails.

$ cat fastcall.c 
extern void foo1(int x, int y, int z, int a) __attribute__((fastcall)); 
extern void foo2(int x, int y, int z, int a); 

void bar1() 
{ 
    foo1(99, 100, 101, 102); 
} 

void bar2() 
{ 
    foo2(89, 90, 91, 92); 
} 

$ gcc -m32 -O3 -S fastcall.c -o - 
. 
. 
bar1: 
. 
.  
    movl $100, %edx 
    movl $99, %ecx 
    movl $102, 4(%esp) 
    movl $101, (%esp) 
    call foo1 
. 
. 
bar2: 
. 
. 
    movl $92, 12(%esp) 
    movl $91, 8(%esp) 
    movl $90, 4(%esp) 
    movl $89, (%esp) 
    call foo2 
+1

Avez-vous besoin de montrer le nettoyage après l'appel pour souligner la différence? +1 pour le manuel x-ref. –