summaryrefslogtreecommitdiffstats
path: root/Python/generated_cases.c.h
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2024-10-29 11:15:42 (GMT)
committerGitHub <noreply@github.com>2024-10-29 11:15:42 (GMT)
commitfaa3272fb8d63d481a136cc0467a0cba6ed7b264 (patch)
tree474ac9edbff637a8edb280846a1d3d9b113915c4 /Python/generated_cases.c.h
parent67f5c5bd6fcc956a785edef3be67e8cbe470cd31 (diff)
downloadcpython-faa3272fb8d63d481a136cc0467a0cba6ed7b264.zip
cpython-faa3272fb8d63d481a136cc0467a0cba6ed7b264.tar.gz
cpython-faa3272fb8d63d481a136cc0467a0cba6ed7b264.tar.bz2
GH-125837: Split `LOAD_CONST` into three. (GH-125972)
* Add LOAD_CONST_IMMORTAL opcode * Add LOAD_SMALL_INT opcode * Remove RETURN_CONST opcode
Diffstat (limited to 'Python/generated_cases.c.h')
-rw-r--r--Python/generated_cases.c.h119
1 files changed, 30 insertions, 89 deletions
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h
index 35af1dc..a615f65 100644
--- a/Python/generated_cases.c.h
+++ b/Python/generated_cases.c.h
@@ -4879,59 +4879,6 @@
DISPATCH();
}
- TARGET(INSTRUMENTED_RETURN_CONST) {
- _Py_CODEUNIT* const this_instr = frame->instr_ptr = next_instr;
- (void)this_instr;
- next_instr += 1;
- INSTRUCTION_STATS(INSTRUMENTED_RETURN_CONST);
- _PyStackRef value;
- _PyStackRef val;
- _PyStackRef retval;
- _PyStackRef res;
- // _LOAD_CONST
- {
- value = PyStackRef_FromPyObjectNew(GETITEM(FRAME_CO_CONSTS, oparg));
- }
- // _RETURN_VALUE_EVENT
- {
- val = value;
- stack_pointer[0] = val;
- stack_pointer += 1;
- assert(WITHIN_STACK_BOUNDS());
- _PyFrame_SetStackPointer(frame, stack_pointer);
- int err = _Py_call_instrumentation_arg(
- tstate, PY_MONITORING_EVENT_PY_RETURN,
- frame, this_instr, PyStackRef_AsPyObjectBorrow(val));
- stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err) goto error;
- }
- // _RETURN_VALUE
- {
- retval = val;
- #if TIER_ONE
- assert(frame != &entry_frame);
- #endif
- _PyStackRef temp = retval;
- stack_pointer += -1;
- assert(WITHIN_STACK_BOUNDS());
- _PyFrame_SetStackPointer(frame, stack_pointer);
- assert(EMPTY());
- _Py_LeaveRecursiveCallPy(tstate);
- // GH-99729: We need to unlink the frame *before* clearing it:
- _PyInterpreterFrame *dying = frame;
- frame = tstate->current_frame = dying->previous;
- _PyEval_FrameClearAndPop(tstate, dying);
- stack_pointer = _PyFrame_GetStackPointer(frame);
- LOAD_IP(frame->return_offset);
- res = temp;
- LLTRACE_RESUME_FRAME();
- }
- stack_pointer[0] = res;
- stack_pointer += 1;
- assert(WITHIN_STACK_BOUNDS());
- DISPATCH();
- }
-
TARGET(INSTRUMENTED_RETURN_VALUE) {
_Py_CODEUNIT* const this_instr = frame->instr_ptr = next_instr;
(void)this_instr;
@@ -5901,6 +5848,7 @@
frame->instr_ptr = next_instr;
next_instr += 1;
INSTRUCTION_STATS(LOAD_CONST);
+ PREDICTED(LOAD_CONST);
_PyStackRef value;
value = PyStackRef_FromPyObjectNew(GETITEM(FRAME_CO_CONSTS, oparg));
stack_pointer[0] = value;
@@ -5909,6 +5857,21 @@
DISPATCH();
}
+ TARGET(LOAD_CONST_IMMORTAL) {
+ frame->instr_ptr = next_instr;
+ next_instr += 1;
+ INSTRUCTION_STATS(LOAD_CONST_IMMORTAL);
+ static_assert(0 == 0, "incorrect cache size");
+ _PyStackRef value;
+ PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg);
+ assert(_Py_IsImmortal(obj));
+ value = PyStackRef_FromPyObjectImmortal(obj);
+ stack_pointer[0] = value;
+ stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
+ DISPATCH();
+ }
+
TARGET(LOAD_DEREF) {
frame->instr_ptr = next_instr;
next_instr += 1;
@@ -6263,6 +6226,20 @@
DISPATCH();
}
+ TARGET(LOAD_SMALL_INT) {
+ frame->instr_ptr = next_instr;
+ next_instr += 1;
+ INSTRUCTION_STATS(LOAD_SMALL_INT);
+ _PyStackRef value;
+ assert(oparg < _PY_NSMALLPOSINTS);
+ PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg];
+ value = PyStackRef_FromPyObjectImmortal(obj);
+ stack_pointer[0] = value;
+ stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
+ DISPATCH();
+ }
+
TARGET(LOAD_SPECIAL) {
frame->instr_ptr = next_instr;
next_instr += 1;
@@ -6951,42 +6928,6 @@
DISPATCH();
}
- TARGET(RETURN_CONST) {
- frame->instr_ptr = next_instr;
- next_instr += 1;
- INSTRUCTION_STATS(RETURN_CONST);
- _PyStackRef value;
- _PyStackRef retval;
- _PyStackRef res;
- // _LOAD_CONST
- {
- value = PyStackRef_FromPyObjectNew(GETITEM(FRAME_CO_CONSTS, oparg));
- }
- // _RETURN_VALUE
- {
- retval = value;
- #if TIER_ONE
- assert(frame != &entry_frame);
- #endif
- _PyStackRef temp = retval;
- _PyFrame_SetStackPointer(frame, stack_pointer);
- assert(EMPTY());
- _Py_LeaveRecursiveCallPy(tstate);
- // GH-99729: We need to unlink the frame *before* clearing it:
- _PyInterpreterFrame *dying = frame;
- frame = tstate->current_frame = dying->previous;
- _PyEval_FrameClearAndPop(tstate, dying);
- stack_pointer = _PyFrame_GetStackPointer(frame);
- LOAD_IP(frame->return_offset);
- res = temp;
- LLTRACE_RESUME_FRAME();
- }
- stack_pointer[0] = res;
- stack_pointer += 1;
- assert(WITHIN_STACK_BOUNDS());
- DISPATCH();
- }
-
TARGET(RETURN_GENERATOR) {
frame->instr_ptr = next_instr;
next_instr += 1;