diff --git a/Include/internal/pycore_executor_externals.h b/Include/internal/pycore_executor_externals.h index f11ec78a89c822..837a7689555694 100644 --- a/Include/internal/pycore_executor_externals.h +++ b/Include/internal/pycore_executor_externals.h @@ -18,8 +18,6 @@ extern "C" { #include "pytypedefs.h" #include "pycore_frame.h" - extern PyAPI_FUNC(PyObject **) _Py_COMPARE_OP_FLOAT_func(PyThreadState *tstate, _PyInterpreterFrame *frame, PyObject **stack_pointer, int oparg); - extern PyAPI_FUNC(PyObject **) _Py_INIT_CALL_PY_EXACT_ARGS_0_func(PyThreadState *tstate, _PyInterpreterFrame *frame, PyObject **stack_pointer); extern PyAPI_FUNC(PyObject **) _Py_INIT_CALL_PY_EXACT_ARGS_1_func(PyThreadState *tstate, _PyInterpreterFrame *frame, PyObject **stack_pointer); diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 3fdc259e4f058e..1cff7f7f336124 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -2234,7 +2234,23 @@ } case _COMPARE_OP_FLOAT: { - stack_pointer = _Py_COMPARE_OP_FLOAT_func(tstate, frame, stack_pointer, CURRENT_OPARG()); + PyObject *right; + PyObject *left; + PyObject *res; + oparg = CURRENT_OPARG(); + right = stack_pointer[-1]; + left = stack_pointer[-2]; + STAT_INC(COMPARE_OP, hit); + double dleft = PyFloat_AS_DOUBLE(left); + double dright = PyFloat_AS_DOUBLE(right); + // 1 if NaN, 2 if <, 4 if >, 8 if ==; this matches low four bits of the oparg + int sign_ish = COMPARISON_BIT(dleft, dright); + _Py_DECREF_SPECIALIZED(left, _PyFloat_ExactDealloc); + _Py_DECREF_SPECIALIZED(right, _PyFloat_ExactDealloc); + res = (sign_ish & oparg) ? Py_True : Py_False; + // It's always a bool, so we don't care about oparg & 16. + stack_pointer[-2] = res; + stack_pointer += -1; break; } diff --git a/Python/executor_externals.c b/Python/executor_externals.c index 203c5c96ac86fa..420b0acf2370cf 100644 --- a/Python/executor_externals.c +++ b/Python/executor_externals.c @@ -24,26 +24,6 @@ #include "ceval_macros.h" - PyAPI_FUNC(PyObject **) _Py_COMPARE_OP_FLOAT_func(PyThreadState *tstate, _PyInterpreterFrame *frame, PyObject **stack_pointer, int oparg) { - PyObject *right; - PyObject *left; - PyObject *res; - right = stack_pointer[-1]; - left = stack_pointer[-2]; - STAT_INC(COMPARE_OP, hit); - double dleft = PyFloat_AS_DOUBLE(left); - double dright = PyFloat_AS_DOUBLE(right); - // 1 if NaN, 2 if <, 4 if >, 8 if ==; this matches low four bits of the oparg - int sign_ish = COMPARISON_BIT(dleft, dright); - _Py_DECREF_SPECIALIZED(left, _PyFloat_ExactDealloc); - _Py_DECREF_SPECIALIZED(right, _PyFloat_ExactDealloc); - res = (sign_ish & oparg) ? Py_True : Py_False; - // It's always a bool, so we don't care about oparg & 16. - stack_pointer[-2] = res; - stack_pointer += -1; - return stack_pointer; - } - PyAPI_FUNC(PyObject **) _Py_INIT_CALL_PY_EXACT_ARGS_0_func(PyThreadState *tstate, _PyInterpreterFrame *frame, PyObject **stack_pointer) { int oparg; PyObject **args;