2009-03-23 1 views
9

Может ли кто-нибудь предоставить пример использования fastcall для использования с gcc? Если возможно, вы можете предоставить эквивалентный вызов без использования fastcall и объяснить, как они будут отличаться?Fastcall GCC пример

ответ

17

Там нет никакой разницы в том, как данный вызов функции появится в коде C. Единственное различие заключается в объявлении функции. GCC manual имеет более подробную информацию.

$ 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

Нужно ли показывать очистку после вызова, чтобы подчеркнуть разницу? +1 для руководства x-ref. –

Смежные вопросы