+
+uint __getbits(uint *B, int i, int d)
+{
+ ulong x;
+// uint y;
+ // y = __getbits_aux(B, i,d);
+ B += (i >> logD);
+ i &= (D-1);
+ x = ((ulong *) B)[0];
+ x = (x << 32)|(x >> 32);
+ x <<= i;
+ x >>= 2*D - d;
+// fprintf(stderr, "slow: %i, fast: %i\n",
+// y, (uint) x);
+ return x;
+}
+