SDCC can optimize switch statements to jump tables. It makes the decision based on an estimate of the generated code size. SDCC is quite liberal in the requirements for jump table generation:
switch(i) { switch (i) {Both the above switch statements will be implemented using a jump-table. The example to the right side is slightly more efficient as the check for the lower boundary of the jump-table is not needed.
case 4: ... case 0: ...
case 5: ... case 1: ...
case 3: ...
case 6: ... case 3: ...
case 7: ... case 4: ...
case 8: ... case 5: ...
case 9: ... case 6: ...
case 10: ... case 7: ...
case 11: ... case 8: ...
} }
switch (i) {If the above switch statement is broken down into two switch statements
case 1: ...
case 2: ...
case 3: ...
case 4: ...
case 5: ...
case 6: ...
case 7: ...
case 101: ...
case 102: ...
case 103: ...
case 104: ...
case 105: ...
case 106: ...
case 107: ...
}
switch (i) {and
case 1: ...
case 2: ...
case 3: ...
case 4: ...
case 5: ...
case 6: ...
case 7: ...
}
switch (i) {then both the switch statements will be implemented using jump-tables whereas the unmodified switch statement will not be.
case 101: ...
case 102: ...
case 103: ...
case 104: ...
case 105: ...
case 106: ...
case 107: ...
}