asmlinkage和likely

来源:互联网 发布:iphone视频制作软件 编辑:程序博客网 时间:2024/06/16 05:05
#define fastcall __attribute__((regparm(3)))#define asmlinkage __attribute__((regparm(0)))

函数定义前加宏asmlinkage ,表示这些函数通过堆栈而不是通过寄存器传递参数。
gcc编译器在汇编过程中调用c语言函数时传递参数有两种方法:一种是通过堆栈,另一种是通过寄存器。缺省时采用寄存器,假如你要在你的汇编过程中调用c语言函数,并且想通过堆栈传递参数,你定义的c函数时要在函数前加上宏asmlinkage

if(likely(tv)) {    执行一些代码。。。}

if (likely(tv))等价于if (tv)
if (unlikely(tv))等价于if (tv)
这两个宏在内核中定义如下:

#define likely(x) __builtin_expect(!!(x), 1)#define unlikely(x) __builtin_expect(!!(x), 0)

目的是将”分支转移”的信息提供给编译器,这样编译器对代码进行优化,以减少指令跳转带来的性能下降。
__buildin_expect((x), 1)表示x的值为真的可能性更大.
__buildin_expect((x), 0)表示x的值为假的可能性更大.
likely和unlikely的功能就是添加 cache的命中率,提高系统执行速度

0 0