br
指令型別 B
格式
(bp) br.btype.bwh.ph.dh target25 IP_relative_form
(bp) br.btype.bwh.ph.dh b1 = target25 call_form, IP_relative_form
br.btype.bwh.ph.dh target25 counted_form, IP_relative_form
br.ph.dh target25 pseudo-op
(bp) br.btype.bwh.ph.dh b2 indirect_form
(bp) br.btype.bwh.ph.dh b1 = b2 call_form, indirect_form
br.ph.dh b2 pseudo-op
說明
對分支條件求值,根據結果執行分支,或繼續執行序列中的下一條指令。從邏輯意義上說,分支的執行跟在相同指令組中前面所有非分支指令的執行之後。在執行的分支上,執行從指令槽 0 開始。
分支可以與 IP 相對分支或間接分支。對於 IP 相對分支,彙編中的 target25 運算元指定要執行的分支的標籤。在分支指令中,它作為有符號立即數位移量 (imm21) 進行編碼,放在目標分支束與包含此指令的分支束之間 (imm21 = target25 - IP >> 4)。對於間接分支,目標地址取自 BR b2。
無條件分支有兩種偽操作。它們的編碼與條件分支類似 (btype = COND),bp 欄位指定 PR 0,並帶 bwh 提示 sptk。
分支型別確定如何計算分支條件,以及分支是否有其它效果(如寫入鏈接暫存器)。對於基本分支型別,分支條件只是指定的謂詞暫存器中的值(稱為分支謂詞)。
基本分支型別包括:
cond
call
return
ia
loops
對於分支指令,“先寫後讀”(RAW) 與“先讀後寫”(WAR) 在相關性要求方面略有不同。對於相同指令組中的後續分支指令而言,非分支指令對 BR、PR(謂詞暫存器)及 PFS 的更改都是可見的,也就是說,這些資源可使用受限制的 RAW。譬如說,低延遲的比較分支序列就是如此。常規 RAW 要求適用於 LC、EC 應用暫存器以及 RRB。
在指令組中,如果讀取與寫入指令都出現分支,則不允許在 PR 63 上存在 WAR 相關性。例如,br.wtop 或 br.wexit 不得使用 PR[63] 作為其限定謂詞,並且 PR[63] 不得是相同指令組中 br.wtop 或 br.wexit 之前任何分支的限定謂詞。
出於相關性方面的目的,循環型分支總是會有效地寫入關聯的資源,無論它們是否執行。cloop 型別總是會有效地寫入 LC。LC 為 0 時,cloop 分支讓它保持不變,但硬體可能會按照使用相同的值重寫 LC 的辦法來實施這種行為。與此類似,br.ctop 與 br.cexit 總是有效地寫入 LC、EC、RRB 以及 PR[63];br.wtop 與 br.wexit 總是有效地寫入 EC、RRB 以及 PR[63]。
下面是各種分支提示完成符的值:“是否預測策略”提示(在完成符 (bwh) 中指明)、 順序預取提示 (ph) 以及分支快取取消提示 (dh)