2014-07-16 53 views
1

在ARM體系結構中,如果發生ARM到Thumb模式切換,是否會發生流水線延遲? 如果是這樣,會影響多少個週期? 這與拇指到ARM模式切換是否相同? 此行爲是否因不同的ARM處理器而異?在ARM到Thumb開關上是否發生流水線延遲?

+1

您應該指定具體的體系結構。對於* thumb-1 *,差異僅在解碼邏輯中。基本上,拇指操作碼直接映射到ARM操作碼。所以,拇指模式大部分就像是管道前端的一個解壓縮器流。如果發生停頓,它將與分支類似。例如,我不相信Cortex-A可以預測'bx',當然不是'movs pc,lr'。它也可能取決於**你如何切換模式。 'msr CPSR,Rn'可能與'bx lr'不同。 –

+0

@artlessnoise無論如何(在調試狀態外)寫入「CPSR」時,指令集位都被忽略。 – Notlikethat

+0

當您嘗試並計時時發生了什麼? –

回答

0

假設你在明智的方式(與BLX/BX LR)開關,anymoderncorewillpredictthat(假設分支預測器沒有關閉,當然)。直接寫入PC稍微多變一些 - 一般來說,大內核可能預測它,但很少有內核不會 - 但通常最好避免。

否則互通分支AFAIK沒有不同於常規分支,所以如果它沒有預測的懲罰只是一個管道沖洗。切換指令集的唯一方法是通過異常返回,這是整個內核的同步操作(即不是擔心性能的地方)。

+0

在PC中寫入奇數可能會導致一些不愉快的後果,而不是轉換爲拇指。 –

+0

確實如此,特別是在較舊的架構上。從第7版開始,幾乎所有寫入PC的操作都是互通的,但仍建議避免直接寫入PC,除非記錄的案例被認可爲退貨指示。 – Notlikethat

0

不,完全沒有。

成本就像任何其他分支指令。如果預測值命中,則它是免費的,如果不是,則花費通常的13個週期。

由於切換,沒有額外的隱藏打嗝。

因此,您可以使用交互工作模式,而不必擔心與模式切換相關的潛在損失。

+0

大多數現代ARM CPU都是如此。如果您發佈到[tag:embedded],人們會堅持認爲ARM7TDMI非常常見,並引用[Wikipedia's ARM7](http://en.wikipedia.org/wiki/ARM7)頁面(即CPU而不是拱形版本)。在ARMv5(拱形版本)之前,拇指*互操作*更加痛苦,我認爲答案會有所不同。 –