문제

어떤 사람은 GCC와 함께 사용하기 위해 FastCall을 사용하는 예를 제공 할 수 있습니까? 가능하다면 FastCall을 사용하지 않고 동등한 전화를 제공하고 어떻게 다른지 설명 할 수 있습니까?

도움이 되었습니까?

해결책

주어진 함수 호출이 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top