diff options
author | Brandt Bucher <brandtbucher@microsoft.com> | 2022-02-25 04:11:34 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-25 12:11:34 +0000 |
commit | 0f41aac109c45aa468c432f798947c54d4178b3d (patch) | |
tree | 260fd71fc1a4d46170f254248308e026e33440df /Tools/scripts/generate_opcode_h.py | |
parent | 18b5dd68c6b616257ae243c0b6bb965ffc885a23 (diff) | |
download | cpython-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.py | 9 |
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) |