mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +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
|
@ -117,7 +117,7 @@ converting the dict to the combined table.
|
|||
#include "pycore_object.h" // _PyObject_GC_TRACK()
|
||||
#include "pycore_pyerrors.h" // _PyErr_Fetch()
|
||||
#include "pycore_pystate.h" // _PyThreadState_GET()
|
||||
#include "dict-common.h"
|
||||
#include "pycore_dict.h"
|
||||
#include "stringlib/eq.h" // unicode_eq()
|
||||
|
||||
/*[clinic input]
|
||||
|
@ -285,24 +285,6 @@ _PyDict_DebugMallocStats(FILE *out)
|
|||
state->numfree, sizeof(PyDictObject));
|
||||
}
|
||||
|
||||
#define DK_LOG_SIZE(dk) ((dk)->dk_log2_size)
|
||||
#if SIZEOF_VOID_P > 4
|
||||
#define DK_SIZE(dk) (((int64_t)1)<<DK_LOG_SIZE(dk))
|
||||
#define DK_IXSIZE(dk) \
|
||||
(DK_LOG_SIZE(dk) <= 7 ? \
|
||||
1 : DK_LOG_SIZE(dk) <= 15 ? \
|
||||
2 : DK_LOG_SIZE(dk) <= 31 ? \
|
||||
4 : sizeof(int64_t))
|
||||
#else
|
||||
#define DK_SIZE(dk) (1<<DK_LOG_SIZE(dk))
|
||||
#define DK_IXSIZE(dk) \
|
||||
(DK_LOG_SIZE(dk) <= 7 ? \
|
||||
1 : DK_LOG_SIZE(dk) <= 15 ? \
|
||||
2 : sizeof(int32_t))
|
||||
#endif
|
||||
#define DK_ENTRIES(dk) \
|
||||
((PyDictKeyEntry*)(&((int8_t*)((dk)->dk_indices))[DK_SIZE(dk) * DK_IXSIZE(dk)]))
|
||||
|
||||
#define DK_MASK(dk) (DK_SIZE(dk)-1)
|
||||
#define IS_POWER_OF_2(x) (((x) & (x-1)) == 0)
|
||||
|
||||
|
@ -1544,10 +1526,10 @@ delitem_common(PyDictObject *mp, Py_hash_t hash, Py_ssize_t ix,
|
|||
assert(hashpos >= 0);
|
||||
|
||||
mp->ma_used--;
|
||||
mp->ma_keys->dk_version = 0;
|
||||
mp->ma_version_tag = DICT_NEXT_VERSION();
|
||||
ep = &DK_ENTRIES(mp->ma_keys)[ix];
|
||||
dictkeys_set_index(mp->ma_keys, hashpos, DKIX_DUMMY);
|
||||
mp->ma_keys->dk_version = 0;
|
||||
old_key = ep->me_key;
|
||||
ep->me_key = NULL;
|
||||
ep->me_value = NULL;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue