Frage

Könnte jemand ein Beispiel für die Verwendung von Fastcall für mit gcc Verwendung zur Verfügung stellen? Wenn möglich, könnten Sie die entsprechende Aufforderung liefern, ohne Fastcall und erklären, wie sie anders wäre?

War es hilfreich?

Lösung

Es gibt keinen Unterschied in der Art und Weise ein bestimmte Funktionsaufruf in C-Code erscheinen würde. Der einzige Unterschied in der Funktionsdeklaration wäre. Das GCC Handbuch hat weitere Details.

$ 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top