diff options
author | Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> | 2021-08-17 14:55:55 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-17 14:55:55 (GMT) |
commit | 96346cb6d0593ef9ec122614347ccb053cd63433 (patch) | |
tree | 9f2b952134803d5de5229ece709b19e29ef0e7ab /Include/internal | |
parent | fcd651d16fc5ac3d07dd3f57f1001a861a2e7d23 (diff) | |
download | cpython-96346cb6d0593ef9ec122614347ccb053cd63433.zip cpython-96346cb6d0593ef9ec122614347ccb053cd63433.tar.gz cpython-96346cb6d0593ef9ec122614347ccb053cd63433.tar.bz2 |
bpo-44889: Specialize LOAD_METHOD with PEP 659 adaptive interpreter (GH-27722)
Adds four new instructions:
* LOAD_METHOD_ADAPTIVE
* LOAD_METHOD_CACHED
* LOAD_METHOD_MODULE
* LOAD_METHOD_CLASS
Diffstat (limited to 'Include/internal')
-rw-r--r-- | Include/internal/pycore_code.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/Include/internal/pycore_code.h b/Include/internal/pycore_code.h index 282089c..6289acd 100644 --- a/Include/internal/pycore_code.h +++ b/Include/internal/pycore_code.h @@ -30,6 +30,11 @@ typedef struct { uint32_t builtin_keys_version; } _PyLoadGlobalCache; +typedef struct { + /* Borrowed ref in LOAD_METHOD */ + PyObject *obj; +} _PyObjectCache; + /* Add specialized versions of entries to this union. * * Do not break the invariant: sizeof(SpecializedCacheEntry) == 8 @@ -45,6 +50,7 @@ typedef union { _PyAdaptiveEntry adaptive; _PyAttrCache attr; _PyLoadGlobalCache load_global; + _PyObjectCache obj; } SpecializedCacheEntry; #define INSTRUCTIONS_PER_ENTRY (sizeof(SpecializedCacheEntry)/sizeof(_Py_CODEUNIT)) @@ -299,6 +305,7 @@ cache_backoff(_PyAdaptiveEntry *entry) { int _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, SpecializedCacheEntry *cache); int _Py_Specialize_StoreAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, SpecializedCacheEntry *cache); int _Py_Specialize_LoadGlobal(PyObject *globals, PyObject *builtins, _Py_CODEUNIT *instr, PyObject *name, SpecializedCacheEntry *cache); +int _Py_Specialize_LoadMethod(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, SpecializedCacheEntry *cache); int _Py_Specialize_BinarySubscr(PyObject *sub, PyObject *container, _Py_CODEUNIT *instr); #define PRINT_SPECIALIZATION_STATS 0 |