Could some one provide an example use of fastcall for use with gcc? If possible could you provide the equivalent call without using fastcall and explain how they would be different?
+7
A:
There is no difference in the way a given function call would appear in C code. The only difference would be in the function declaration. The GCC manual has more 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
sigjuice
2009-03-23 05:06:15
Do you need to show the post-call cleanup to emphasize the difference? +1 for the manual x-ref.
Jonathan Leffler
2009-03-23 06:27:47