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 分支的分支链接。