我建立的項目之一,我期待在生成的列表文件。(目標:X86-64)我的代碼如下所示:編譯優化呼叫-RET VS JMP
int func_1(var1,var2){
asm_inline_(
)
func_2(var1,var2);
return_1;
}
void func_2(var_1,var_2){
asm __inline__(
)
func_3();
}
/**** Jump to kernel ---> System call stub in assembly. This func in .S file***/
void func_3(){
}
當我看到彙編代碼,我發現調用func_2和func_3時使用「jmp」指令而不是「call-return」對。我確信這是編譯器優化之一,我還沒有探索如何禁用它。 (GCC) 當我添加一些volatile變量到func_2和func_3並增加它們時,「jmp」被替換爲「call-ret」對。 我很困惑看到行爲,因爲這些變量是無用的,他們不起任何作用。 有人可以解釋行爲嗎?
感謝
Gr8解釋。謝謝 – 2014-10-28 18:28:35