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.5552;
  long unsigned int D.5554;
  long unsigned int D.5556;
  long unsigned int D.5557;
  long unsigned int D.5562;
  sizetype D.5563;
  long int * __a.2;
  long int D.5565;
  long int * __b.3;
  char * __a.4;
  char D.5569;
  char * __b.5;
  char * D.5572;
  int D.5573;
  long unsigned int D.5574;
  long unsigned int D.5575;
  int D.5576;
  long int * __a.6;
  long int D.5582;
  long int * __b.7;
  char * __a.8;
  char D.5586;
  char * __b.9;
  int D.5588;
  long int * __a.10;
  long int D.5594;
  long int * __b.11;
  char * __a.12;
  char D.5598;
  char * __b.13;
  int D.5600;
  long int * __a.14;
  long int D.5606;
  long int * __b.15;
  char * __a.16;
  char D.5610;
  char * __b.17;
  int D.5613;
  int D.5615;
  long int * __a.18;
  long int D.5620;
  long int * __b.19;
  char * __a.20;
  char D.5624;
  char * __b.21;
  long int * __a.22;
  long int D.5636;
  long int * __b.23;
  char * __a.24;
  char D.5640;
  char * __b.25;
  long int hi.26;
  long int k.27;
  long int D.5644;
  long unsigned int D.5645;
  long int lo.28;
  long int D.5647;
  long unsigned int D.5648;
  char * D.5653;
  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.5546>; else goto <D.5547>;
      <D.5546>:
      return;
      <D.5547>:
      base.1 = (long unsigned int) base;
      D.5552 = base.1 & 7;
      if (D.5552 == 0) goto <D.5553>; else goto <D.5549>;
      <D.5553>:
      D.5554 = size & 7;
      if (D.5554 == 0) goto <D.5555>; else goto <D.5549>;
      <D.5555>:
      iftmp.0 = 1;
      goto <D.5550>;
      <D.5549>:
      iftmp.0 = 0;
      <D.5550>:
      swaplong = iftmp.0;
      sp = &stack;
      sp->array = base;
      sp->count = nmemb;
      sp = sp + 16;
      <D.5543>:
      sp = sp + 18446744073709551600;
      lo = sp->array;
      n = sp->count;
      D.5556 = n + 18446744073709551615;
      D.5557 = D.5556 * size;
      hi = lo + D.5557;
      if (n <= 6) goto <D.5558>; else goto <D.5559>;
      <D.5558>:
      i = lo + size;
      goto <D.5472>;
      <D.5471>:
      k = i;
      goto <D.5469>;
      <D.5468>:
      if (swaplong != 0) goto <D.5560>; else goto <D.5561>;
      <D.5560>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5562 = size / 8;
        __n = (long int) D.5562;
        D.5563 = -size;
        __a = k + D.5563;
        __b = k;
        <D.5460>:
        t = *__a;
        __a.2 = __a;
        __a = __a.2 + 8;
        D.5565 = *__b;
        *__a.2 = D.5565;
        __b.3 = __b;
        __b = __b.3 + 8;
        *__b.3 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5460>; else goto <D.5461>;
        <D.5461>:
      }
      goto <D.5567>;
      <D.5561>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        D.5563 = -size;
        __a = k + D.5563;
        __b = k;
        <D.5466>:
        t = *__a;
        __a.4 = __a;
        __a = __a.4 + 1;
        D.5569 = *__b;
        *__a.4 = D.5569;
        __b.5 = __b;
        __b = __b.5 + 1;
        *__b.5 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5466>; else goto <D.5467>;
        <D.5467>:
      }
      <D.5567>:
      D.5563 = -size;
      k = k + D.5563;
      <D.5469>:
      if (k > lo) goto <D.5571>; else goto <D.5470>;
      <D.5571>:
      D.5563 = -size;
      D.5572 = k + D.5563;
      D.5573 = compare (D.5572, k, user_data);
      if (D.5573 > 0) goto <D.5468>; else goto <D.5470>;
      <D.5470>:
      i = i + size;
      <D.5472>:
      if (i <= hi) goto <D.5471>; else goto <D.5473>;
      <D.5473>:
      // predicted unlikely by continue predictor.
      goto <D.5474>;
      <D.5559>:
      D.5574 = n / 2;
      D.5575 = D.5574 * size;
      mid = lo + D.5575;
      D.5576 = compare (mid, lo, user_data);
      if (D.5576 < 0) goto <D.5577>; else goto <D.5578>;
      <D.5577>:
      if (swaplong != 0) goto <D.5579>; else goto <D.5580>;
      <D.5579>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5562 = size / 8;
        __n = (long int) D.5562;
        __a = mid;
        __b = lo;
        <D.5479>:
        t = *__a;
        __a.6 = __a;
        __a = __a.6 + 8;
        D.5582 = *__b;
        *__a.6 = D.5582;
        __b.7 = __b;
        __b = __b.7 + 8;
        *__b.7 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5479>; else goto <D.5480>;
        <D.5480>:
      }
      goto <D.5584>;
      <D.5580>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = lo;
        <D.5485>:
        t = *__a;
        __a.8 = __a;
        __a = __a.8 + 1;
        D.5586 = *__b;
        *__a.8 = D.5586;
        __b.9 = __b;
        __b = __b.9 + 1;
        *__b.9 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5485>; else goto <D.5486>;
        <D.5486>:
      }
      <D.5584>:
      <D.5578>:
      D.5588 = compare (hi, mid, user_data);
      if (D.5588 < 0) goto <D.5589>; else goto <D.5590>;
      <D.5589>:
      if (swaplong != 0) goto <D.5591>; else goto <D.5592>;
      <D.5591>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5562 = size / 8;
        __n = (long int) D.5562;
        __a = mid;
        __b = hi;
        <D.5491>:
        t = *__a;
        __a.10 = __a;
        __a = __a.10 + 8;
        D.5594 = *__b;
        *__a.10 = D.5594;
        __b.11 = __b;
        __b = __b.11 + 8;
        *__b.11 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5491>; else goto <D.5492>;
        <D.5492>:
      }
      goto <D.5596>;
      <D.5592>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = hi;
        <D.5497>:
        t = *__a;
        __a.12 = __a;
        __a = __a.12 + 1;
        D.5598 = *__b;
        *__a.12 = D.5598;
        __b.13 = __b;
        __b = __b.13 + 1;
        *__b.13 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5497>; else goto <D.5498>;
        <D.5498>:
      }
      <D.5596>:
      D.5600 = compare (mid, lo, user_data);
      if (D.5600 < 0) goto <D.5601>; else goto <D.5602>;
      <D.5601>:
      if (swaplong != 0) goto <D.5603>; else goto <D.5604>;
      <D.5603>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5562 = size / 8;
        __n = (long int) D.5562;
        __a = mid;
        __b = lo;
        <D.5503>:
        t = *__a;
        __a.14 = __a;
        __a = __a.14 + 8;
        D.5606 = *__b;
        *__a.14 = D.5606;
        __b.15 = __b;
        __b = __b.15 + 8;
        *__b.15 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5503>; else goto <D.5504>;
        <D.5504>:
      }
      goto <D.5608>;
      <D.5604>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = lo;
        <D.5509>:
        t = *__a;
        __a.16 = __a;
        __a = __a.16 + 1;
        D.5610 = *__b;
        *__a.16 = D.5610;
        __b.17 = __b;
        __b = __b.17 + 1;
        *__b.17 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5509>; else goto <D.5510>;
        <D.5510>:
      }
      <D.5608>:
      <D.5602>:
      <D.5590>:
      i = lo + size;
      D.5563 = -size;
      k = hi + D.5563;
      <D.5530>:
      goto <D.5512>;
      <D.5511>:
      i = i + size;
      <D.5512>:
      if (i < k) goto <D.5612>; else goto <D.5513>;
      <D.5612>:
      D.5613 = compare (i, mid, user_data);
      if (D.5613 <= 0) goto <D.5511>; else goto <D.5513>;
      <D.5513>:
      goto <D.5515>;
      <D.5514>:
      D.5563 = -size;
      k = k + D.5563;
      <D.5515>:
      if (k >= i) goto <D.5614>; else goto <D.5516>;
      <D.5614>:
      D.5615 = compare (mid, k, user_data);
      if (D.5615 < 0) goto <D.5514>; else goto <D.5516>;
      <D.5516>:
      if (k <= i) goto <D.5517>; else goto <D.5616>;
      <D.5616>:
      if (swaplong != 0) goto <D.5617>; else goto <D.5618>;
      <D.5617>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5562 = size / 8;
        __n = (long int) D.5562;
        __a = i;
        __b = k;
        <D.5522>:
        t = *__a;
        __a.18 = __a;
        __a = __a.18 + 8;
        D.5620 = *__b;
        *__a.18 = D.5620;
        __b.19 = __b;
        __b = __b.19 + 8;
        *__b.19 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5522>; else goto <D.5523>;
        <D.5523>:
      }
      goto <D.5622>;
      <D.5618>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = i;
        __b = k;
        <D.5528>:
        t = *__a;
        __a.20 = __a;
        __a = __a.20 + 1;
        D.5624 = *__b;
        *__a.20 = D.5624;
        __b.21 = __b;
        __b = __b.21 + 1;
        *__b.21 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5528>; else goto <D.5529>;
        <D.5529>:
      }
      <D.5622>:
      if (mid == i) goto <D.5626>; else goto <D.5627>;
      <D.5626>:
      mid = k;
      goto <D.5628>;
      <D.5627>:
      if (mid == k) goto <D.5629>; else goto <D.5630>;
      <D.5629>:
      mid = i;
      <D.5630>:
      <D.5628>:
      i = i + size;
      D.5563 = -size;
      k = k + D.5563;
      goto <D.5530>;
      <D.5517>:
      if (k != mid) goto <D.5631>; else goto <D.5632>;
      <D.5631>:
      if (swaplong != 0) goto <D.5633>; else goto <D.5634>;
      <D.5633>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.5562 = size / 8;
        __n = (long int) D.5562;
        __a = mid;
        __b = k;
        <D.5535>:
        t = *__a;
        __a.22 = __a;
        __a = __a.22 + 8;
        D.5636 = *__b;
        *__a.22 = D.5636;
        __b.23 = __b;
        __b = __b.23 + 8;
        *__b.23 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5535>; else goto <D.5536>;
        <D.5536>:
      }
      goto <D.5638>;
      <D.5634>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = k;
        <D.5541>:
        t = *__a;
        __a.24 = __a;
        __a = __a.24 + 1;
        D.5640 = *__b;
        *__a.24 = D.5640;
        __b.25 = __b;
        __b = __b.25 + 1;
        *__b.25 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.5541>; else goto <D.5542>;
        <D.5542>:
      }
      <D.5638>:
      <D.5632>:
      hi.26 = (long int) hi;
      k.27 = (long int) k;
      D.5644 = hi.26 - k.27;
      D.5645 = (long unsigned int) D.5644;
      n2 = D.5645 / size;
      k.27 = (long int) k;
      lo.28 = (long int) lo;
      D.5647 = k.27 - lo.28;
      D.5648 = (long unsigned int) D.5647;
      n1 = D.5648 / size;
      if (n2 > n1) goto <D.5649>; else goto <D.5650>;
      <D.5649>:
      if (n2 > 1) goto <D.5651>; else goto <D.5652>;
      <D.5651>:
      D.5653 = k + size;
      sp->array = D.5653;
      sp->count = n2;
      sp = sp + 16;
      <D.5652>:
      if (n1 > 1) goto <D.5654>; else goto <D.5655>;
      <D.5654>:
      sp->array = lo;
      sp->count = n1;
      sp = sp + 16;
      <D.5655>:
      goto <D.5656>;
      <D.5650>:
      if (n1 > 1) goto <D.5657>; else goto <D.5658>;
      <D.5657>:
      sp->array = lo;
      sp->count = n1;
      sp = sp + 16;
      <D.5658>:
      if (n2 > 1) goto <D.5659>; else goto <D.5660>;
      <D.5659>:
      D.5653 = k + size;
      sp->array = D.5653;
      sp->count = n2;
      sp = sp + 16;
      <D.5660>:
      <D.5656>:
      <D.5474>:
      if (&stack < sp) goto <D.5543>; else goto <D.5544>;
      <D.5544>:
    }
  finally
    {
      stack = {CLOBBER};
    }
}


