This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28379D: Jump tables

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|