Cleanup:  Define one internal utility for reversing a list slice, and
use that everywhere.
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 8173025..f24b95e 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -739,6 +739,22 @@
 	return v;
 }
 
+/* Reverse a slice of a list in place, from lo up to (exclusive) hi. */
+static void
+reverse_slice(PyObject **lo, PyObject **hi)
+{
+	assert(lo && hi);
+
+	--hi;
+	while (lo < hi) {
+		PyObject *t = *lo;
+		*lo = *hi;
+		*hi = t;
+		++lo;
+		--hi;
+	}
+}
+
 /* New quicksort implementation for arrays of object pointers.
    Thanks to discussions with Tim Peters. */
 
@@ -1026,14 +1042,8 @@
 	}
 	if (hi - r <= MAXMERGE) {
 		/* Reverse the reversed prefix, then insert the tail */
-		PyObject **originalr = r;
-		l = lo;
-		do {
-			--r;
-			tmp = *l; *l = *r; *r = tmp;
-			++l;
-		} while (l < r);
-		return binarysort(lo, hi, originalr, compare);
+		reverse_slice(lo, r);
+		return binarysort(lo, hi, r, compare);
 	}
 
 	/* ----------------------------------------------------------
@@ -1321,28 +1331,10 @@
 	return 0;
 }
 
-static void
-_listreverse(PyListObject *self)
-{
-	register PyObject **p, **q;
-	register PyObject *tmp;
-	
-	if (self->ob_size > 1) {
-		for (p = self->ob_item, q = self->ob_item + self->ob_size - 1;
-		     p < q;
-		     p++, q--)
-		{
-			tmp = *p;
-			*p = *q;
-			*q = tmp;
-		}
-	}
-}
-
 static PyObject *
 listreverse(PyListObject *self)
 {
-	_listreverse(self);
+	reverse_slice(self->ob_item, self->ob_item + self->ob_size);
 	Py_INCREF(Py_None);
 	return Py_None;
 }
@@ -1354,7 +1346,7 @@
 		PyErr_BadInternalCall();
 		return -1;
 	}
-	_listreverse((PyListObject *)v);
+	listreverse((PyListObject *)v);
 	return 0;
 }