aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Tools/scripts/generate_opcode_h.py
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2022-02-28 12:56:29 +0000
committerGitHub <noreply@github.com>2022-02-28 12:56:29 +0000
commit4558af5a8f8e56a9b0dc11f6e834c47e0fd05f9e (patch)
tree32365218607a600a23378350b533a307474cb628 /Tools/scripts/generate_opcode_h.py
parentda7d99a4de72aac8d436cecedf16ab2676f9b785 (diff)
downloadcpython-4558af5a8f8e56a9b0dc11f6e834c47e0fd05f9e.tar.gz
cpython-4558af5a8f8e56a9b0dc11f6e834c47e0fd05f9e.zip
bpo-46841: Move the cache for `LOAD_GLOBAL` inline. (GH-31575)
Diffstat (limited to 'Tools/scripts/generate_opcode_h.py')
-rw-r--r--Tools/scripts/generate_opcode_h.py17
1 files changed, 9 insertions, 8 deletions
diff --git a/Tools/scripts/generate_opcode_h.py b/Tools/scripts/generate_opcode_h.py
index 1f21347935d..75a9c3f3bfa 100644
--- a/Tools/scripts/generate_opcode_h.py
+++ b/Tools/scripts/generate_opcode_h.py
@@ -36,7 +36,7 @@ def write_int_array_from_ops(name, ops, out):
bits = 0
for op in ops:
bits |= 1<<op
- out.write(f"static uint32_t {name}[8] = {{\n")
+ out.write(f"static const uint32_t {name}[8] = {{\n")
for i in range(8):
out.write(f" {bits & UINT32_MASK}U,\n")
bits >>= 32
@@ -75,9 +75,16 @@ def main(opcode_py, outfile='Include/opcode.h'):
fobj.write(DEFINE.format(name, next_op))
used[next_op] = True
fobj.write(DEFINE.format('DO_TRACING', 255))
- fobj.write("#ifdef NEED_OPCODE_JUMP_TABLES\n")
+ fobj.write("\nextern const uint8_t _PyOpcode_InlineCacheEntries[256];\n")
+ fobj.write("\n#ifdef NEED_OPCODE_TABLES\n")
write_int_array_from_ops("_PyOpcode_RelativeJump", opcode['hasjrel'], fobj)
write_int_array_from_ops("_PyOpcode_Jump", opcode['hasjrel'] + opcode['hasjabs'], fobj)
+
+ fobj.write("\nconst uint8_t _PyOpcode_InlineCacheEntries[256] = {\n")
+ for i, entries in enumerate(opcode["_inline_cache_entries"]):
+ if entries:
+ fobj.write(f" [{opname[i]}] = {entries},\n")
+ fobj.write("};\n")
fobj.write("#endif /* OPCODE_TABLES */\n")
fobj.write("\n")
@@ -90,12 +97,6 @@ def main(opcode_py, outfile='Include/opcode.h'):
for i, (op, _) in enumerate(opcode["_nb_ops"]):
fobj.write(DEFINE.format(op, i))
- fobj.write("\nstatic const uint8_t _PyOpcode_InlineCacheEntries[256] = {\n")
- for i, entries in enumerate(opcode["_inline_cache_entries"]):
- if entries:
- fobj.write(f" [{opname[i]}] = {entries},\n")
- fobj.write("};\n")
-
fobj.write(footer)