mirror of
https://github.com/python/cpython.git
synced 2025-07-13 22:35:18 +00:00
bpo-45510: Specialize BINARY_SUBTRACT (GH-29523)
This commit is contained in:
parent
0920b61a0c
commit
345ba3f080
7 changed files with 107 additions and 50 deletions
|
@ -2009,6 +2009,41 @@ check_eval_breaker:
|
|||
DISPATCH();
|
||||
}
|
||||
|
||||
TARGET(BINARY_OP_SUBTRACT_INT) {
|
||||
PyObject *left = SECOND();
|
||||
PyObject *right = TOP();
|
||||
DEOPT_IF(!PyLong_CheckExact(left), BINARY_OP);
|
||||
DEOPT_IF(!PyLong_CheckExact(right), BINARY_OP);
|
||||
STAT_INC(BINARY_OP, hit);
|
||||
PyObject *sub = _PyLong_Subtract((PyLongObject *)left, (PyLongObject *)right);
|
||||
SET_SECOND(sub);
|
||||
Py_DECREF(right);
|
||||
Py_DECREF(left);
|
||||
STACK_SHRINK(1);
|
||||
if (sub == NULL) {
|
||||
goto error;
|
||||
}
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
TARGET(BINARY_OP_SUBTRACT_FLOAT) {
|
||||
PyObject *left = SECOND();
|
||||
PyObject *right = TOP();
|
||||
DEOPT_IF(!PyFloat_CheckExact(left), BINARY_OP);
|
||||
DEOPT_IF(!PyFloat_CheckExact(right), BINARY_OP);
|
||||
STAT_INC(BINARY_OP, hit);
|
||||
double dsub = ((PyFloatObject *)left)->ob_fval - ((PyFloatObject *)right)->ob_fval;
|
||||
PyObject *sub = PyFloat_FromDouble(dsub);
|
||||
SET_SECOND(sub);
|
||||
Py_DECREF(right);
|
||||
Py_DECREF(left);
|
||||
STACK_SHRINK(1);
|
||||
if (sub == NULL) {
|
||||
goto error;
|
||||
}
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
TARGET(BINARY_OP_ADD_UNICODE) {
|
||||
PyObject *left = SECOND();
|
||||
PyObject *right = TOP();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue