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.7297;
  unsigned int D.7299;
  unsigned int D.7301;
  unsigned int D.7302;
  unsigned int D.7307;
  sizetype D.7308;
  long int * __a.2;
  long int D.7310;
  long int * __b.3;
  char * __a.4;
  char D.7314;
  char * __b.5;
  char * D.7317;
  int D.7318;
  unsigned int D.7319;
  unsigned int D.7320;
  int D.7321;
  long int * __a.6;
  long int D.7327;
  long int * __b.7;
  char * __a.8;
  char D.7331;
  char * __b.9;
  int D.7333;
  long int * __a.10;
  long int D.7339;
  long int * __b.11;
  char * __a.12;
  char D.7343;
  char * __b.13;
  int D.7345;
  long int * __a.14;
  long int D.7351;
  long int * __b.15;
  char * __a.16;
  char D.7355;
  char * __b.17;
  int D.7358;
  int D.7360;
  long int * __a.18;
  long int D.7365;
  long int * __b.19;
  char * __a.20;
  char D.7369;
  char * __b.21;
  long int * __a.22;
  long int D.7381;
  long int * __b.23;
  char * __a.24;
  char D.7385;
  char * __b.25;
  int hi.26;
  int k.27;
  int D.7389;
  unsigned int D.7390;
  int lo.28;
  int D.7392;
  unsigned int D.7393;
  char * D.7398;
  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.7291>; else goto <D.7292>;
      <D.7291>:
      return;
      <D.7292>:
      base.1 = (unsigned int) base;
      D.7297 = base.1 & 3;
      if (D.7297 == 0) goto <D.7298>; else goto <D.7294>;
      <D.7298>:
      D.7299 = size & 3;
      if (D.7299 == 0) goto <D.7300>; else goto <D.7294>;
      <D.7300>:
      iftmp.0 = 1;
      goto <D.7295>;
      <D.7294>:
      iftmp.0 = 0;
      <D.7295>:
      swaplong = iftmp.0;
      sp = &stack;
      sp->array = base;
      sp->count = nmemb;
      sp = sp + 8;
      <D.7286>:
      sp = sp + 4294967288;
      lo = sp->array;
      n = sp->count;
      D.7301 = n + 4294967295;
      D.7302 = D.7301 * size;
      hi = lo + D.7302;
      if (n <= 6) goto <D.7303>; else goto <D.7304>;
      <D.7303>:
      i = lo + size;
      goto <D.7215>;
      <D.7214>:
      k = i;
      goto <D.7212>;
      <D.7211>:
      if (swaplong != 0) goto <D.7305>; else goto <D.7306>;
      <D.7305>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.7307 = size / 4;
        __n = (long int) D.7307;
        D.7308 = -size;
        __a = k + D.7308;
        __b = k;
        <D.7203>:
        t = *__a;
        __a.2 = __a;
        __a = __a.2 + 4;
        D.7310 = *__b;
        *__a.2 = D.7310;
        __b.3 = __b;
        __b = __b.3 + 4;
        *__b.3 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.7203>; else goto <D.7204>;
        <D.7204>:
      }
      goto <D.7312>;
      <D.7306>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        D.7308 = -size;
        __a = k + D.7308;
        __b = k;
        <D.7209>:
        t = *__a;
        __a.4 = __a;
        __a = __a.4 + 1;
        D.7314 = *__b;
        *__a.4 = D.7314;
        __b.5 = __b;
        __b = __b.5 + 1;
        *__b.5 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.7209>; else goto <D.7210>;
        <D.7210>:
      }
      <D.7312>:
      D.7308 = -size;
      k = k + D.7308;
      <D.7212>:
      if (k > lo) goto <D.7316>; else goto <D.7213>;
      <D.7316>:
      D.7308 = -size;
      D.7317 = k + D.7308;
      D.7318 = compare (D.7317, k, user_data);
      if (D.7318 > 0) goto <D.7211>; else goto <D.7213>;
      <D.7213>:
      i = i + size;
      <D.7215>:
      if (i <= hi) goto <D.7214>; else goto <D.7216>;
      <D.7216>:
      // predicted unlikely by continue predictor.
      goto <D.7217>;
      <D.7304>:
      D.7319 = n / 2;
      D.7320 = D.7319 * size;
      mid = lo + D.7320;
      D.7321 = compare (mid, lo, user_data);
      if (D.7321 < 0) goto <D.7322>; else goto <D.7323>;
      <D.7322>:
      if (swaplong != 0) goto <D.7324>; else goto <D.7325>;
      <D.7324>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.7307 = size / 4;
        __n = (long int) D.7307;
        __a = mid;
        __b = lo;
        <D.7222>:
        t = *__a;
        __a.6 = __a;
        __a = __a.6 + 4;
        D.7327 = *__b;
        *__a.6 = D.7327;
        __b.7 = __b;
        __b = __b.7 + 4;
        *__b.7 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.7222>; else goto <D.7223>;
        <D.7223>:
      }
      goto <D.7329>;
      <D.7325>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = lo;
        <D.7228>:
        t = *__a;
        __a.8 = __a;
        __a = __a.8 + 1;
        D.7331 = *__b;
        *__a.8 = D.7331;
        __b.9 = __b;
        __b = __b.9 + 1;
        *__b.9 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.7228>; else goto <D.7229>;
        <D.7229>:
      }
      <D.7329>:
      <D.7323>:
      D.7333 = compare (hi, mid, user_data);
      if (D.7333 < 0) goto <D.7334>; else goto <D.7335>;
      <D.7334>:
      if (swaplong != 0) goto <D.7336>; else goto <D.7337>;
      <D.7336>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.7307 = size / 4;
        __n = (long int) D.7307;
        __a = mid;
        __b = hi;
        <D.7234>:
        t = *__a;
        __a.10 = __a;
        __a = __a.10 + 4;
        D.7339 = *__b;
        *__a.10 = D.7339;
        __b.11 = __b;
        __b = __b.11 + 4;
        *__b.11 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.7234>; else goto <D.7235>;
        <D.7235>:
      }
      goto <D.7341>;
      <D.7337>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = hi;
        <D.7240>:
        t = *__a;
        __a.12 = __a;
        __a = __a.12 + 1;
        D.7343 = *__b;
        *__a.12 = D.7343;
        __b.13 = __b;
        __b = __b.13 + 1;
        *__b.13 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.7240>; else goto <D.7241>;
        <D.7241>:
      }
      <D.7341>:
      D.7345 = compare (mid, lo, user_data);
      if (D.7345 < 0) goto <D.7346>; else goto <D.7347>;
      <D.7346>:
      if (swaplong != 0) goto <D.7348>; else goto <D.7349>;
      <D.7348>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.7307 = size / 4;
        __n = (long int) D.7307;
        __a = mid;
        __b = lo;
        <D.7246>:
        t = *__a;
        __a.14 = __a;
        __a = __a.14 + 4;
        D.7351 = *__b;
        *__a.14 = D.7351;
        __b.15 = __b;
        __b = __b.15 + 4;
        *__b.15 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.7246>; else goto <D.7247>;
        <D.7247>:
      }
      goto <D.7353>;
      <D.7349>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = lo;
        <D.7252>:
        t = *__a;
        __a.16 = __a;
        __a = __a.16 + 1;
        D.7355 = *__b;
        *__a.16 = D.7355;
        __b.17 = __b;
        __b = __b.17 + 1;
        *__b.17 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.7252>; else goto <D.7253>;
        <D.7253>:
      }
      <D.7353>:
      <D.7347>:
      <D.7335>:
      i = lo + size;
      D.7308 = -size;
      k = hi + D.7308;
      <D.7273>:
      goto <D.7255>;
      <D.7254>:
      i = i + size;
      <D.7255>:
      if (i < k) goto <D.7357>; else goto <D.7256>;
      <D.7357>:
      D.7358 = compare (i, mid, user_data);
      if (D.7358 <= 0) goto <D.7254>; else goto <D.7256>;
      <D.7256>:
      goto <D.7258>;
      <D.7257>:
      D.7308 = -size;
      k = k + D.7308;
      <D.7258>:
      if (k >= i) goto <D.7359>; else goto <D.7259>;
      <D.7359>:
      D.7360 = compare (mid, k, user_data);
      if (D.7360 < 0) goto <D.7257>; else goto <D.7259>;
      <D.7259>:
      if (k <= i) goto <D.7260>; else goto <D.7361>;
      <D.7361>:
      if (swaplong != 0) goto <D.7362>; else goto <D.7363>;
      <D.7362>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.7307 = size / 4;
        __n = (long int) D.7307;
        __a = i;
        __b = k;
        <D.7265>:
        t = *__a;
        __a.18 = __a;
        __a = __a.18 + 4;
        D.7365 = *__b;
        *__a.18 = D.7365;
        __b.19 = __b;
        __b = __b.19 + 4;
        *__b.19 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.7265>; else goto <D.7266>;
        <D.7266>:
      }
      goto <D.7367>;
      <D.7363>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = i;
        __b = k;
        <D.7271>:
        t = *__a;
        __a.20 = __a;
        __a = __a.20 + 1;
        D.7369 = *__b;
        *__a.20 = D.7369;
        __b.21 = __b;
        __b = __b.21 + 1;
        *__b.21 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.7271>; else goto <D.7272>;
        <D.7272>:
      }
      <D.7367>:
      if (mid == i) goto <D.7371>; else goto <D.7372>;
      <D.7371>:
      mid = k;
      goto <D.7373>;
      <D.7372>:
      if (mid == k) goto <D.7374>; else goto <D.7375>;
      <D.7374>:
      mid = i;
      <D.7375>:
      <D.7373>:
      i = i + size;
      D.7308 = -size;
      k = k + D.7308;
      goto <D.7273>;
      <D.7260>:
      if (k != mid) goto <D.7376>; else goto <D.7377>;
      <D.7376>:
      if (swaplong != 0) goto <D.7378>; else goto <D.7379>;
      <D.7378>:
      {
        long int __n;
        register long int * __a;
        register long int * __b;
        register long int t;

        D.7307 = size / 4;
        __n = (long int) D.7307;
        __a = mid;
        __b = k;
        <D.7278>:
        t = *__a;
        __a.22 = __a;
        __a = __a.22 + 4;
        D.7381 = *__b;
        *__a.22 = D.7381;
        __b.23 = __b;
        __b = __b.23 + 4;
        *__b.23 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.7278>; else goto <D.7279>;
        <D.7279>:
      }
      goto <D.7383>;
      <D.7379>:
      {
        long int __n;
        register char * __a;
        register char * __b;
        register char t;

        __n = (long int) size;
        __a = mid;
        __b = k;
        <D.7284>:
        t = *__a;
        __a.24 = __a;
        __a = __a.24 + 1;
        D.7385 = *__b;
        *__a.24 = D.7385;
        __b.25 = __b;
        __b = __b.25 + 1;
        *__b.25 = t;
        __n = __n + -1;
        if (__n > 0) goto <D.7284>; else goto <D.7285>;
        <D.7285>:
      }
      <D.7383>:
      <D.7377>:
      hi.26 = (int) hi;
      k.27 = (int) k;
      D.7389 = hi.26 - k.27;
      D.7390 = (unsigned int) D.7389;
      n2 = D.7390 / size;
      k.27 = (int) k;
      lo.28 = (int) lo;
      D.7392 = k.27 - lo.28;
      D.7393 = (unsigned int) D.7392;
      n1 = D.7393 / size;
      if (n2 > n1) goto <D.7394>; else goto <D.7395>;
      <D.7394>:
      if (n2 > 1) goto <D.7396>; else goto <D.7397>;
      <D.7396>:
      D.7398 = k + size;
      sp->array = D.7398;
      sp->count = n2;
      sp = sp + 8;
      <D.7397>:
      if (n1 > 1) goto <D.7399>; else goto <D.7400>;
      <D.7399>:
      sp->array = lo;
      sp->count = n1;
      sp = sp + 8;
      <D.7400>:
      goto <D.7401>;
      <D.7395>:
      if (n1 > 1) goto <D.7402>; else goto <D.7403>;
      <D.7402>:
      sp->array = lo;
      sp->count = n1;
      sp = sp + 8;
      <D.7403>:
      if (n2 > 1) goto <D.7404>; else goto <D.7405>;
      <D.7404>:
      D.7398 = k + size;
      sp->array = D.7398;
      sp->count = n2;
      sp = sp + 8;
      <D.7405>:
      <D.7401>:
      <D.7217>:
      if (&stack < sp) goto <D.7286>; else goto <D.7287>;
      <D.7287>:
    }
  finally
    {
      stack = {CLOBBER};
    }
}


