diff options
author | Mark Shannon <mark@hotpy.org> | 2023-03-13 10:34:54 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-13 10:34:54 +0000 |
commit | 233e32f93614255bf5fc7c93cd98af453e58cc98 (patch) | |
tree | 9eb812f9894064fb34f5e2ee14a019ec4a58da32 /Python/bytecodes.c | |
parent | 78e4e6c3d71980d4e6687f07afa6ddfc83e29b04 (diff) | |
download | cpython-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.c | 15 |
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)) { |