https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61621

--- Comment #2 from Holger Seelig <holger.seelig at yahoo dot de> ---
To my understanding and what I know is that a switch like the following:

switch (i)
{
   case 10:
      func_a();
      break;
   case 11:
      func_b();
      break;
   case 12:
      func_c();
      break;
}

Should become something like this:

// N.B.: This is not C++ code
static address jump_table[] = { case_a, case_b, case_c, end };
unsigned int index = i - 10;
if (index > 3) goto end;
goto jump_table [index];
case_a: func_a(); goto end;
case_b: func_b(); goto end;
case_c: func_c();
end:

and with this code a switch should handle many enum cases very efficiently
regardless if a case is executed more frequently.  (With a normal enum type the
second line »unsigned int index = i - 10;« could be omitted).

Reply via email to