brl
格式
(qp)brl.btype.bwh.ph.dh target 64 X3
(qp)brl.btype.bwh.ph.dh b 1 = target 64 call_form X4
brl.ph.dh target 64 pseudo-op
說明
對分支條件求值,根據結果執行分支,或繼續執行序列中的下一條指令。從邏輯意義上說,分支的執行跟在相同指令組中前面所有非分支指令的執行之後。在執行的分支上,執行從指令槽 0 開始。
長分支總是相對於 IP 的。彙編程式碼中的 target64 運算元指定要執行的分支的標籤。在長分支指令中,它作為立即數位移量 (imm 60) 編碼,放在目標分支束與包含此指令的分支束之間 (imm60 = target64 – IP >> 4)。分支束的 L 指令槽包含 imm60 的 39 個位。
長分支型別
長無條件分支有一個偽操作,其編碼與條件分支類似
(btype = cond),qp 欄位指定 PR 0,並帶 bwh 提示 sptk。
分支型別確定如何計算分支條件,以及分支是否有其它效果(如寫入鏈接暫存器)。對於所有的長分支型別,分支條件只是指定的謂詞暫存器的值:
cond:如果限定謂詞為 1,則執行分支。否則不執行。
call:如果限定謂詞為 1,則執行分支,並且會執行多個其它操作:
“目前幀標記”(CFM)、EC 應用暫存器以及目前特權級別的當前值儲存到“上一個函式狀態”應用暫存器。
有效地儲存呼叫者的堆疊幀,並且給被呼叫者提供只包含呼叫者輸出區域的幀。
CFM 中的循環重新命名基址暫存器復位成 0。
返回鏈接值放入 BR b1。
在“先寫後讀” (RAW) 與“先讀後寫” (WAR) 相關性要求方面,長分支指令與其它指令略有不同,但與分支指令相同。
此指令必須立即後接停止,否則其行為未定義。
各種分支提示完成符的值與分支指令的相同。
警告
此指令未在英特爾(R) 安騰(R) 處理器上實現,每次遇到長分支指令時,不論是否執行分支,都會發生“非法操作”錯誤。要支援英特爾安騰處理器,操作系統需要提供“非法操作”錯誤處理程式,以模擬執行與不執行的長分支。CPUID 暫存器 4 的 lb 位等於 1 表示存在此指令。
中斷
“非法操作”錯誤;“執行分支”陷阱
“未使用的指令地址”陷阱