Esempio fastcall GCC
-
21-08-2019 - |
Domanda
Potrebbe qualcuno fornire un esempio di uso fastcall per l'utilizzo con gcc? Se possibile, si potrebbe fornire la chiamata equivalente senza utilizzare fastcall e spiegare il modo in cui sarebbero state diverse?
Soluzione
Non v'è alcuna differenza nel modo in cui una determinata chiamata di funzione apparirebbe in codice C. L'unica differenza sarebbe nella dichiarazione di funzione. Il GCC manuale ha ulteriori 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
Altri suggerimenti
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow