aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Tools/scripts/generate_opcode_h.py
diff options
context:
space:
mode:
authorBrandt Bucher <brandtbucher@microsoft.com>2022-02-25 04:11:34 -0800
committerGitHub <noreply@github.com>2022-02-25 12:11:34 +0000
commit0f41aac109c45aa468c432f798947c54d4178b3d (patch)
tree260fd71fc1a4d46170f254248308e026e33440df /Tools/scripts/generate_opcode_h.py
parent18b5dd68c6b616257ae243c0b6bb965ffc885a23 (diff)
downloadcpython-0f41aac109c45aa468c432f798947c54d4178b3d.tar.gz
cpython-0f41aac109c45aa468c432f798947c54d4178b3d.zip
bpo-46841: Use *inline* caching for `BINARY_OP` (GH-31543)
Diffstat (limited to 'Tools/scripts/generate_opcode_h.py')
-rw-r--r--Tools/scripts/generate_opcode_h.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/Tools/scripts/generate_opcode_h.py b/Tools/scripts/generate_opcode_h.py
index 0ee4b95bbfd..1f21347935d 100644
--- a/Tools/scripts/generate_opcode_h.py
+++ b/Tools/scripts/generate_opcode_h.py
@@ -53,6 +53,7 @@ def main(opcode_py, outfile='Include/opcode.h'):
code = fp.read()
exec(code, opcode)
opmap = opcode['opmap']
+ opname = opcode['opname']
hasconst = opcode['hasconst']
hasjrel = opcode['hasjrel']
hasjabs = opcode['hasjabs']
@@ -62,7 +63,7 @@ def main(opcode_py, outfile='Include/opcode.h'):
used[op] = True
with open(outfile, 'w') as fobj:
fobj.write(header)
- for name in opcode['opname']:
+ for name in opname:
if name in opmap:
fobj.write(DEFINE.format(name, opmap[name]))
if name == 'POP_EXCEPT': # Special entry for HAVE_ARGUMENT
@@ -89,6 +90,12 @@ 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)