monoeg_g_qsort_with_data (void * base, size_t nmemb, size_t size, gint (*GCompareDataFunc) (const void *, const void *, void *) compare, void * user_data)
{
  int iftmp.0;
  unsigned int base.1;
  unsigned int D.4688;
  unsigned int D.4690;
  unsigned int D.4692;
  unsigned int D.4693;
  unsigned int D.4698;
  sizetype D.4699;
  long int * __a.2;
  long int D.4701;
  long int * __b.3;
  char * __a.4;
  char D.4705;
  char * __b.5;
  char * D.4708;
  int D.4709;
  unsigned int D.4710;
  unsigned int D.4711;
  int D.4712;
  long int * __a.6;
  long int D.4718;
  long int * __b.7;
  char * __a.8;
  char D.4722;
  char * __b.9;
  int D.4724;
  long int * __a.10;
  long int D.4730;
  long int * __b.11;
  char * __a.12;
  char D.4734;
  char * __b.13;
  int D.4736;
  long int * __a.14;
  long int D.4742;
  long int * __b.15;
  char * __a.16;
  char D.4746;
  char * __b.17;
  int D.4749;
  int D.4751;
  long int * __a.18;
  long int D.4756;
  long int * __b.19;
  char * __a.20;
  char D.4760;
  char * __b.21;
  long int * __a.22;
  long int D.4772;
  long int * __b.23;
  char * __a.24;
  char D.4776;
  char * __b.25;
  int hi.26;
  int k.27;
  int D.4780;
  unsigned int D.4781;
  int lo.28;
  int D.4783;
  unsigned int D.4784;
  char * D.4789;
  struct QSortStack stack[32];
  struct QSortStack * sp;
  register char * i;
  register char * k;
  register char * mid;
  size_t n;
  size_t n1;
  size_t n2;
  char * lo;
  char * hi;
  int swaplong;

  try
    {
      if (nmemb <= 1) goto <D.4682>; else goto <D.4683>;
      <D.4682>:
      return;
      <D.4683>:
      base.1 = (unsigned int) base;
      D.4688 = base.1 & 3;
      if (D.4688 == 0) goto <D.4689>; else goto <D.4685>;
      <D.4689>:
      D.4690 = size & 3;
      if (D.4690 == 0) goto <D.4691>; else goto <D.4685>;
      <D.4691>:
      iftmp.0 = 1;
      goto <D.4686>;
      <D.4685>:
      iftmp.0 = 0;
      <D.4686>:
      swaplong = iftmp.0;
      sp = &stack;
      sp->array = base;
      sp->count = nmemb;
      sp = sp + 8;
      <D.4679>:
      sp = sp + 4294967288;
      lo = sp->array;
      n = sp->count;
      D.4692 = n + 4294967295;
      D.4693 = D.4692 * size;
      hi = lo + D.4693;
      if (n <= 6) goto <D.4694>; else goto <D.4695>;
      <D.4694>:
      i = lo + size;
      goto <D.4608>;
      <D.4607>:
      k = i;
      goto <D.4605>;
      <D.4604>:
      if (swaplong != 0) goto <D.4696>; else goto <D.4697>;
      <D.4696>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.4698 = size / 4;
        __n = (long int) D.4698;
        D.4699 = -size;
        __a = k + D.4699;
        __b = k;
        <D.4596>:
        t = *__a;
        __a.2 = __a;
        __a = __a.2 + 4;
        D.4701 = *__b;
        *__a.2 = D.4701;
        __b.3 = __b;
        __b = __b.3 + 4;
        *__b.3 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4596>; else goto <D.4597>;
        <D.4597>:
      }
      goto <D.4703>;
      <D.4697>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        D.4699 = -size;
        __a = k + D.4699;
        __b = k;
        <D.4602>:
        t = *__a;
        __a.4 = __a;
        __a = __a.4 + 1;
        D.4705 = *__b;
        *__a.4 = D.4705;
        __b.5 = __b;
        __b = __b.5 + 1;
        *__b.5 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4602>; else goto <D.4603>;
        <D.4603>:
      }
      <D.4703>:
      D.4699 = -size;
      k = k + D.4699;
      <D.4605>:
      if (k > lo) goto <D.4707>; else goto <D.4606>;
      <D.4707>:
      D.4699 = -size;
      D.4708 = k + D.4699;
      D.4709 = compare (D.4708, k, user_data);
      if (D.4709 > 0) goto <D.4604>; else goto <D.4606>;
      <D.4606>:
      i = i + size;
      <D.4608>:
      if (i <= hi) goto <D.4607>; else goto <D.4609>;
      <D.4609>:
      // predicted unlikely by continue predictor.
      goto <D.4610>;
      <D.4695>:
      D.4710 = n / 2;
      D.4711 = D.4710 * size;
      mid = lo + D.4711;
      D.4712 = compare (mid, lo, user_data);
      if (D.4712 < 0) goto <D.4713>; else goto <D.4714>;
      <D.4713>:
      if (swaplong != 0) goto <D.4715>; else goto <D.4716>;
      <D.4715>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.4698 = size / 4;
        __n = (long int) D.4698;
        __a = mid;
        __b = lo;
        <D.4615>:
        t = *__a;
        __a.6 = __a;
        __a = __a.6 + 4;
        D.4718 = *__b;
        *__a.6 = D.4718;
        __b.7 = __b;
        __b = __b.7 + 4;
        *__b.7 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4615>; else goto <D.4616>;
        <D.4616>:
      }
      goto <D.4720>;
      <D.4716>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = lo;
        <D.4621>:
        t = *__a;
        __a.8 = __a;
        __a = __a.8 + 1;
        D.4722 = *__b;
        *__a.8 = D.4722;
        __b.9 = __b;
        __b = __b.9 + 1;
        *__b.9 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4621>; else goto <D.4622>;
        <D.4622>:
      }
      <D.4720>:
      <D.4714>:
      D.4724 = compare (hi, mid, user_data);
      if (D.4724 < 0) goto <D.4725>; else goto <D.4726>;
      <D.4725>:
      if (swaplong != 0) goto <D.4727>; else goto <D.4728>;
      <D.4727>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.4698 = size / 4;
        __n = (long int) D.4698;
        __a = mid;
        __b = hi;
        <D.4627>:
        t = *__a;
        __a.10 = __a;
        __a = __a.10 + 4;
        D.4730 = *__b;
        *__a.10 = D.4730;
        __b.11 = __b;
        __b = __b.11 + 4;
        *__b.11 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4627>; else goto <D.4628>;
        <D.4628>:
      }
      goto <D.4732>;
      <D.4728>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = hi;
        <D.4633>:
        t = *__a;
        __a.12 = __a;
        __a = __a.12 + 1;
        D.4734 = *__b;
        *__a.12 = D.4734;
        __b.13 = __b;
        __b = __b.13 + 1;
        *__b.13 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4633>; else goto <D.4634>;
        <D.4634>:
      }
      <D.4732>:
      D.4736 = compare (mid, lo, user_data);
      if (D.4736 < 0) goto <D.4737>; else goto <D.4738>;
      <D.4737>:
      if (swaplong != 0) goto <D.4739>; else goto <D.4740>;
      <D.4739>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.4698 = size / 4;
        __n = (long int) D.4698;
        __a = mid;
        __b = lo;
        <D.4639>:
        t = *__a;
        __a.14 = __a;
        __a = __a.14 + 4;
        D.4742 = *__b;
        *__a.14 = D.4742;
        __b.15 = __b;
        __b = __b.15 + 4;
        *__b.15 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4639>; else goto <D.4640>;
        <D.4640>:
      }
      goto <D.4744>;
      <D.4740>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = lo;
        <D.4645>:
        t = *__a;
        __a.16 = __a;
        __a = __a.16 + 1;
        D.4746 = *__b;
        *__a.16 = D.4746;
        __b.17 = __b;
        __b = __b.17 + 1;
        *__b.17 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4645>; else goto <D.4646>;
        <D.4646>:
      }
      <D.4744>:
      <D.4738>:
      <D.4726>:
      i = lo + size;
      D.4699 = -size;
      k = hi + D.4699;
      <D.4666>:
      goto <D.4648>;
      <D.4647>:
      i = i + size;
      <D.4648>:
      if (i < k) goto <D.4748>; else goto <D.4649>;
      <D.4748>:
      D.4749 = compare (i, mid, user_data);
      if (D.4749 <= 0) goto <D.4647>; else goto <D.4649>;
      <D.4649>:
      goto <D.4651>;
      <D.4650>:
      D.4699 = -size;
      k = k + D.4699;
      <D.4651>:
      if (k >= i) goto <D.4750>; else goto <D.4652>;
      <D.4750>:
      D.4751 = compare (mid, k, user_data);
      if (D.4751 < 0) goto <D.4650>; else goto <D.4652>;
      <D.4652>:
      if (k <= i) goto <D.4653>; else goto <D.4752>;
      <D.4752>:
      if (swaplong != 0) goto <D.4753>; else goto <D.4754>;
      <D.4753>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.4698 = size / 4;
        __n = (long int) D.4698;
        __a = i;
        __b = k;
        <D.4658>:
        t = *__a;
        __a.18 = __a;
        __a = __a.18 + 4;
        D.4756 = *__b;
        *__a.18 = D.4756;
        __b.19 = __b;
        __b = __b.19 + 4;
        *__b.19 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4658>; else goto <D.4659>;
        <D.4659>:
      }
      goto <D.4758>;
      <D.4754>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = i;
        __b = k;
        <D.4664>:
        t = *__a;
        __a.20 = __a;
        __a = __a.20 + 1;
        D.4760 = *__b;
        *__a.20 = D.4760;
        __b.21 = __b;
        __b = __b.21 + 1;
        *__b.21 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4664>; else goto <D.4665>;
        <D.4665>:
      }
      <D.4758>:
      if (mid == i) goto <D.4762>; else goto <D.4763>;
      <D.4762>:
      mid = k;
      goto <D.4764>;
      <D.4763>:
      if (mid == k) goto <D.4765>; else goto <D.4766>;
      <D.4765>:
      mid = i;
      <D.4766>:
      <D.4764>:
      i = i + size;
      D.4699 = -size;
      k = k + D.4699;
      goto <D.4666>;
      <D.4653>:
      if (k != mid) goto <D.4767>; else goto <D.4768>;
      <D.4767>:
      if (swaplong != 0) goto <D.4769>; else goto <D.4770>;
      <D.4769>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.4698 = size / 4;
        __n = (long int) D.4698;
        __a = mid;
        __b = k;
        <D.4671>:
        t = *__a;
        __a.22 = __a;
        __a = __a.22 + 4;
        D.4772 = *__b;
        *__a.22 = D.4772;
        __b.23 = __b;
        __b = __b.23 + 4;
        *__b.23 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4671>; else goto <D.4672>;
        <D.4672>:
      }
      goto <D.4774>;
      <D.4770>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = k;
        <D.4677>:
        t = *__a;
        __a.24 = __a;
        __a = __a.24 + 1;
        D.4776 = *__b;
        *__a.24 = D.4776;
        __b.25 = __b;
        __b = __b.25 + 1;
        *__b.25 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4677>; else goto <D.4678>;
        <D.4678>:
      }
      <D.4774>:
      <D.4768>:
      hi.26 = (int) hi;
      k.27 = (int) k;
      D.4780 = hi.26 - k.27;
      D.4781 = (unsigned int) D.4780;
      n2 = D.4781 / size;
      k.27 = (int) k;
      lo.28 = (int) lo;
      D.4783 = k.27 - lo.28;
      D.4784 = (unsigned int) D.4783;
      n1 = D.4784 / size;
      if (n2 > n1) goto <D.4785>; else goto <D.4786>;
      <D.4785>:
      if (n2 > 1) goto <D.4787>; else goto <D.4788>;
      <D.4787>:
      D.4789 = k + size;
      sp->array = D.4789;
      sp->count = n2;
      sp = sp + 8;
      <D.4788>:
      if (n1 > 1) goto <D.4790>; else goto <D.4791>;
      <D.4790>:
      sp->array = lo;
      sp->count = n1;
      sp = sp + 8;
      <D.4791>:
      goto <D.4792>;
      <D.4786>:
      if (n1 > 1) goto <D.4793>; else goto <D.4794>;
      <D.4793>:
      sp->array = lo;
      sp->count = n1;
      sp = sp + 8;
      <D.4794>:
      if (n2 > 1) goto <D.4795>; else goto <D.4796>;
      <D.4795>:
      D.4789 = k + size;
      sp->array = D.4789;
      sp->count = n2;
      sp = sp + 8;
      <D.4796>:
      <D.4792>:
      <D.4610>:
      if (&stack < sp) goto <D.4679>; else goto <D.4680>;
      <D.4680>:
    }
  finally
    {
      stack = {CLOBBER};
    }
}


