mirror of
https://github.com/python/cpython.git
synced 2025-07-18 16:55:20 +00:00
bpo-44337: Port LOAD_ATTR to PEP 659 adaptive interpreter (GH-26595)
* Specialize LOAD_ATTR with LOAD_ATTR_SLOT and LOAD_ATTR_SPLIT_KEYS * Move dict-common.h to internal/pycore_dict.h * Add LOAD_ATTR_WITH_HINT specialized opcode. * Quicken in function if loopy * Specialize LOAD_ATTR for module attributes. * Add specialization stats
This commit is contained in:
parent
309ab61602
commit
e117c02837
14 changed files with 511 additions and 221 deletions
|
@ -53,6 +53,10 @@ def main(opcode_py, outfile='Include/opcode.h'):
|
|||
opmap = opcode['opmap']
|
||||
hasjrel = opcode['hasjrel']
|
||||
hasjabs = opcode['hasjabs']
|
||||
used = [ False ] * 256
|
||||
next_op = 1
|
||||
for name, op in opmap.items():
|
||||
used[op] = True
|
||||
with open(outfile, 'w') as fobj:
|
||||
fobj.write(header)
|
||||
for name in opcode['opname']:
|
||||
|
@ -61,6 +65,11 @@ def main(opcode_py, outfile='Include/opcode.h'):
|
|||
if name == 'POP_EXCEPT': # Special entry for HAVE_ARGUMENT
|
||||
fobj.write("#define %-23s %3d\n" %
|
||||
('HAVE_ARGUMENT', opcode['HAVE_ARGUMENT']))
|
||||
for name in opcode['_specialized_instructions']:
|
||||
while used[next_op]:
|
||||
next_op += 1
|
||||
fobj.write("#define %-23s %3s\n" % (name, next_op))
|
||||
used[next_op] = True
|
||||
fobj.write("#ifdef NEED_OPCODE_JUMP_TABLES\n")
|
||||
write_int_array_from_ops("_PyOpcode_RelativeJump", opcode['hasjrel'], fobj)
|
||||
write_int_array_from_ops("_PyOpcode_Jump", opcode['hasjrel'] + opcode['hasjabs'], fobj)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue