bpo-45510: Specialize BINARY_SUBTRACT by corona10 · Pull Request #29523 · python/cpython
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();