diff options
author | Guido van Rossum <guido@python.org> | 2022-04-21 18:53:57 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-21 18:53:57 (GMT) |
commit | f8dc6186d1857a19edd182277a9d78e6d6cc3787 (patch) | |
tree | e85e859c1999d95ce7cc6402068f84efad807e1f /Tools | |
parent | d44815cabc0a8d9932df2fa95cb374eadddb7c17 (diff) | |
download | cpython-f8dc6186d1857a19edd182277a9d78e6d6cc3787.zip cpython-f8dc6186d1857a19edd182277a9d78e6d6cc3787.tar.gz cpython-f8dc6186d1857a19edd182277a9d78e6d6cc3787.tar.bz2 |
GH-91719: Make MSVC generate somewhat faster switch code (#91718)
Apparently a switch on an 8-bit quantity where all cases are
present generates a more efficient jump (doing only one indexed
memory load instead of two).
So we make opcode and use_tracing uint8_t, and generate a macro
full of extra `case NNN:` lines for all unused opcodes.
See https://github.com/faster-cpython/ideas/issues/321#issuecomment-1103263673
Diffstat (limited to 'Tools')
-rw-r--r-- | Tools/scripts/generate_opcode_h.py | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/Tools/scripts/generate_opcode_h.py b/Tools/scripts/generate_opcode_h.py index a13fa77..1b45020 100644 --- a/Tools/scripts/generate_opcode_h.py +++ b/Tools/scripts/generate_opcode_h.py @@ -129,6 +129,13 @@ def main(opcode_py, outfile='Include/opcode.h'): fobj.write("};\n") fobj.write("#endif\n") + fobj.write("\n") + fobj.write("#define EXTRA_CASES \\\n") + for i, flag in enumerate(used): + if not flag: + fobj.write(f" case {i}: \\\n") + fobj.write(" ;\n") + fobj.write(footer) |