• Mihir Shah's avatar
    A jump-table implementation for constant case switch statements · 9711289d
    Mihir Shah authored
    The change is made since for switch statements with lots of cases,
    where each case is a constant integer, the emitted bytecode is still
    a series of jumps, when we can instead use a jump table.
    
    If there are 6 or more cases (similar to GCC) of Smi literals, and
    if the max Smi case minus the min Smi case is not more than 3 times
    the number of cases, we use a jump table up front to handle Smi's,
    and then use traditional if-else logic for the rest of the cases.
    
    We then use the jump table in interpreter/bytecode-jump-table to
    do the optimization.
    
    This tries to go off issue 9738 in v8's issue tracker. It is not
    exactly the same, since that recommends doing the work at JIT-time,
    but has similar ideas. It also partially goes off issue 10764.
    
    Bug: v8:9738
    Change-Id: Ic805682ee3abf9ce464bb733b427fa0c83a6e10c
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2904926Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
    Commit-Queue: Leszek Swirski <leszeks@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#75323}
    9711289d
baseline-assembler-ia32-inl.h 16.2 KB