ZHCAEQ3 November 2024 F29H850TU , F29H859TU-Q1
C29 CPU 特殊的分支指令使編譯器能夠?qū)⒍鄠€(gè)分支目標(biāo)折疊為一個(gè)指令。switch 是通用代碼中常見(jiàn)的結(jié)構(gòu),通常用于處理輔助控制任務(wù)。C29 ISA 提供多路分支指令 QDECB 和 DDECB,用于高效實(shí)現(xiàn)此語(yǔ)句。四路遞減分支 (QDECB) 允許最多四個(gè)分支目標(biāo),或者選擇繼續(xù)線性執(zhí)行。四路遞減分支 (DDECB) 允許最多兩個(gè)分支目標(biāo),或者選擇繼續(xù)線性執(zhí)行。
下面的代碼塊中顯示了一個(gè)包含 16 個(gè)分支的 switch 語(yǔ)句。在 C29 CPU 上,switch 使用一條分支指令 (BCMP) 和四條 QDECB 指令實(shí)現(xiàn),需要 10 到 17 個(gè)周期,具體取決于輸入。在 Cortex-M7 上,switch 針對(duì)每種情況使用比較指令和分支指令實(shí)現(xiàn),需要 6 到 51 個(gè)周期,具體取決于輸入。
switch(state) { case 15: .... break; case 14: .... break; case 13: .... break; ... ... case 0: .... break; default: .... break; }
C29 Implementation
LD.32 A14,@State
BCMP @default,A.GT,A14,#15 QDECBA14,#0x4,@case15,@Case14,@Case13,@Case12,@ QDECBA14,#0x4,@case11,@Case10,@Case9,@Case8,@ QDECBA14,#0x2,@case7,@case6,@case5,@case4,@
QDECBA14,#0x2,@case3,@case2,@case1,@case0,@
default:
....
....
LB @State_end
case15:
....
....
LB @State_end
case14:
....
....
LB @State_end
case13:
....
....
LB @State_end
....
....
....
case2:
....
....
LB @State_end
case1:
....
....
LB @State_end
case0:
....
....
State_end:
M7 Implementation
LDRSB R6,[State]
CMP R6,#15
BGT.N default
BEQ.N case15
CMP R6,#14
BEQ.N case14
....
CMP R6,#0
BEQ.N case0
default:
....
....
B State_end
case15:
....
....
B State_end
case14:
....
....
B State_end
case13:
....
....
B State_end
....
....
....
case2:
....
....
B State_end
case1:
....
....
B State_end
case0:
....
....
State_end: