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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top