Re: optimization of switch statements on i386

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



"Godmar Back" <godmar@xxxxxxxxx> writes:

> gback@top [324](~/tmp) > cat switch.c
> enum four { A, B, C, D };
> extern void g(int);
> 
> void f(enum four x)
> {
>   switch (x)
>     {
>       case A: g(1); break;
>       case B: g(2); break;
>       case C: g(3); break;
>       case D: g(4); break;
>       default: gcc_unreachable();
>     }
> }

You don't have enough cases.  gcc will always uses a binary search if
there are fewer than five cases.

Try this one.

Ian

enum four { A, B, C, D, E, F, G, H, I, J, K, L, M, N };
extern void g(int);

void f(enum four x)
{
  switch (x)
    {
      case A: g(1); break;
      case B: g(2); break;
      case C: g(3); break;
      case D: g(4); break;
      case E: g(5); break;
      case F: g(6); break;
      case G: g(7); break;
      case H: g(8); break;
      case I: g(9); break;
      case J: g(10); break;
      case K: g(11); break;
      case L: g(12); break;
      case M: g(13); break;
      case N: g(14); break;
      default: gcc_unreachable();
    }
}

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux