2009-03-23 13 views
9

¿Podría alguien proporcionar un ejemplo de uso de fastcall para usar con gcc? Si es posible, ¿podría proporcionar la llamada equivalente sin usar la llamada rápida y explicar cómo serían diferentes?Fastcall GCC example

Respuesta

17

No hay diferencia en la forma de una llamada a una función dada aparecería en código C. La única diferencia estaría en la declaración de la función. El GCC manual tiene más detalles.

$ 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

¿Necesita mostrar la limpieza posterior a la llamada para enfatizar la diferencia? +1 para el manual x-ref. –