Пример FastCall GCC - PullRequest
       6

Пример FastCall GCC

9 голосов
/ 23 марта 2009

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

Ответы [ 2 ]

17 голосов
/ 23 марта 2009

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

$ 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
2 голосов
/ 23 марта 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...