Go to file
Mihir Shah 9711289d06 A jump-table implementation for constant case switch statements
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/+/2904926
Reviewed-by: Leszek Swirski <leszeks@chromium.org>
Commit-Queue: Leszek Swirski <leszeks@chromium.org>
Cr-Commit-Position: refs/heads/master@{#75323}
2021-06-23 09:26:23 +00:00
.github [github] Close PRs created on the V8 GitHub mirror automatically 2021-01-12 08:39:59 +00:00
bazel [bazel] Add v8_enable_webassembly 2021-06-17 08:09:26 +00:00
build_overrides [build] Remove obsolete gn flag 2021-01-11 15:50:59 +00:00
custom_deps
docs
gni Make Google benchmark dependency a default 2021-04-21 12:19:40 +00:00
include Use vanilla context for exception meta data 2021-06-17 08:25:21 +00:00
infra [test] Allow more time for tsan testing 2021-06-23 07:51:52 +00:00
samples Reland "[api] Add v8::Isolate::ThrowError helper" 2021-04-16 11:48:05 +00:00
src A jump-table implementation for constant case switch statements 2021-06-23 09:26:23 +00:00
test A jump-table implementation for constant case switch statements 2021-06-23 09:26:23 +00:00
testing build: Remove no-op calls to set_sources_assignment_filter 2020-10-08 14:44:01 +00:00
third_party [base] Move utils/vector.h to base/vector.h 2021-06-18 13:33:13 +00:00
tools [test] Allow more time for tsan testing 2021-06-23 07:51:52 +00:00
.bazelrc [bazel] Compile V8 with bazel 2021-06-15 14:52:09 +00:00
.clang-format
.clang-tidy
.editorconfig
.flake8
.git-blame-ignore-revs
.gitattributes
.gitignore [log] Include tickprocessor log files in git 2021-06-21 15:26:29 +00:00
.gn [infra] Force Python 3 to be used in build. 2021-05-11 12:04:34 +00:00
.mailmap Add clemensh->clemensb to .mailmap 2021-06-08 13:18:11 +00:00
.vpython
.ycm_extra_conf.py
AUTHORS A jump-table implementation for constant case switch statements 2021-06-23 09:26:23 +00:00
BUILD.bazel [bigint] Burnikel-Ziegler division 2021-06-22 17:58:21 +00:00
BUILD.gn [bigint] Burnikel-Ziegler division 2021-06-22 17:58:21 +00:00
CODE_OF_CONDUCT.md
codereview.settings
COMMON_OWNERS Remove ulan@ from OWNERS 2021-06-08 13:10:21 +00:00
DEPS Add re-client linux/win binaries to DEPS. 2021-06-23 08:40:33 +00:00
DIR_METADATA Add DIR_METADATA files to v8. 2020-10-20 22:12:28 +00:00
ENG_REVIEW_OWNERS Update ENG_REVIEW_OWNERS 2021-02-25 14:28:32 +00:00
INFRA_OWNERS Add team members as owners 2020-08-18 08:29:04 +00:00
INTL_OWNERS
LICENSE
LICENSE.fdlibm
LICENSE.strongtalk
LICENSE.v8
MIPS_OWNERS [mips] Request to be an owner of MIPS files 2020-11-23 09:43:49 +00:00
OWNERS [bazel] Compile V8 with bazel 2021-06-15 14:52:09 +00:00
PPC_OWNERS Adding myself to relevant OWNERS files. 2020-11-02 16:37:28 +00:00
PRESUBMIT.py [bigint] Move multiplication to src/bigint/ 2021-04-19 15:40:43 +00:00
README.md
RISCV_OWNERS [riscv64] Change one of the owners for RISCV. 2021-04-20 14:39:26 +00:00
S390_OWNERS Adding myself to relevant OWNERS files. 2020-11-02 16:37:28 +00:00
WATCHLISTS [bazel] Add bazel files to watchlist 2021-06-17 09:26:11 +00:00
WORKSPACE [bazel] Compile V8 with bazel 2021-06-15 14:52:09 +00:00

V8 JavaScript Engine

V8 is Google's open source JavaScript engine.

V8 implements ECMAScript as specified in ECMA-262.

V8 is written in C++ and is used in Google Chrome, the open source browser from Google.

V8 can run standalone, or can be embedded into any C++ application.

V8 Project page: https://v8.dev/docs

Getting the Code

Checkout depot tools, and run

    fetch v8

This will checkout V8 into the directory v8 and fetch all of its dependencies. To stay up to date, run

    git pull origin
    gclient sync

For fetching all branches, add the following into your remote configuration in .git/config:

    fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*
    fetch = +refs/tags/*:refs/tags/*

Contributing

Please follow the instructions mentioned at v8.dev/docs/contribute.