summaryrefslogtreecommitdiffstats
path: root/Python/generated_cases.c.h
diff options
context:
space:
mode:
Diffstat (limited to 'Python/generated_cases.c.h')
-rw-r--r--Python/generated_cases.c.h34
1 files changed, 20 insertions, 14 deletions
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h
index f1e22f6..4e37c68 100644
--- a/Python/generated_cases.c.h
+++ b/Python/generated_cases.c.h
@@ -8618,53 +8618,59 @@
assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
JUMP_TO_PREDICTED(LOAD_ATTR);
}
+ PyDictKeysObject *dk = FT_ATOMIC_LOAD_PTR(dict->ma_keys);
assert(PyDict_CheckExact((PyObject *)dict));
+ #ifdef Py_GIL_DISABLED
+ if (!_Py_IsOwnedByCurrentThread((PyObject *)dict) && !_PyObject_GC_IS_SHARED(dict)) {
+ UPDATE_MISS_STATS(LOAD_ATTR);
+ assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
+ JUMP_TO_PREDICTED(LOAD_ATTR);
+ }
+ #endif
PyObject *attr_o;
- if (!LOCK_OBJECT(dict)) {
+ if (hint >= (size_t)FT_ATOMIC_LOAD_SSIZE_RELAXED(dk->dk_nentries)) {
if (true) {
UPDATE_MISS_STATS(LOAD_ATTR);
assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
JUMP_TO_PREDICTED(LOAD_ATTR);
}
}
- if (hint >= (size_t)dict->ma_keys->dk_nentries) {
- UNLOCK_OBJECT(dict);
+ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1);
+ if (dk->dk_kind != DICT_KEYS_UNICODE) {
if (true) {
UPDATE_MISS_STATS(LOAD_ATTR);
assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
JUMP_TO_PREDICTED(LOAD_ATTR);
}
}
- PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1);
- if (dict->ma_keys->dk_kind != DICT_KEYS_UNICODE) {
- UNLOCK_OBJECT(dict);
+ PyDictUnicodeEntry *ep = DK_UNICODE_ENTRIES(dk) + hint;
+ if (FT_ATOMIC_LOAD_PTR_RELAXED(ep->me_key) != name) {
if (true) {
UPDATE_MISS_STATS(LOAD_ATTR);
assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
JUMP_TO_PREDICTED(LOAD_ATTR);
}
}
- PyDictUnicodeEntry *ep = DK_UNICODE_ENTRIES(dict->ma_keys) + hint;
- if (ep->me_key != name) {
- UNLOCK_OBJECT(dict);
+ attr_o = FT_ATOMIC_LOAD_PTR(ep->me_value);
+ if (attr_o == NULL) {
if (true) {
UPDATE_MISS_STATS(LOAD_ATTR);
assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
JUMP_TO_PREDICTED(LOAD_ATTR);
}
}
- attr_o = ep->me_value;
- if (attr_o == NULL) {
- UNLOCK_OBJECT(dict);
+ STAT_INC(LOAD_ATTR, hit);
+ #ifdef Py_GIL_DISABLED
+ if (!_Py_TryIncrefCompareStackRef(&ep->me_value, attr_o, &attr)) {
if (true) {
UPDATE_MISS_STATS(LOAD_ATTR);
assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
JUMP_TO_PREDICTED(LOAD_ATTR);
}
}
- STAT_INC(LOAD_ATTR, hit);
+ #else
attr = PyStackRef_FromPyObjectNew(attr_o);
- UNLOCK_OBJECT(dict);
+ #endif
stack_pointer[-1] = attr;
_PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(owner);