10

gcc で使用するための fastcall の使用例を提供してくれる人がいますか? 可能であれば、fastcall を使用せずに同等の呼び出しを提供し、それらがどのように異なるかを説明していただけますか?

4

2 に答える 2

17

特定の関数呼び出しが 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
于 2009-03-23T05:06:15.503 に答える
2

ここにいくつかのリンクがあります

fastcall 呼び出し規約を模倣するように GCC を説得することは可能ですか?

http://www.google.com/search?q=gcc+fastcall

于 2009-03-23T05:02:16.700 に答える