簡體   English   中英

“ret”會阻止管道嗎?

[英]Does “ret” stall the pipeline?

由於ret指令是間接調用,x86上的ret指令是否會使管道停止,或者它是否以某種方式進行了優化以表現得像更直接的調用?

從英特爾優化參考手冊中,分支預測單元包含一個返回堆棧緩沖區,可以更准確地預測ret指令(第2.2.2.1節)。 指令排隊和解碼單元還跟蹤堆棧指針的變化以改善解碼帶寬(見第2.2.2.5節)。

更詳細地說,第3.4.1.4節描述了一些“規則”,主要針對編譯器編寫者,受益於內聯,調用和返回 - 最相關的可能是近/遠調用必須與近/遠返回配對,這意味着不推薦在堆棧上推送返回地址並跳轉到被調用者。 此外,建議調用深度不超過16個嵌套調用(RSB的大小)。

如果遵循這些規則,您可以在分支選擇期間(第3.4.1.6節)有效地將它們視為間接分支,並包含所有含義。 你很可能永遠不會遇到在一個攤位ret ,除了在病理情況下或自行修改代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM