diff -r d00a1c46fff7 Objects/longobject.c --- a/Objects/longobject.c Thu Feb 04 14:08:23 2016 -0500 +++ b/Objects/longobject.c Thu Feb 04 21:05:40 2016 -0500 @@ -3565,7 +3565,29 @@ { PyLongObject *div; - CHECK_BINOP(a, b); + if (PyLong_CheckExact(a) && PyLong_CheckExact(b)) { + if (Py_ABS(Py_SIZE(a)) == 1 && Py_ABS(Py_SIZE(b)) == 1) { + sdigit left = ((PyLongObject*)a)->ob_digit[0]; + sdigit right = ((PyLongObject*)b)->ob_digit[0]; + sdigit div; + + if (Py_SIZE(a) != Py_SIZE(b)) { + left = -left; + div = left / right; + if (left - div * right) { + /* we want floor */ + --div; + } + + return PyLong_FromLong(div); + } else { + return PyLong_FromLong(left / right); + } + } + } else { + CHECK_BINOP(a, b); + } + if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0) div = NULL; return (PyObject *)div;