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.5038;
  long unsigned int D.5040;
  long unsigned int D.5042;
  long unsigned int D.5043;
  long unsigned int D.5048;
  sizetype D.5049;
  long int * __a.2;
  long int D.5051;
  long int * __b.3;
  char * __a.4;
  char D.5055;
  char * __b.5;
  char * D.5058;
  int D.5059;
  long unsigned int D.5060;
  long unsigned int D.5061;
  int D.5062;
  long int * __a.6;
  long int D.5068;
  long int * __b.7;
  char * __a.8;
  char D.5072;
  char * __b.9;
  int D.5074;
  long int * __a.10;
  long int D.5080;
  long int * __b.11;
  char * __a.12;
  char D.5084;
  char * __b.13;
  int D.5086;
  long int * __a.14;
  long int D.5092;
  long int * __b.15;
  char * __a.16;
  char D.5096;
  char * __b.17;
  int D.5099;
  int D.5101;
  long int * __a.18;
  long int D.5106;
  long int * __b.19;
  char * __a.20;
  char D.5110;
  char * __b.21;
  long int * __a.22;
  long int D.5122;
  long int * __b.23;
  char * __a.24;
  char D.5126;
  char * __b.25;
  long int hi.26;
  long int k.27;
  long int D.5130;
  long unsigned int D.5131;
  long int lo.28;
  long int D.5133;
  long unsigned int D.5134;
  char * D.5139;
  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.5032>; else goto <D.5033>;
      <D.5032>:
      return;
      <D.5033>:
      base.1 = (long unsigned int) base;
      D.5038 = base.1 & 7;
      if (D.5038 == 0) goto <D.5039>; else goto <D.5035>;
      <D.5039>:
      D.5040 = size & 7;
      if (D.5040 == 0) goto <D.5041>; else goto <D.5035>;
      <D.5041>:
      iftmp.0 = 1;
      goto <D.5036>;
      <D.5035>:
      iftmp.0 = 0;
      <D.5036>:
      swaplong = iftmp.0;
      sp = &stack;
      sp->array = base;
      sp->count = nmemb;
      sp = sp + 16;
      <D.5029>:
      sp = sp + 18446744073709551600;
      lo = sp->array;
      n = sp->count;
      D.5042 = n + 18446744073709551615;
      D.5043 = D.5042 * size;
      hi = lo + D.5043;
      if (n <= 6) goto <D.5044>; else goto <D.5045>;
      <D.5044>:
      i = lo + size;
      goto <D.4958>;
      <D.4957>:
      k = i;
      goto <D.4955>;
      <D.4954>:
      if (swaplong != 0) goto <D.5046>; else goto <D.5047>;
      <D.5046>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5048 = size / 8;
        __n = (long int) D.5048;
        D.5049 = -size;
        __a = k + D.5049;
        __b = k;
        <D.4946>:
        t = *__a;
        __a.2 = __a;
        __a = __a.2 + 8;
        D.5051 = *__b;
        *__a.2 = D.5051;
        __b.3 = __b;
        __b = __b.3 + 8;
        *__b.3 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4946>; else goto <D.4947>;
        <D.4947>:
      }
      goto <D.5053>;
      <D.5047>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        D.5049 = -size;
        __a = k + D.5049;
        __b = k;
        <D.4952>:
        t = *__a;
        __a.4 = __a;
        __a = __a.4 + 1;
        D.5055 = *__b;
        *__a.4 = D.5055;
        __b.5 = __b;
        __b = __b.5 + 1;
        *__b.5 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4952>; else goto <D.4953>;
        <D.4953>:
      }
      <D.5053>:
      D.5049 = -size;
      k = k + D.5049;
      <D.4955>:
      if (k > lo) goto <D.5057>; else goto <D.4956>;
      <D.5057>:
      D.5049 = -size;
      D.5058 = k + D.5049;
      D.5059 = compare (D.5058, k, user_data);
      if (D.5059 > 0) goto <D.4954>; else goto <D.4956>;
      <D.4956>:
      i = i + size;
      <D.4958>:
      if (i <= hi) goto <D.4957>; else goto <D.4959>;
      <D.4959>:
      // predicted unlikely by continue predictor.
      goto <D.4960>;
      <D.5045>:
      D.5060 = n / 2;
      D.5061 = D.5060 * size;
      mid = lo + D.5061;
      D.5062 = compare (mid, lo, user_data);
      if (D.5062 < 0) goto <D.5063>; else goto <D.5064>;
      <D.5063>:
      if (swaplong != 0) goto <D.5065>; else goto <D.5066>;
      <D.5065>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5048 = size / 8;
        __n = (long int) D.5048;
        __a = mid;
        __b = lo;
        <D.4965>:
        t = *__a;
        __a.6 = __a;
        __a = __a.6 + 8;
        D.5068 = *__b;
        *__a.6 = D.5068;
        __b.7 = __b;
        __b = __b.7 + 8;
        *__b.7 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4965>; else goto <D.4966>;
        <D.4966>:
      }
      goto <D.5070>;
      <D.5066>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = lo;
        <D.4971>:
        t = *__a;
        __a.8 = __a;
        __a = __a.8 + 1;
        D.5072 = *__b;
        *__a.8 = D.5072;
        __b.9 = __b;
        __b = __b.9 + 1;
        *__b.9 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4971>; else goto <D.4972>;
        <D.4972>:
      }
      <D.5070>:
      <D.5064>:
      D.5074 = compare (hi, mid, user_data);
      if (D.5074 < 0) goto <D.5075>; else goto <D.5076>;
      <D.5075>:
      if (swaplong != 0) goto <D.5077>; else goto <D.5078>;
      <D.5077>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5048 = size / 8;
        __n = (long int) D.5048;
        __a = mid;
        __b = hi;
        <D.4977>:
        t = *__a;
        __a.10 = __a;
        __a = __a.10 + 8;
        D.5080 = *__b;
        *__a.10 = D.5080;
        __b.11 = __b;
        __b = __b.11 + 8;
        *__b.11 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4977>; else goto <D.4978>;
        <D.4978>:
      }
      goto <D.5082>;
      <D.5078>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = hi;
        <D.4983>:
        t = *__a;
        __a.12 = __a;
        __a = __a.12 + 1;
        D.5084 = *__b;
        *__a.12 = D.5084;
        __b.13 = __b;
        __b = __b.13 + 1;
        *__b.13 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4983>; else goto <D.4984>;
        <D.4984>:
      }
      <D.5082>:
      D.5086 = compare (mid, lo, user_data);
      if (D.5086 < 0) goto <D.5087>; else goto <D.5088>;
      <D.5087>:
      if (swaplong != 0) goto <D.5089>; else goto <D.5090>;
      <D.5089>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5048 = size / 8;
        __n = (long int) D.5048;
        __a = mid;
        __b = lo;
        <D.4989>:
        t = *__a;
        __a.14 = __a;
        __a = __a.14 + 8;
        D.5092 = *__b;
        *__a.14 = D.5092;
        __b.15 = __b;
        __b = __b.15 + 8;
        *__b.15 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4989>; else goto <D.4990>;
        <D.4990>:
      }
      goto <D.5094>;
      <D.5090>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = lo;
        <D.4995>:
        t = *__a;
        __a.16 = __a;
        __a = __a.16 + 1;
        D.5096 = *__b;
        *__a.16 = D.5096;
        __b.17 = __b;
        __b = __b.17 + 1;
        *__b.17 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.4995>; else goto <D.4996>;
        <D.4996>:
      }
      <D.5094>:
      <D.5088>:
      <D.5076>:
      i = lo + size;
      D.5049 = -size;
      k = hi + D.5049;
      <D.5016>:
      goto <D.4998>;
      <D.4997>:
      i = i + size;
      <D.4998>:
      if (i < k) goto <D.5098>; else goto <D.4999>;
      <D.5098>:
      D.5099 = compare (i, mid, user_data);
      if (D.5099 <= 0) goto <D.4997>; else goto <D.4999>;
      <D.4999>:
      goto <D.5001>;
      <D.5000>:
      D.5049 = -size;
      k = k + D.5049;
      <D.5001>:
      if (k >= i) goto <D.5100>; else goto <D.5002>;
      <D.5100>:
      D.5101 = compare (mid, k, user_data);
      if (D.5101 < 0) goto <D.5000>; else goto <D.5002>;
      <D.5002>:
      if (k <= i) goto <D.5003>; else goto <D.5102>;
      <D.5102>:
      if (swaplong != 0) goto <D.5103>; else goto <D.5104>;
      <D.5103>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5048 = size / 8;
        __n = (long int) D.5048;
        __a = i;
        __b = k;
        <D.5008>:
        t = *__a;
        __a.18 = __a;
        __a = __a.18 + 8;
        D.5106 = *__b;
        *__a.18 = D.5106;
        __b.19 = __b;
        __b = __b.19 + 8;
        *__b.19 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5008>; else goto <D.5009>;
        <D.5009>:
      }
      goto <D.5108>;
      <D.5104>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = i;
        __b = k;
        <D.5014>:
        t = *__a;
        __a.20 = __a;
        __a = __a.20 + 1;
        D.5110 = *__b;
        *__a.20 = D.5110;
        __b.21 = __b;
        __b = __b.21 + 1;
        *__b.21 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5014>; else goto <D.5015>;
        <D.5015>:
      }
      <D.5108>:
      if (mid == i) goto <D.5112>; else goto <D.5113>;
      <D.5112>:
      mid = k;
      goto <D.5114>;
      <D.5113>:
      if (mid == k) goto <D.5115>; else goto <D.5116>;
      <D.5115>:
      mid = i;
      <D.5116>:
      <D.5114>:
      i = i + size;
      D.5049 = -size;
      k = k + D.5049;
      goto <D.5016>;
      <D.5003>:
      if (k != mid) goto <D.5117>; else goto <D.5118>;
      <D.5117>:
      if (swaplong != 0) goto <D.5119>; else goto <D.5120>;
      <D.5119>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5048 = size / 8;
        __n = (long int) D.5048;
        __a = mid;
        __b = k;
        <D.5021>:
        t = *__a;
        __a.22 = __a;
        __a = __a.22 + 8;
        D.5122 = *__b;
        *__a.22 = D.5122;
        __b.23 = __b;
        __b = __b.23 + 8;
        *__b.23 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5021>; else goto <D.5022>;
        <D.5022>:
      }
      goto <D.5124>;
      <D.5120>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = k;
        <D.5027>:
        t = *__a;
        __a.24 = __a;
        __a = __a.24 + 1;
        D.5126 = *__b;
        *__a.24 = D.5126;
        __b.25 = __b;
        __b = __b.25 + 1;
        *__b.25 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5027>; else goto <D.5028>;
        <D.5028>:
      }
      <D.5124>:
      <D.5118>:
      hi.26 = (long int) hi;
      k.27 = (long int) k;
      D.5130 = hi.26 - k.27;
      D.5131 = (long unsigned int) D.5130;
      n2 = D.5131 / size;
      k.27 = (long int) k;
      lo.28 = (long int) lo;
      D.5133 = k.27 - lo.28;
      D.5134 = (long unsigned int) D.5133;
      n1 = D.5134 / size;
      if (n2 > n1) goto <D.5135>; else goto <D.5136>;
      <D.5135>:
      if (n2 > 1) goto <D.5137>; else goto <D.5138>;
      <D.5137>:
      D.5139 = k + size;
      sp->array = D.5139;
      sp->count = n2;
      sp = sp + 16;
      <D.5138>:
      if (n1 > 1) goto <D.5140>; else goto <D.5141>;
      <D.5140>:
      sp->array = lo;
      sp->count = n1;
      sp = sp + 16;
      <D.5141>:
      goto <D.5142>;
      <D.5136>:
      if (n1 > 1) goto <D.5143>; else goto <D.5144>;
      <D.5143>:
      sp->array = lo;
      sp->count = n1;
      sp = sp + 16;
      <D.5144>:
      if (n2 > 1) goto <D.5145>; else goto <D.5146>;
      <D.5145>:
      D.5139 = k + size;
      sp->array = D.5139;
      sp->count = n2;
      sp = sp + 16;
      <D.5146>:
      <D.5142>:
      <D.4960>:
      if (&stack < sp) goto <D.5029>; else goto <D.5030>;
      <D.5030>:
    }
  finally
    {
      stack = {CLOBBER};
    }
}


