Gcc 功能是否可以是fastcall&;linux内核中的内联?

Gcc 功能是否可以是fastcall&;linux内核中的内联?,gcc,linux-kernel,Gcc,Linux Kernel,我想定义一个将从条目_32.S调用的函数。它将在调用真正的系统调用处理函数之前被调用 为了避免函数调用和参数传递的开销,我可以将我的_foo声明为 fastcall inline int my_foo (int n); /*in entry_32.S*/ pushl %eax CFI_ADJUST_CFA_OFFSET 4 SAVE_ALL .... /* My code begins*/ call my_foo cmpl $0,

我想定义一个将从条目_32.S调用的函数。它将在调用真正的系统调用处理函数之前被调用

为了避免函数调用和参数传递的开销,我可以将我的_foo声明为

   fastcall inline int my_foo (int n);

    /*in entry_32.S*/
    pushl %eax
    CFI_ADJUST_CFA_OFFSET 4
    SAVE_ALL
    ....
/* My code begins*/
    call my_foo
    cmpl $0, %eax
    jne syscall_wrong
    movl PT_ORIG_EAX(%esp), %eax
/* My code ends */
    call *sys_call_table(,%eax,4)

编译器可以在C代码中内联函数(无论它们是否具有
inline
关键字),但汇编程序没有那么聪明。在汇编中编写的内容正是将要汇编的内容,根本没有优化(如内联)。

我猜语法是正确的。但是“inline”修饰符没有效果,因为汇编程序不是那么聪明,它不能用my_foo的代码替换现有的“call my_foo”行。inline始终是一个提示,编译器不必听,因为在一天结束时,编译器最清楚:P它很可能是内联的,但可能不是