https://github.com/python/cpython/commit/950667ed0737144666ea8e1ec1a7e9de2e49a628
commit: 950667ed0737144666ea8e1ec1a7e9de2e49a628
branch: main
author: Mark Shannon <[email protected]>
committer: markshannon <[email protected]>
date: 2024-03-15T17:16:30Z
summary:
GH-115802: Reduce the size of _INIT_CALL_PY_EXACT_ARGS. (GH-116856)
files:
M Python/bytecodes.c
M Python/executor_cases.c.h
M Python/generated_cases.c.h
diff --git a/Python/bytecodes.c b/Python/bytecodes.c
index fb66ae583130db..476975d2fbc3c2 100644
--- a/Python/bytecodes.c
+++ b/Python/bytecodes.c
@@ -3150,16 +3150,14 @@ dummy_func(
}
replicate(5) pure op(_INIT_CALL_PY_EXACT_ARGS, (callable,
self_or_null, args[oparg] -- new_frame: _PyInterpreterFrame*)) {
- int argcount = oparg;
- if (self_or_null != NULL) {
- args--;
- argcount++;
- }
+ int has_self = (self_or_null != NULL);
STAT_INC(CALL, hit);
PyFunctionObject *func = (PyFunctionObject *)callable;
- new_frame = _PyFrame_PushUnchecked(tstate, func, argcount);
- for (int i = 0; i < argcount; i++) {
- new_frame->localsplus[i] = args[i];
+ new_frame = _PyFrame_PushUnchecked(tstate, func, oparg + has_self);
+ PyObject **first_non_self_local = new_frame->localsplus + has_self;
+ new_frame->localsplus[0] = self_or_null;
+ for (int i = 0; i < oparg; i++) {
+ first_non_self_local[i] = args[i];
}
}
diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h
index bdc9c0b1501c91..a55daa2c344944 100644
--- a/Python/executor_cases.c.h
+++ b/Python/executor_cases.c.h
@@ -2893,16 +2893,14 @@
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
- int argcount = oparg;
- if (self_or_null != NULL) {
- args--;
- argcount++;
- }
+ int has_self = (self_or_null != NULL);
STAT_INC(CALL, hit);
PyFunctionObject *func = (PyFunctionObject *)callable;
- new_frame = _PyFrame_PushUnchecked(tstate, func, argcount);
- for (int i = 0; i < argcount; i++) {
- new_frame->localsplus[i] = args[i];
+ new_frame = _PyFrame_PushUnchecked(tstate, func, oparg + has_self);
+ PyObject **first_non_self_local = new_frame->localsplus + has_self;
+ new_frame->localsplus[0] = self_or_null;
+ for (int i = 0; i < oparg; i++) {
+ first_non_self_local[i] = args[i];
}
stack_pointer[-2 - oparg] = (PyObject *)new_frame;
stack_pointer += -1 - oparg;
@@ -2919,16 +2917,14 @@
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
- int argcount = oparg;
- if (self_or_null != NULL) {
- args--;
- argcount++;
- }
+ int has_self = (self_or_null != NULL);
STAT_INC(CALL, hit);
PyFunctionObject *func = (PyFunctionObject *)callable;
- new_frame = _PyFrame_PushUnchecked(tstate, func, argcount);
- for (int i = 0; i < argcount; i++) {
- new_frame->localsplus[i] = args[i];
+ new_frame = _PyFrame_PushUnchecked(tstate, func, oparg + has_self);
+ PyObject **first_non_self_local = new_frame->localsplus + has_self;
+ new_frame->localsplus[0] = self_or_null;
+ for (int i = 0; i < oparg; i++) {
+ first_non_self_local[i] = args[i];
}
stack_pointer[-2 - oparg] = (PyObject *)new_frame;
stack_pointer += -1 - oparg;
@@ -2945,16 +2941,14 @@
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
- int argcount = oparg;
- if (self_or_null != NULL) {
- args--;
- argcount++;
- }
+ int has_self = (self_or_null != NULL);
STAT_INC(CALL, hit);
PyFunctionObject *func = (PyFunctionObject *)callable;
- new_frame = _PyFrame_PushUnchecked(tstate, func, argcount);
- for (int i = 0; i < argcount; i++) {
- new_frame->localsplus[i] = args[i];
+ new_frame = _PyFrame_PushUnchecked(tstate, func, oparg + has_self);
+ PyObject **first_non_self_local = new_frame->localsplus + has_self;
+ new_frame->localsplus[0] = self_or_null;
+ for (int i = 0; i < oparg; i++) {
+ first_non_self_local[i] = args[i];
}
stack_pointer[-2 - oparg] = (PyObject *)new_frame;
stack_pointer += -1 - oparg;
@@ -2971,16 +2965,14 @@
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
- int argcount = oparg;
- if (self_or_null != NULL) {
- args--;
- argcount++;
- }
+ int has_self = (self_or_null != NULL);
STAT_INC(CALL, hit);
PyFunctionObject *func = (PyFunctionObject *)callable;
- new_frame = _PyFrame_PushUnchecked(tstate, func, argcount);
- for (int i = 0; i < argcount; i++) {
- new_frame->localsplus[i] = args[i];
+ new_frame = _PyFrame_PushUnchecked(tstate, func, oparg + has_self);
+ PyObject **first_non_self_local = new_frame->localsplus + has_self;
+ new_frame->localsplus[0] = self_or_null;
+ for (int i = 0; i < oparg; i++) {
+ first_non_self_local[i] = args[i];
}
stack_pointer[-2 - oparg] = (PyObject *)new_frame;
stack_pointer += -1 - oparg;
@@ -2997,16 +2989,14 @@
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
- int argcount = oparg;
- if (self_or_null != NULL) {
- args--;
- argcount++;
- }
+ int has_self = (self_or_null != NULL);
STAT_INC(CALL, hit);
PyFunctionObject *func = (PyFunctionObject *)callable;
- new_frame = _PyFrame_PushUnchecked(tstate, func, argcount);
- for (int i = 0; i < argcount; i++) {
- new_frame->localsplus[i] = args[i];
+ new_frame = _PyFrame_PushUnchecked(tstate, func, oparg + has_self);
+ PyObject **first_non_self_local = new_frame->localsplus + has_self;
+ new_frame->localsplus[0] = self_or_null;
+ for (int i = 0; i < oparg; i++) {
+ first_non_self_local[i] = args[i];
}
stack_pointer[-2 - oparg] = (PyObject *)new_frame;
stack_pointer += -1 - oparg;
@@ -3022,16 +3012,14 @@
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
- int argcount = oparg;
- if (self_or_null != NULL) {
- args--;
- argcount++;
- }
+ int has_self = (self_or_null != NULL);
STAT_INC(CALL, hit);
PyFunctionObject *func = (PyFunctionObject *)callable;
- new_frame = _PyFrame_PushUnchecked(tstate, func, argcount);
- for (int i = 0; i < argcount; i++) {
- new_frame->localsplus[i] = args[i];
+ new_frame = _PyFrame_PushUnchecked(tstate, func, oparg + has_self);
+ PyObject **first_non_self_local = new_frame->localsplus + has_self;
+ new_frame->localsplus[0] = self_or_null;
+ for (int i = 0; i < oparg; i++) {
+ first_non_self_local[i] = args[i];
}
stack_pointer[-2 - oparg] = (PyObject *)new_frame;
stack_pointer += -1 - oparg;
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h
index 82d7b7621f8b25..2996ee72e7f2c6 100644
--- a/Python/generated_cases.c.h
+++ b/Python/generated_cases.c.h
@@ -968,16 +968,14 @@
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
{
- int argcount = oparg;
- if (self_or_null != NULL) {
- args--;
- argcount++;
- }
+ int has_self = (self_or_null != NULL);
STAT_INC(CALL, hit);
PyFunctionObject *func = (PyFunctionObject *)callable;
- new_frame = _PyFrame_PushUnchecked(tstate, func, argcount);
- for (int i = 0; i < argcount; i++) {
- new_frame->localsplus[i] = args[i];
+ new_frame = _PyFrame_PushUnchecked(tstate, func, oparg +
has_self);
+ PyObject **first_non_self_local = new_frame->localsplus +
has_self;
+ new_frame->localsplus[0] = self_or_null;
+ for (int i = 0; i < oparg; i++) {
+ first_non_self_local[i] = args[i];
}
}
// _SAVE_RETURN_OFFSET
@@ -1759,16 +1757,14 @@
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
{
- int argcount = oparg;
- if (self_or_null != NULL) {
- args--;
- argcount++;
- }
+ int has_self = (self_or_null != NULL);
STAT_INC(CALL, hit);
PyFunctionObject *func = (PyFunctionObject *)callable;
- new_frame = _PyFrame_PushUnchecked(tstate, func, argcount);
- for (int i = 0; i < argcount; i++) {
- new_frame->localsplus[i] = args[i];
+ new_frame = _PyFrame_PushUnchecked(tstate, func, oparg +
has_self);
+ PyObject **first_non_self_local = new_frame->localsplus +
has_self;
+ new_frame->localsplus[0] = self_or_null;
+ for (int i = 0; i < oparg; i++) {
+ first_non_self_local[i] = args[i];
}
}
// _SAVE_RETURN_OFFSET
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]