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;
  long unsigned int base.1;
  long unsigned int D.5141;
  long unsigned int D.5143;
  long unsigned int D.5145;
  long unsigned int D.5146;
  long unsigned int D.5151;
  sizetype D.5152;
  long int * __a.2;
  long int D.5154;
  long int * __b.3;
  char * __a.4;
  char D.5158;
  char * __b.5;
  char * D.5161;
  int D.5162;
  long unsigned int D.5163;
  long unsigned int D.5164;
  int D.5165;
  long int * __a.6;
  long int D.5171;
  long int * __b.7;
  char * __a.8;
  char D.5175;
  char * __b.9;
  int D.5177;
  long int * __a.10;
  long int D.5183;
  long int * __b.11;
  char * __a.12;
  char D.5187;
  char * __b.13;
  int D.5189;
  long int * __a.14;
  long int D.5195;
  long int * __b.15;
  char * __a.16;
  char D.5199;
  char * __b.17;
  int D.5202;
  int D.5204;
  long int * __a.18;
  long int D.5209;
  long int * __b.19;
  char * __a.20;
  char D.5213;
  char * __b.21;
  long int * __a.22;
  long int D.5225;
  long int * __b.23;
  char * __a.24;
  char D.5229;
  char * __b.25;
  long int hi.26;
  long int k.27;
  long int D.5233;
  long unsigned int D.5234;
  long int lo.28;
  long int D.5236;
  long unsigned int D.5237;
  char * D.5242;
  struct QSortStack stack[64];
  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.5135>; else goto <D.5136>;
      <D.5135>:
      return;
      <D.5136>:
      base.1 = (long unsigned int) base;
      D.5141 = base.1 & 7;
      if (D.5141 == 0) goto <D.5142>; else goto <D.5138>;
      <D.5142>:
      D.5143 = size & 7;
      if (D.5143 == 0) goto <D.5144>; else goto <D.5138>;
      <D.5144>:
      iftmp.0 = 1;
      goto <D.5139>;
      <D.5138>:
      iftmp.0 = 0;
      <D.5139>:
      swaplong = iftmp.0;
      sp = &stack;
      sp->array = base;
      sp->count = nmemb;
      sp = sp + 16;
      <D.5132>:
      sp = sp + 18446744073709551600;
      lo = sp->array;
      n = sp->count;
      D.5145 = n + 18446744073709551615;
      D.5146 = D.5145 * size;
      hi = lo + D.5146;
      if (n <= 6) goto <D.5147>; else goto <D.5148>;
      <D.5147>:
      i = lo + size;
      goto <D.5061>;
      <D.5060>:
      k = i;
      goto <D.5058>;
      <D.5057>:
      if (swaplong != 0) goto <D.5149>; else goto <D.5150>;
      <D.5149>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5151 = size / 8;
        __n = (long int) D.5151;
        D.5152 = -size;
        __a = k + D.5152;
        __b = k;
        <D.5049>:
        t = *__a;
        __a.2 = __a;
        __a = __a.2 + 8;
        D.5154 = *__b;
        *__a.2 = D.5154;
        __b.3 = __b;
        __b = __b.3 + 8;
        *__b.3 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5049>; else goto <D.5050>;
        <D.5050>:
      }
      goto <D.5156>;
      <D.5150>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        D.5152 = -size;
        __a = k + D.5152;
        __b = k;
        <D.5055>:
        t = *__a;
        __a.4 = __a;
        __a = __a.4 + 1;
        D.5158 = *__b;
        *__a.4 = D.5158;
        __b.5 = __b;
        __b = __b.5 + 1;
        *__b.5 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5055>; else goto <D.5056>;
        <D.5056>:
      }
      <D.5156>:
      D.5152 = -size;
      k = k + D.5152;
      <D.5058>:
      if (k > lo) goto <D.5160>; else goto <D.5059>;
      <D.5160>:
      D.5152 = -size;
      D.5161 = k + D.5152;
      D.5162 = compare (D.5161, k, user_data);
      if (D.5162 > 0) goto <D.5057>; else goto <D.5059>;
      <D.5059>:
      i = i + size;
      <D.5061>:
      if (i <= hi) goto <D.5060>; else goto <D.5062>;
      <D.5062>:
      // predicted unlikely by continue predictor.
      goto <D.5063>;
      <D.5148>:
      D.5163 = n / 2;
      D.5164 = D.5163 * size;
      mid = lo + D.5164;
      D.5165 = compare (mid, lo, user_data);
      if (D.5165 < 0) goto <D.5166>; else goto <D.5167>;
      <D.5166>:
      if (swaplong != 0) goto <D.5168>; else goto <D.5169>;
      <D.5168>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5151 = size / 8;
        __n = (long int) D.5151;
        __a = mid;
        __b = lo;
        <D.5068>:
        t = *__a;
        __a.6 = __a;
        __a = __a.6 + 8;
        D.5171 = *__b;
        *__a.6 = D.5171;
        __b.7 = __b;
        __b = __b.7 + 8;
        *__b.7 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5068>; else goto <D.5069>;
        <D.5069>:
      }
      goto <D.5173>;
      <D.5169>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = lo;
        <D.5074>:
        t = *__a;
        __a.8 = __a;
        __a = __a.8 + 1;
        D.5175 = *__b;
        *__a.8 = D.5175;
        __b.9 = __b;
        __b = __b.9 + 1;
        *__b.9 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5074>; else goto <D.5075>;
        <D.5075>:
      }
      <D.5173>:
      <D.5167>:
      D.5177 = compare (hi, mid, user_data);
      if (D.5177 < 0) goto <D.5178>; else goto <D.5179>;
      <D.5178>:
      if (swaplong != 0) goto <D.5180>; else goto <D.5181>;
      <D.5180>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5151 = size / 8;
        __n = (long int) D.5151;
        __a = mid;
        __b = hi;
        <D.5080>:
        t = *__a;
        __a.10 = __a;
        __a = __a.10 + 8;
        D.5183 = *__b;
        *__a.10 = D.5183;
        __b.11 = __b;
        __b = __b.11 + 8;
        *__b.11 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5080>; else goto <D.5081>;
        <D.5081>:
      }
      goto <D.5185>;
      <D.5181>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = hi;
        <D.5086>:
        t = *__a;
        __a.12 = __a;
        __a = __a.12 + 1;
        D.5187 = *__b;
        *__a.12 = D.5187;
        __b.13 = __b;
        __b = __b.13 + 1;
        *__b.13 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5086>; else goto <D.5087>;
        <D.5087>:
      }
      <D.5185>:
      D.5189 = compare (mid, lo, user_data);
      if (D.5189 < 0) goto <D.5190>; else goto <D.5191>;
      <D.5190>:
      if (swaplong != 0) goto <D.5192>; else goto <D.5193>;
      <D.5192>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5151 = size / 8;
        __n = (long int) D.5151;
        __a = mid;
        __b = lo;
        <D.5092>:
        t = *__a;
        __a.14 = __a;
        __a = __a.14 + 8;
        D.5195 = *__b;
        *__a.14 = D.5195;
        __b.15 = __b;
        __b = __b.15 + 8;
        *__b.15 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5092>; else goto <D.5093>;
        <D.5093>:
      }
      goto <D.5197>;
      <D.5193>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = lo;
        <D.5098>:
        t = *__a;
        __a.16 = __a;
        __a = __a.16 + 1;
        D.5199 = *__b;
        *__a.16 = D.5199;
        __b.17 = __b;
        __b = __b.17 + 1;
        *__b.17 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5098>; else goto <D.5099>;
        <D.5099>:
      }
      <D.5197>:
      <D.5191>:
      <D.5179>:
      i = lo + size;
      D.5152 = -size;
      k = hi + D.5152;
      <D.5119>:
      goto <D.5101>;
      <D.5100>:
      i = i + size;
      <D.5101>:
      if (i < k) goto <D.5201>; else goto <D.5102>;
      <D.5201>:
      D.5202 = compare (i, mid, user_data);
      if (D.5202 <= 0) goto <D.5100>; else goto <D.5102>;
      <D.5102>:
      goto <D.5104>;
      <D.5103>:
      D.5152 = -size;
      k = k + D.5152;
      <D.5104>:
      if (k >= i) goto <D.5203>; else goto <D.5105>;
      <D.5203>:
      D.5204 = compare (mid, k, user_data);
      if (D.5204 < 0) goto <D.5103>; else goto <D.5105>;
      <D.5105>:
      if (k <= i) goto <D.5106>; else goto <D.5205>;
      <D.5205>:
      if (swaplong != 0) goto <D.5206>; else goto <D.5207>;
      <D.5206>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5151 = size / 8;
        __n = (long int) D.5151;
        __a = i;
        __b = k;
        <D.5111>:
        t = *__a;
        __a.18 = __a;
        __a = __a.18 + 8;
        D.5209 = *__b;
        *__a.18 = D.5209;
        __b.19 = __b;
        __b = __b.19 + 8;
        *__b.19 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5111>; else goto <D.5112>;
        <D.5112>:
      }
      goto <D.5211>;
      <D.5207>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = i;
        __b = k;
        <D.5117>:
        t = *__a;
        __a.20 = __a;
        __a = __a.20 + 1;
        D.5213 = *__b;
        *__a.20 = D.5213;
        __b.21 = __b;
        __b = __b.21 + 1;
        *__b.21 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5117>; else goto <D.5118>;
        <D.5118>:
      }
      <D.5211>:
      if (mid == i) goto <D.5215>; else goto <D.5216>;
      <D.5215>:
      mid = k;
      goto <D.5217>;
      <D.5216>:
      if (mid == k) goto <D.5218>; else goto <D.5219>;
      <D.5218>:
      mid = i;
      <D.5219>:
      <D.5217>:
      i = i + size;
      D.5152 = -size;
      k = k + D.5152;
      goto <D.5119>;
      <D.5106>:
      if (k != mid) goto <D.5220>; else goto <D.5221>;
      <D.5220>:
      if (swaplong != 0) goto <D.5222>; else goto <D.5223>;
      <D.5222>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5151 = size / 8;
        __n = (long int) D.5151;
        __a = mid;
        __b = k;
        <D.5124>:
        t = *__a;
        __a.22 = __a;
        __a = __a.22 + 8;
        D.5225 = *__b;
        *__a.22 = D.5225;
        __b.23 = __b;
        __b = __b.23 + 8;
        *__b.23 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5124>; else goto <D.5125>;
        <D.5125>:
      }
      goto <D.5227>;
      <D.5223>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = k;
        <D.5130>:
        t = *__a;
        __a.24 = __a;
        __a = __a.24 + 1;
        D.5229 = *__b;
        *__a.24 = D.5229;
        __b.25 = __b;
        __b = __b.25 + 1;
        *__b.25 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5130>; else goto <D.5131>;
        <D.5131>:
      }
      <D.5227>:
      <D.5221>:
      hi.26 = (long int) hi;
      k.27 = (long int) k;
      D.5233 = hi.26 - k.27;
      D.5234 = (long unsigned int) D.5233;
      n2 = D.5234 / size;
      k.27 = (long int) k;
      lo.28 = (long int) lo;
      D.5236 = k.27 - lo.28;
      D.5237 = (long unsigned int) D.5236;
      n1 = D.5237 / size;
      if (n2 > n1) goto <D.5238>; else goto <D.5239>;
      <D.5238>:
      if (n2 > 1) goto <D.5240>; else goto <D.5241>;
      <D.5240>:
      D.5242 = k + size;
      sp->array = D.5242;
      sp->count = n2;
      sp = sp + 16;
      <D.5241>:
      if (n1 > 1) goto <D.5243>; else goto <D.5244>;
      <D.5243>:
      sp->array = lo;
      sp->count = n1;
      sp = sp + 16;
      <D.5244>:
      goto <D.5245>;
      <D.5239>:
      if (n1 > 1) goto <D.5246>; else goto <D.5247>;
      <D.5246>:
      sp->array = lo;
      sp->count = n1;
      sp = sp + 16;
      <D.5247>:
      if (n2 > 1) goto <D.5248>; else goto <D.5249>;
      <D.5248>:
      D.5242 = k + size;
      sp->array = D.5242;
      sp->count = n2;
      sp = sp + 16;
      <D.5249>:
      <D.5245>:
      <D.5063>:
      if (&stack < sp) goto <D.5132>; else goto <D.5133>;
      <D.5133>:
    }
  finally
    {
      stack = {CLOBBER};
    }
}


