int binary_search(const unsigned *a, int n, unsigned x)
{
const unsigned *base = a;
int len = n;
while (len > 1) {
int half = len >> 1;
const unsigned *mid = base + half;
__builtin_prefetch(mid - (half >> 1));
__builtin_prefetch(mid + (half >> 1));
int less = (*mid <= x);
base = less ? mid : base;
len -= half;
}
return (int)(base - a);
}