Part Number: TMS320F28379D
Hello,
What is the mechanism that enables the compiler to create a jump table from a large switch statement? Is it number of conditionals, lines of code? I am using -O4 with v21.12
I have two similarly large state machines, one gets converted to a jump table and the other is just a series of conditional checks.
Jump table
.sect ".switch:_Z11ControlLoopv" .clink ||$C$SW1||: .long ||$C$L339|| ; 5 .long ||$C$L344|| ; 6 .long ||$C$L334|| ; 7 .long ||$C$L345|| ; 0 .long ||$C$L329|| ; 9 .long ||$C$L345|| ; 0 .long ||$C$L322|| ; 11 .long ||$C$L345|| ; 0 .long ||$C$L345|| ; 0 .long ||$C$L345|| ; 0 .long ||$C$L316|| ; 15 .long ||$C$L310|| ; 16 .long ||$C$L303|| ; 17 .long ||$C$L302|| ; 18 .long ||$C$L299|| ; 19 .long ||$C$L294|| ; 20 .long ||$C$L282|| ; 21 .long ||$C$L276|| ; 22 .long ||$C$L343|| ; 23 .long ||$C$L274|| ; 24 .long ||$C$L271|| ; 25 .long ||$C$L345|| ; 0 .long ||$C$L341|| ; 27 .long ||$C$L268|| ; 28 .long ||$C$L264|| ; 29 .long ||$C$L345|| ; 0 .long ||$C$L262|| ; 31 .sect "DeltaFuncs:_Z11ControlLoopv" ||$C$L262||:
Series of conditionals
CMPB AL,#5 ; [CPU_ALU] |27|
B ||$C$L217||,GT ; [CPU_ALU] |27|
; branchcc occurs ; [] |27|
CMPB AL,#5 ; [CPU_ALU] |27|
B ||$C$L231||,EQ ; [CPU_ALU] |27|
; branchcc occurs ; [] |27|
CMPB AL,#2 ; [CPU_ALU] |27|
B ||$C$L216||,GT ; [CPU_ALU] |27|
; branchcc occurs ; [] |27|
CMPB AL,#2 ; [CPU_ALU] |27|
B ||$C$L237||,EQ ; [CPU_ALU] |27|
; branchcc occurs ; [] |27|
CMPB AL,#0 ; [CPU_ALU] |27|
B ||$C$L245||,EQ ; [CPU_ALU] |27|
; branchcc occurs ; [] |27|
CMPB AL,#1 ; [CPU_ALU] |27|
B ||$C$L239||,EQ ; [CPU_ALU] |27|
; branchcc occurs ; [] |27|
B ||$C$L241||,UNC ; [CPU_ALU] |27|
; branch occurs ; [] |27|
||$C$L216||:
CMPB AL,#3 ; [CPU_ALU] |27|
B ||$C$L234||,EQ ; [CPU_ALU] |27|
; branchcc occurs ; [] |27|
CMPB AL,#4 ; [CPU_ALU] |27|
B ||$C$L233||,EQ ; [CPU_ALU] |27|
; branchcc occurs ; [] |27|
B ||$C$L241||,UNC ; [CPU_ALU] |27|
; branch occurs ; [] |27|
||$C$L217||:
CMPB AL,#8 ; [CPU_ALU] |27|
B ||$C$L218||,GT ; [CPU_ALU] |27|
; branchcc occurs ; [] |27|
CMPB AL,#8 ; [CPU_ALU] |27|
B ||$C$L223||,EQ ; [CPU_ALU] |27|
; branchcc occurs ; [] |27|
CMPB AL,#6 ; [CPU_ALU] |27|
B ||$C$L225||,EQ ; [CPU_ALU] |27|
; branchcc occurs ; [] |27|
CMPB AL,#7 ; [CPU_ALU] |27|
B ||$C$L244||,EQ ; [CPU_ALU] |27|
; branchcc occurs ; [] |27|
B ||$C$L241||,UNC ; [CPU_ALU] |27|
; branch occurs ; [] |27|
||$C$L218||:
CMPB AL,#9 ; [CPU_ALU] |27|
B ||$C$L219||,EQ ; [CPU_ALU] |27|
; branchcc occurs ; [] |27|
CMPB AL,#10 ; [CPU_ALU] |27|
B ||$C$L243||,EQ ; [CPU_ALU] |27|
; branchcc occurs ; [] |27|
B ||$C$L241||,UNC ; [CPU_ALU] |27|
; branch occurs ; [] |27|