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
9
A
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
2
Avez-vous besoin de montrer le nettoyage après l'appel pour souligner la différence? +1 pour le manuel x-ref. –