2009-03-23 8 views
9

Qualcuno potrebbe fornire un esempio di utilizzo di fast call da utilizzare con gcc? Se possibile, potresti fornire la chiamata equivalente senza usare la chiamata rapida e spiegare come sarebbero diversi?Esempio GCC FastCall

risposta

17

Non c'è differenza nel modo in cui una determinata chiamata di funzione apparirebbe in codice C. L'unica differenza sarebbe nella dichiarazione di funzione. Il GCC manual ha più dettagli.

$ 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

È necessario mostrare la pulizia post-chiamata per enfatizzare la differenza? +1 per il manuale x-ref. –