summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorBrandt Bucher <brandtbucher@microsoft.com>2023-11-14 01:27:19 (GMT)
committerGitHub <noreply@github.com>2023-11-14 01:27:19 (GMT)
commit31ad7e061ebebc484e00ed3ad5ff61061341c35e (patch)
tree37033459fc8023a66cfc64c52dc8680300c62d59 /Python
parent36aab34fab3d05f254fe80ca542c38c5f9ae11fe (diff)
downloadcpython-31ad7e061ebebc484e00ed3ad5ff61061341c35e.zip
cpython-31ad7e061ebebc484e00ed3ad5ff61061341c35e.tar.gz
cpython-31ad7e061ebebc484e00ed3ad5ff61061341c35e.tar.bz2
GH-111520: Add back the operand local (GH-111813)
Diffstat (limited to 'Python')
-rw-r--r--Python/ceval.c6
-rw-r--r--Python/executor_cases.c.h44
2 files changed, 23 insertions, 27 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index 4210039..584b64a 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -992,9 +992,7 @@ enter_tier_two:
OPT_STAT_INC(traces_executed);
_PyUOpInstruction *next_uop = current_executor->trace;
-#ifdef Py_DEBUG
- uint64_t operand; // Used by several DPRINTF() calls
-#endif
+ uint64_t operand;
#ifdef Py_STATS
uint64_t trace_uop_execution_counter = 0;
#endif
@@ -1002,9 +1000,7 @@ enter_tier_two:
for (;;) {
opcode = next_uop->opcode;
oparg = next_uop->oparg;
-#ifdef Py_DEBUG
operand = next_uop->operand;
-#endif
DPRINTF(3,
"%4d: uop %s, oparg %d, operand %" PRIu64 ", stack_level %d\n",
(int)(next_uop - current_executor->trace),
diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h
index 2f4d55b..877328a 100644
--- a/Python/executor_cases.c.h
+++ b/Python/executor_cases.c.h
@@ -204,7 +204,7 @@
PyObject *value;
PyObject *res;
value = stack_pointer[-1];
- uint32_t version = (uint32_t)next_uop[-1].operand;
+ uint32_t version = (uint32_t)operand;
// This one is a bit weird, because we expect *some* failures:
assert(version);
DEOPT_IF(Py_TYPE(value)->tp_version_tag != version, TO_BOOL);
@@ -1128,7 +1128,7 @@
}
case _GUARD_GLOBALS_VERSION: {
- uint16_t version = (uint16_t)next_uop[-1].operand;
+ uint16_t version = (uint16_t)operand;
PyDictObject *dict = (PyDictObject *)GLOBALS();
DEOPT_IF(!PyDict_CheckExact(dict), _GUARD_GLOBALS_VERSION);
DEOPT_IF(dict->ma_keys->dk_version != version, _GUARD_GLOBALS_VERSION);
@@ -1137,7 +1137,7 @@
}
case _GUARD_BUILTINS_VERSION: {
- uint16_t version = (uint16_t)next_uop[-1].operand;
+ uint16_t version = (uint16_t)operand;
PyDictObject *dict = (PyDictObject *)BUILTINS();
DEOPT_IF(!PyDict_CheckExact(dict), _GUARD_BUILTINS_VERSION);
DEOPT_IF(dict->ma_keys->dk_version != version, _GUARD_BUILTINS_VERSION);
@@ -1148,7 +1148,7 @@
case _LOAD_GLOBAL_MODULE: {
PyObject *res;
PyObject *null = NULL;
- uint16_t index = (uint16_t)next_uop[-1].operand;
+ uint16_t index = (uint16_t)operand;
PyDictObject *dict = (PyDictObject *)GLOBALS();
PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(dict->ma_keys);
res = entries[index].me_value;
@@ -1166,7 +1166,7 @@
case _LOAD_GLOBAL_BUILTINS: {
PyObject *res;
PyObject *null = NULL;
- uint16_t index = (uint16_t)next_uop[-1].operand;
+ uint16_t index = (uint16_t)operand;
PyDictObject *bdict = (PyDictObject *)BUILTINS();
PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(bdict->ma_keys);
res = entries[index].me_value;
@@ -1615,7 +1615,7 @@
case _GUARD_TYPE_VERSION: {
PyObject *owner;
owner = stack_pointer[-1];
- uint32_t type_version = (uint32_t)next_uop[-1].operand;
+ uint32_t type_version = (uint32_t)operand;
PyTypeObject *tp = Py_TYPE(owner);
assert(type_version != 0);
DEOPT_IF(tp->tp_version_tag != type_version, _GUARD_TYPE_VERSION);
@@ -1637,7 +1637,7 @@
PyObject *attr;
PyObject *null = NULL;
owner = stack_pointer[-1];
- uint16_t index = (uint16_t)next_uop[-1].operand;
+ uint16_t index = (uint16_t)operand;
PyDictOrValues dorv = *_PyObject_DictOrValuesPointer(owner);
attr = _PyDictOrValues_GetValues(dorv)->values[index];
DEOPT_IF(attr == NULL, _LOAD_ATTR_INSTANCE_VALUE);
@@ -1654,7 +1654,7 @@
case _CHECK_ATTR_MODULE: {
PyObject *owner;
owner = stack_pointer[-1];
- uint32_t type_version = (uint32_t)next_uop[-1].operand;
+ uint32_t type_version = (uint32_t)operand;
DEOPT_IF(!PyModule_CheckExact(owner), _CHECK_ATTR_MODULE);
PyDictObject *dict = (PyDictObject *)((PyModuleObject *)owner)->md_dict;
assert(dict != NULL);
@@ -1667,7 +1667,7 @@
PyObject *attr;
PyObject *null = NULL;
owner = stack_pointer[-1];
- uint16_t index = (uint16_t)next_uop[-1].operand;
+ uint16_t index = (uint16_t)operand;
PyDictObject *dict = (PyDictObject *)((PyModuleObject *)owner)->md_dict;
assert(dict->ma_keys->dk_kind == DICT_KEYS_UNICODE);
assert(index < dict->ma_keys->dk_nentries);
@@ -1701,7 +1701,7 @@
PyObject *attr;
PyObject *null = NULL;
owner = stack_pointer[-1];
- uint16_t hint = (uint16_t)next_uop[-1].operand;
+ uint16_t hint = (uint16_t)operand;
PyDictOrValues dorv = *_PyObject_DictOrValuesPointer(owner);
PyDictObject *dict = (PyDictObject *)_PyDictOrValues_GetDict(dorv);
DEOPT_IF(hint >= (size_t)dict->ma_keys->dk_nentries, _LOAD_ATTR_WITH_HINT);
@@ -1732,7 +1732,7 @@
PyObject *attr;
PyObject *null = NULL;
owner = stack_pointer[-1];
- uint16_t index = (uint16_t)next_uop[-1].operand;
+ uint16_t index = (uint16_t)operand;
char *addr = (char *)owner + index;
attr = *(PyObject **)addr;
DEOPT_IF(attr == NULL, _LOAD_ATTR_SLOT);
@@ -1749,7 +1749,7 @@
case _CHECK_ATTR_CLASS: {
PyObject *owner;
owner = stack_pointer[-1];
- uint32_t type_version = (uint32_t)next_uop[-1].operand;
+ uint32_t type_version = (uint32_t)operand;
DEOPT_IF(!PyType_Check(owner), _CHECK_ATTR_CLASS);
assert(type_version != 0);
DEOPT_IF(((PyTypeObject *)owner)->tp_version_tag != type_version, _CHECK_ATTR_CLASS);
@@ -1761,7 +1761,7 @@
PyObject *attr;
PyObject *null = NULL;
owner = stack_pointer[-1];
- PyObject *descr = (PyObject *)next_uop[-1].operand;
+ PyObject *descr = (PyObject *)operand;
STAT_INC(LOAD_ATTR, hit);
assert(descr != NULL);
attr = Py_NewRef(descr);
@@ -1787,7 +1787,7 @@
PyObject *value;
owner = stack_pointer[-1];
value = stack_pointer[-2];
- uint16_t index = (uint16_t)next_uop[-1].operand;
+ uint16_t index = (uint16_t)operand;
PyDictOrValues dorv = *_PyObject_DictOrValuesPointer(owner);
STAT_INC(STORE_ATTR, hit);
PyDictValues *values = _PyDictOrValues_GetValues(dorv);
@@ -1809,7 +1809,7 @@
PyObject *value;
owner = stack_pointer[-1];
value = stack_pointer[-2];
- uint16_t index = (uint16_t)next_uop[-1].operand;
+ uint16_t index = (uint16_t)operand;
char *addr = (char *)owner + index;
STAT_INC(STORE_ATTR, hit);
PyObject *old_value = *(PyObject **)addr;
@@ -2383,7 +2383,7 @@
case _GUARD_KEYS_VERSION: {
PyObject *owner;
owner = stack_pointer[-1];
- uint32_t keys_version = (uint32_t)next_uop[-1].operand;
+ uint32_t keys_version = (uint32_t)operand;
PyTypeObject *owner_cls = Py_TYPE(owner);
PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls;
DEOPT_IF(owner_heap_type->ht_cached_keys->dk_version != keys_version, _GUARD_KEYS_VERSION);
@@ -2395,7 +2395,7 @@
PyObject *attr;
PyObject *self;
owner = stack_pointer[-1];
- PyObject *descr = (PyObject *)next_uop[-1].operand;
+ PyObject *descr = (PyObject *)operand;
assert(oparg & 1);
/* Cached method object */
STAT_INC(LOAD_ATTR, hit);
@@ -2414,7 +2414,7 @@
PyObject *attr;
PyObject *self;
owner = stack_pointer[-1];
- PyObject *descr = (PyObject *)next_uop[-1].operand;
+ PyObject *descr = (PyObject *)operand;
assert(oparg & 1);
assert(Py_TYPE(owner)->tp_dictoffset == 0);
STAT_INC(LOAD_ATTR, hit);
@@ -2432,7 +2432,7 @@
PyObject *owner;
PyObject *attr;
owner = stack_pointer[-1];
- PyObject *descr = (PyObject *)next_uop[-1].operand;
+ PyObject *descr = (PyObject *)operand;
assert((oparg & 1) == 0);
STAT_INC(LOAD_ATTR, hit);
assert(descr != NULL);
@@ -2446,7 +2446,7 @@
PyObject *owner;
PyObject *attr;
owner = stack_pointer[-1];
- PyObject *descr = (PyObject *)next_uop[-1].operand;
+ PyObject *descr = (PyObject *)operand;
assert((oparg & 1) == 0);
assert(Py_TYPE(owner)->tp_dictoffset == 0);
STAT_INC(LOAD_ATTR, hit);
@@ -2473,7 +2473,7 @@
PyObject *attr;
PyObject *self;
owner = stack_pointer[-1];
- PyObject *descr = (PyObject *)next_uop[-1].operand;
+ PyObject *descr = (PyObject *)operand;
assert(oparg & 1);
STAT_INC(LOAD_ATTR, hit);
assert(descr != NULL);
@@ -2522,7 +2522,7 @@
PyObject *callable;
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
- uint32_t func_version = (uint32_t)next_uop[-1].operand;
+ uint32_t func_version = (uint32_t)operand;
DEOPT_IF(!PyFunction_Check(callable), _CHECK_FUNCTION_EXACT_ARGS);
PyFunctionObject *func = (PyFunctionObject *)callable;
DEOPT_IF(func->func_version != func_version, _CHECK_FUNCTION_EXACT_ARGS);