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.4708;
  unsigned int D.4710;
  unsigned int D.4712;
  unsigned int D.4713;
  unsigned int D.4718;
  sizetype D.4719;
  long int * __a.2;
  long int D.4721;
  long int * __b.3;
  char * __a.4;
  char D.4725;
  char * __b.5;
  char * D.4728;
  int D.4729;
  unsigned int D.4730;
  unsigned int D.4731;
  int D.4732;
  long int * __a.6;
  long int D.4738;
  long int * __b.7;
  char * __a.8;
  char D.4742;
  char * __b.9;
  int D.4744;
  long int * __a.10;
  long int D.4750;
  long int * __b.11;
  char * __a.12;
  char D.4754;
  char * __b.13;
  int D.4756;
  long int * __a.14;
  long int D.4762;
  long int * __b.15;
  char * __a.16;
  char D.4766;
  char * __b.17;
  int D.4769;
  int D.4771;
  long int * __a.18;
  long int D.4776;
  long int * __b.19;
  char * __a.20;
  char D.4780;
  char * __b.21;
  long int * __a.22;
  long int D.4792;
  long int * __b.23;
  char * __a.24;
  char D.4796;
  char * __b.25;
  int hi.26;
  int k.27;
  int D.4800;
  unsigned int D.4801;
  int lo.28;
  int D.4803;
  unsigned int D.4804;
  char * D.4809;
  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.4702>; else goto <D.4703>;
      <D.4702>:
      return;
      <D.4703>:
      base.1 = (unsigned int) base;
      D.4708 = base.1 & 3;
      if (D.4708 == 0) goto <D.4709>; else goto <D.4705>;
      <D.4709>:
      D.4710 = size & 3;
      if (D.4710 == 0) goto <D.4711>; else goto <D.4705>;
      <D.4711>:
      iftmp.0 = 1;
      goto <D.4706>;
      <D.4705>:
      iftmp.0 = 0;
      <D.4706>:
      swaplong = iftmp.0;
      sp = &stack;
      sp->array = base;
      sp->count = nmemb;
      sp = sp + 8;
      <D.4699>:
      sp = sp + 4294967288;
      lo = sp->array;
      n = sp->count;
      D.4712 = n + 4294967295;
      D.4713 = D.4712 * size;
      hi = lo + D.4713;
      if (n <= 6) goto <D.4714>; else goto <D.4715>;
      <D.4714>:
      i = lo + size;
      goto <D.4628>;
      <D.4627>:
      k = i;
      goto <D.4625>;
      <D.4624>:
      if (swaplong != 0) goto <D.4716>; else goto <D.4717>;
      <D.4716>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.4718 = size / 4;
        __n = (long int) D.4718;
        D.4719 = -size;
        __a = k + D.4719;
        __b = k;
        <D.4616>:
        t = *__a;
        __a.2 = __a;
        __a = __a.2 + 4;
        D.4721 = *__b;
        *__a.2 = D.4721;
        __b.3 = __b;
        __b = __b.3 + 4;
        *__b.3 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4616>; else goto <D.4617>;
        <D.4617>:
      }
      goto <D.4723>;
      <D.4717>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        D.4719 = -size;
        __a = k + D.4719;
        __b = k;
        <D.4622>:
        t = *__a;
        __a.4 = __a;
        __a = __a.4 + 1;
        D.4725 = *__b;
        *__a.4 = D.4725;
        __b.5 = __b;
        __b = __b.5 + 1;
        *__b.5 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4622>; else goto <D.4623>;
        <D.4623>:
      }
      <D.4723>:
      D.4719 = -size;
      k = k + D.4719;
      <D.4625>:
      if (k > lo) goto <D.4727>; else goto <D.4626>;
      <D.4727>:
      D.4719 = -size;
      D.4728 = k + D.4719;
      D.4729 = compare (D.4728, k, user_data);
      if (D.4729 > 0) goto <D.4624>; else goto <D.4626>;
      <D.4626>:
      i = i + size;
      <D.4628>:
      if (i <= hi) goto <D.4627>; else goto <D.4629>;
      <D.4629>:
      // predicted unlikely by continue predictor.
      goto <D.4630>;
      <D.4715>:
      D.4730 = n / 2;
      D.4731 = D.4730 * size;
      mid = lo + D.4731;
      D.4732 = compare (mid, lo, user_data);
      if (D.4732 < 0) goto <D.4733>; else goto <D.4734>;
      <D.4733>:
      if (swaplong != 0) goto <D.4735>; else goto <D.4736>;
      <D.4735>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.4718 = size / 4;
        __n = (long int) D.4718;
        __a = mid;
        __b = lo;
        <D.4635>:
        t = *__a;
        __a.6 = __a;
        __a = __a.6 + 4;
        D.4738 = *__b;
        *__a.6 = D.4738;
        __b.7 = __b;
        __b = __b.7 + 4;
        *__b.7 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4635>; else goto <D.4636>;
        <D.4636>:
      }
      goto <D.4740>;
      <D.4736>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = lo;
        <D.4641>:
        t = *__a;
        __a.8 = __a;
        __a = __a.8 + 1;
        D.4742 = *__b;
        *__a.8 = D.4742;
        __b.9 = __b;
        __b = __b.9 + 1;
        *__b.9 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4641>; else goto <D.4642>;
        <D.4642>:
      }
      <D.4740>:
      <D.4734>:
      D.4744 = compare (hi, mid, user_data);
      if (D.4744 < 0) goto <D.4745>; else goto <D.4746>;
      <D.4745>:
      if (swaplong != 0) goto <D.4747>; else goto <D.4748>;
      <D.4747>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.4718 = size / 4;
        __n = (long int) D.4718;
        __a = mid;
        __b = hi;
        <D.4647>:
        t = *__a;
        __a.10 = __a;
        __a = __a.10 + 4;
        D.4750 = *__b;
        *__a.10 = D.4750;
        __b.11 = __b;
        __b = __b.11 + 4;
        *__b.11 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4647>; else goto <D.4648>;
        <D.4648>:
      }
      goto <D.4752>;
      <D.4748>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = hi;
        <D.4653>:
        t = *__a;
        __a.12 = __a;
        __a = __a.12 + 1;
        D.4754 = *__b;
        *__a.12 = D.4754;
        __b.13 = __b;
        __b = __b.13 + 1;
        *__b.13 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4653>; else goto <D.4654>;
        <D.4654>:
      }
      <D.4752>:
      D.4756 = compare (mid, lo, user_data);
      if (D.4756 < 0) goto <D.4757>; else goto <D.4758>;
      <D.4757>:
      if (swaplong != 0) goto <D.4759>; else goto <D.4760>;
      <D.4759>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.4718 = size / 4;
        __n = (long int) D.4718;
        __a = mid;
        __b = lo;
        <D.4659>:
        t = *__a;
        __a.14 = __a;
        __a = __a.14 + 4;
        D.4762 = *__b;
        *__a.14 = D.4762;
        __b.15 = __b;
        __b = __b.15 + 4;
        *__b.15 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4659>; else goto <D.4660>;
        <D.4660>:
      }
      goto <D.4764>;
      <D.4760>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = lo;
        <D.4665>:
        t = *__a;
        __a.16 = __a;
        __a = __a.16 + 1;
        D.4766 = *__b;
        *__a.16 = D.4766;
        __b.17 = __b;
        __b = __b.17 + 1;
        *__b.17 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4665>; else goto <D.4666>;
        <D.4666>:
      }
      <D.4764>:
      <D.4758>:
      <D.4746>:
      i = lo + size;
      D.4719 = -size;
      k = hi + D.4719;
      <D.4686>:
      goto <D.4668>;
      <D.4667>:
      i = i + size;
      <D.4668>:
      if (i < k) goto <D.4768>; else goto <D.4669>;
      <D.4768>:
      D.4769 = compare (i, mid, user_data);
      if (D.4769 <= 0) goto <D.4667>; else goto <D.4669>;
      <D.4669>:
      goto <D.4671>;
      <D.4670>:
      D.4719 = -size;
      k = k + D.4719;
      <D.4671>:
      if (k >= i) goto <D.4770>; else goto <D.4672>;
      <D.4770>:
      D.4771 = compare (mid, k, user_data);
      if (D.4771 < 0) goto <D.4670>; else goto <D.4672>;
      <D.4672>:
      if (k <= i) goto <D.4673>; else goto <D.4772>;
      <D.4772>:
      if (swaplong != 0) goto <D.4773>; else goto <D.4774>;
      <D.4773>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.4718 = size / 4;
        __n = (long int) D.4718;
        __a = i;
        __b = k;
        <D.4678>:
        t = *__a;
        __a.18 = __a;
        __a = __a.18 + 4;
        D.4776 = *__b;
        *__a.18 = D.4776;
        __b.19 = __b;
        __b = __b.19 + 4;
        *__b.19 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4678>; else goto <D.4679>;
        <D.4679>:
      }
      goto <D.4778>;
      <D.4774>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = i;
        __b = k;
        <D.4684>:
        t = *__a;
        __a.20 = __a;
        __a = __a.20 + 1;
        D.4780 = *__b;
        *__a.20 = D.4780;
        __b.21 = __b;
        __b = __b.21 + 1;
        *__b.21 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4684>; else goto <D.4685>;
        <D.4685>:
      }
      <D.4778>:
      if (mid == i) goto <D.4782>; else goto <D.4783>;
      <D.4782>:
      mid = k;
      goto <D.4784>;
      <D.4783>:
      if (mid == k) goto <D.4785>; else goto <D.4786>;
      <D.4785>:
      mid = i;
      <D.4786>:
      <D.4784>:
      i = i + size;
      D.4719 = -size;
      k = k + D.4719;
      goto <D.4686>;
      <D.4673>:
      if (k != mid) goto <D.4787>; else goto <D.4788>;
      <D.4787>:
      if (swaplong != 0) goto <D.4789>; else goto <D.4790>;
      <D.4789>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.4718 = size / 4;
        __n = (long int) D.4718;
        __a = mid;
        __b = k;
        <D.4691>:
        t = *__a;
        __a.22 = __a;
        __a = __a.22 + 4;
        D.4792 = *__b;
        *__a.22 = D.4792;
        __b.23 = __b;
        __b = __b.23 + 4;
        *__b.23 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4691>; else goto <D.4692>;
        <D.4692>:
      }
      goto <D.4794>;
      <D.4790>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = k;
        <D.4697>:
        t = *__a;
        __a.24 = __a;
        __a = __a.24 + 1;
        D.4796 = *__b;
        *__a.24 = D.4796;
        __b.25 = __b;
        __b = __b.25 + 1;
        *__b.25 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4697>; else goto <D.4698>;
        <D.4698>:
      }
      <D.4794>:
      <D.4788>:
      hi.26 = (int) hi;
      k.27 = (int) k;
      D.4800 = hi.26 - k.27;
      D.4801 = (unsigned int) D.4800;
      n2 = D.4801 / size;
      k.27 = (int) k;
      lo.28 = (int) lo;
      D.4803 = k.27 - lo.28;
      D.4804 = (unsigned int) D.4803;
      n1 = D.4804 / size;
      if (n2 > n1) goto <D.4805>; else goto <D.4806>;
      <D.4805>:
      if (n2 > 1) goto <D.4807>; else goto <D.4808>;
      <D.4807>:
      D.4809 = k + size;
      sp->array = D.4809;
      sp->count = n2;
      sp = sp + 8;
      <D.4808>:
      if (n1 > 1) goto <D.4810>; else goto <D.4811>;
      <D.4810>:
      sp->array = lo;
      sp->count = n1;
      sp = sp + 8;
      <D.4811>:
      goto <D.4812>;
      <D.4806>:
      if (n1 > 1) goto <D.4813>; else goto <D.4814>;
      <D.4813>:
      sp->array = lo;
      sp->count = n1;
      sp = sp + 8;
      <D.4814>:
      if (n2 > 1) goto <D.4815>; else goto <D.4816>;
      <D.4815>:
      D.4809 = k + size;
      sp->array = D.4809;
      sp->count = n2;
      sp = sp + 8;
      <D.4816>:
      <D.4812>:
      <D.4630>:
      if (&stack < sp) goto <D.4699>; else goto <D.4700>;
      <D.4700>:
    }
  finally
    {
      stack = {CLOBBER};
    }
}


