mono_binary_search (const void * key, const void * array, size_t array_length, size_t member_size, int (*BinarySearchComparer) (const void *, const void *) comparer)
{
  long unsigned int D.3055;
  long unsigned int D.3056;
  void * D.3059;
  const char * base;
  size_t lim;
  int cmp;
  const void * p;

  base = array;
  lim = array_length;
  goto <D.3052>;
  <D.3051>:
  D.3055 = lim >> 1;
  D.3056 = D.3055 * member_size;
  p = base + D.3056;
  cmp = comparer (key, p);
  if (cmp == 0) goto <D.3057>; else goto <D.3058>;
  <D.3057>:
  D.3059 = p;
  return D.3059;
  <D.3058>:
  if (cmp > 0) goto <D.3060>; else goto <D.3061>;
  <D.3060>:
  base = p + member_size;
  lim = lim + 18446744073709551615;
  <D.3061>:
  lim = lim >> 1;
  <D.3052>:
  if (lim != 0) goto <D.3051>; else goto <D.3053>;
  <D.3053>:
  D.3059 = 0B;
  return D.3059;
}


