ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
跳轉到所需目標的分支稱為“分支鏈接”。僅在 16-BIS 模式下支持分支鏈接。考慮以下代碼序列:
LAB1: BR L10
....
LAB2: BR L10
....
L10:如果 L10 離 LAB1 很遠(大偏移量),匯編器會將 BR 轉換為無條件分支和其周圍分支的序列,從而產生四個或六個字節長的兩條指令。相反,如果 LAB1 處的分支可以跳轉到 LAB2,并且距離 LAB2 足夠近,以至于 BR 可以被單個短分支指令替換,則生成的代碼會更小,因為 LAB1 中的 BR 將被轉換為一條兩個字節長的指令。如果 L10 離 LAB2 太遠,LAB2 會跳轉到另一個分支。因此,分支鏈接可以擴展到任意深度。
當在 thumb 模式下 (--code_state=16) 對代碼大小(未使用 --opt_for_speed)進行編譯時,編譯器生成兩條偽指令:
#depth 是可選參數。如果未指定 深度,則將其設置為默認的分支鏈接深度。如果已指定,則此分支指令的分支鏈接深度設置為 #depth。如果 #depth 小于零,則匯編器發出警告,并將此指令的分支鏈深度設置為零。
#depth已BTcc 偽指令的相同。
BT 偽指令取代了 BR(偽分支)指令。同樣,BQ 取代了 B。如果啟用了分支鏈接,匯編器會為這些指令執行分支鏈優化。匯編器將 BT 和 BQ 跳轉目標替換為這些指令跳轉到的分支的偏移量。
默認分支鏈接深度為 10。此限制旨在防止較長的分支鏈對性能造成影響。
可以在匯編語言程序中使用 BT 和 BQ 指令使匯編器能夠執行分支鏈接。可以通過指定(可選)#depth 參數來控制每條指令的分支鏈接深度。必須使用 BR 和 B 指令來防止任何 BT 或 BQ 分支的分支鏈接。