Пример Fastcall GCC
может ли кто - нибудь привести пример использования fastcall для использования с gcc? Если возможно, вы могли бы предоставить эквивалентный вызов без использования fastcall и объяснить, как они будут отличаться?
2 ответов
нет никакой разницы в том, как данный вызов функции будет отображаться в коде C. Единственное различие будет заключаться в объявлении функции. The руководство 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 0, %edx
movl , %ecx
movl 2, 4(%esp)
movl 1, (%esp)
call foo1
.
.
bar2:
.
.
movl , 12(%esp)
movl , 8(%esp)
movl , 4(%esp)
movl , (%esp)
call foo2
вот несколько ссылок
можно ли убедить GCC имитировать соглашение о вызове fastcall?