aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/bytecodes.c
diff options
context:
space:
mode:
authorKen Jin <kenjin@python.org>2025-06-24 00:57:14 +0800
committerGitHub <noreply@github.com>2025-06-24 00:57:14 +0800
commit569fc6870f048cb75469ae3cacb6ebcf5172a10e (patch)
tree77886385cd62a79bedcbcce9aa622914bc4a9ab5 /Python/bytecodes.c
parent99712c45ccaab4bbe83eac38d73bab91bf0f4a02 (diff)
downloadcpython-569fc6870f048cb75469ae3cacb6ebcf5172a10e.tar.gz
cpython-569fc6870f048cb75469ae3cacb6ebcf5172a10e.zip
gh-134584: Specialize POP_TOP by reference and type in JIT (GH-135761)
Diffstat (limited to 'Python/bytecodes.c')
-rw-r--r--Python/bytecodes.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/Python/bytecodes.c b/Python/bytecodes.c
index 307844d38cc..535e552e047 100644
--- a/Python/bytecodes.c
+++ b/Python/bytecodes.c
@@ -344,6 +344,27 @@ dummy_func(
PyStackRef_XCLOSE(value);
}
+ op(_POP_TOP_NOP, (value --)) {
+ assert(PyStackRef_IsNull(value) || (!PyStackRef_RefcountOnObject(value)) ||
+ _Py_IsImmortal((PyStackRef_AsPyObjectBorrow(value))));
+ DEAD(value);
+ }
+
+ op(_POP_TOP_INT, (value --)) {
+ assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
+ PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc);
+ }
+
+ op(_POP_TOP_FLOAT, (value --)) {
+ assert(PyFloat_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
+ PyStackRef_CLOSE_SPECIALIZED(value, _PyFloat_ExactDealloc);
+ }
+
+ op(_POP_TOP_UNICODE, (value --)) {
+ assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
+ PyStackRef_CLOSE_SPECIALIZED(value, _PyUnicode_ExactDealloc);
+ }
+
tier2 op(_POP_TWO, (nos, tos --)) {
PyStackRef_CLOSE(tos);
PyStackRef_CLOSE(nos);