summaryrefslogtreecommitdiff
path: root/Python/bytecodes.c
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2023-03-13 10:34:54 +0000
committerGitHub <noreply@github.com>2023-03-13 10:34:54 +0000
commit233e32f93614255bf5fc7c93cd98af453e58cc98 (patch)
tree9eb812f9894064fb34f5e2ee14a019ec4a58da32 /Python/bytecodes.c
parent78e4e6c3d71980d4e6687f07afa6ddfc83e29b04 (diff)
downloadcpython-git-233e32f93614255bf5fc7c93cd98af453e58cc98.tar.gz
GH-102300: Reuse objects with refcount == 1 in float specialized binary ops. (GH-102301)
Diffstat (limited to 'Python/bytecodes.c')
-rw-r--r--Python/bytecodes.c15
1 files changed, 3 insertions, 12 deletions
diff --git a/Python/bytecodes.c b/Python/bytecodes.c
index dc2a20f22b..178519fcb6 100644
--- a/Python/bytecodes.c
+++ b/Python/bytecodes.c
@@ -195,10 +195,7 @@ dummy_func(
STAT_INC(BINARY_OP, hit);
double dprod = ((PyFloatObject *)left)->ob_fval *
((PyFloatObject *)right)->ob_fval;
- prod = PyFloat_FromDouble(dprod);
- _Py_DECREF_SPECIALIZED(right, _PyFloat_ExactDealloc);
- _Py_DECREF_SPECIALIZED(left, _PyFloat_ExactDealloc);
- ERROR_IF(prod == NULL, error);
+ DECREF_INPUTS_AND_REUSE_FLOAT(left, right, dprod, prod);
}
inst(BINARY_OP_SUBTRACT_INT, (unused/1, left, right -- sub)) {
@@ -218,10 +215,7 @@ dummy_func(
DEOPT_IF(!PyFloat_CheckExact(right), BINARY_OP);
STAT_INC(BINARY_OP, hit);
double dsub = ((PyFloatObject *)left)->ob_fval - ((PyFloatObject *)right)->ob_fval;
- sub = PyFloat_FromDouble(dsub);
- _Py_DECREF_SPECIALIZED(right, _PyFloat_ExactDealloc);
- _Py_DECREF_SPECIALIZED(left, _PyFloat_ExactDealloc);
- ERROR_IF(sub == NULL, error);
+ DECREF_INPUTS_AND_REUSE_FLOAT(left, right, dsub, sub);
}
inst(BINARY_OP_ADD_UNICODE, (unused/1, left, right -- res)) {
@@ -278,10 +272,7 @@ dummy_func(
STAT_INC(BINARY_OP, hit);
double dsum = ((PyFloatObject *)left)->ob_fval +
((PyFloatObject *)right)->ob_fval;
- sum = PyFloat_FromDouble(dsum);
- _Py_DECREF_SPECIALIZED(right, _PyFloat_ExactDealloc);
- _Py_DECREF_SPECIALIZED(left, _PyFloat_ExactDealloc);
- ERROR_IF(sum == NULL, error);
+ DECREF_INPUTS_AND_REUSE_FLOAT(left, right, dsum, sum);
}
inst(BINARY_OP_ADD_INT, (unused/1, left, right -- sum)) {