do_cmp
shift = do_cmp(base + size, base + 2 * size, cmp_func, priv) <= 0;
b = do_cmp(base + c, base + d, cmp_func, priv) > 0 ? c : d;
while (b != a && do_cmp(base + a, base + b, cmp_func, priv) >= 0)
if (n == size * 2 && do_cmp(base, base + size, cmp_func, priv) > 0)