17:01 <@yao> sibling call 一般是函数的最后一句也是call 17:01 < binary> 按照英文,sibling call是call的一个变种,而例子中用jump代替call,这样就不用在堆栈中保存返回地址了,我这样理解不知道对不对?? 17:02 <@yao> 比如 int a (int foo){....; if () return Foo1() else return Foo2();}; 17:02 <@yao> Foo{1,2}都是sibcall 17:02 <@yao> 每一个port对sibcall的优化都不太一样, 17:03 <@yao> 取决这个port的abi在return的时候的规定 17:03 <@yao> 大体上,你那样说是对的 17:03 < binary> 呵呵 17:04 < binary> 谢谢大家 17:04 <@yao> 比如 b调用了a,a调用了 Foo1 返回的时候,直接返回到b那里 17:07 <@yao> sibcall的条件比较严格,如果Foo1 clobber了a 的caller-save reg,就不能做sibcall optimization了 ====== 外部連結 ====== * [[http://blog.babaks.com/2007/09/sibling-calls-in-gcc.html|Sibling Calls in GCC]] * [[http://llvm.org/docs/CodeGenerator.html#sibcallopt|Sibling call optimization]]