__attribute__((visibility ("hidden")))
mono_strtod (const char * s00, char * * se)
{
  double * rv.0;
  char D.6766;
  int D.6767;
  unsigned int D.6774;
  unsigned int c.1;
  unsigned int D.6776;
  unsigned int D.6780;
  unsigned int D.6781;
  unsigned int c.2;
  unsigned int D.6788;
  int nd.3;
  int nd.4;
  unsigned int D.6805;
  int D.6819;
  int D.6820;
  long int s.5;
  long int s1.6;
  long int D.6827;
  double D.6841;
  int D.6844;
  double D.6845;
  double D.6846;
  double D.6847;
  double D.6848;
  double D.6849;
  double D.6857;
  double D.6858;
  int D.6859;
  double D.6862;
  double D.6863;
  int D.6867;
  double D.6868;
  double D.6869;
  int D.6870;
  int * D.6879;
  int D.6881;
  double D.6884;
  double D.6885;
  unsigned int D.6886;
  unsigned int D.6887;
  unsigned int D.6892;
  double D.6898;
  int D.6902;
  double D.6907;
  double D.6908;
  unsigned int D.6911;
  unsigned int D.6912;
  unsigned int D.6913;
  int D.6921;
  unsigned int D.6922;
  unsigned int D.6923;
  unsigned int D.6925;
  unsigned int D.6926;
  unsigned int D.6927;
  int D.6931;
  int * D.6932;
  int * D.6933;
  int D.6934;
  long unsigned int D.6935;
  long unsigned int D.6936;
  long unsigned int D.6937;
  int bbe.7;
  int bbbits.8;
  int D.6946;
  long unsigned int D.6967;
  long unsigned int D.6968;
  unsigned int D.6970;
  unsigned int D.6972;
  int D.6975;
  int D.6977;
  unsigned int D.6983;
  guint32 iftmp.9;
  unsigned int D.6991;
  unsigned int D.6992;
  unsigned int D.6995;
  int D.7001;
  unsigned int D.7005;
  int D.7006;
  unsigned int D.7007;
  unsigned int D.7008;
  double D.7012;
  double D.7013;
  double D.7015;
  double D.7016;
  long unsigned int D.7025;
  double aadj1.10;
  double iftmp.11;
  double aadj1.12;
  double aadj1.13;
  double * rv0.14;
  double D.7044;
  double D.7045;
  long unsigned int D.7048;
  long unsigned int D.7049;
  double iftmp.15;
  double * aadj1.16;
  unsigned int D.7065;
  unsigned int D.7066;
  unsigned int D.7067;
  double D.7068;
  double D.7073;
  double D.7083;
  double D.7084;
  double D.7089;
  double iftmp.17;
  int scale;
  int bb2;
  int bb5;
  int bbe;
  int bd2;
  int bd5;
  int bbbits;
  int bs2;
  int c;
  int dsign;
  int e;
  int e1;
  int esign;
  int i;
  int j;
  int k;
  int nd;
  int nd0;
  int nf;
  int nz;
  int nz0;
  int sign;
  const char * s;
  const char * s0;
  const char * s1;
  double aadj;
  double aadj1;
  double adj;
  double rv;
  double rv0;
  gint32 L;
  guint32 y;
  guint32 z;
  struct Bigint * bb;
  struct Bigint * bb1;
  struct Bigint * bd;
  struct Bigint * bd0;
  struct Bigint * bs;
  struct Bigint * delta;
  void break2 = <<< error >>>;
  void ret0 = <<< error >>>;
  void ret = <<< error >>>;
  void have_dig = <<< error >>>;
  void dig_done = <<< error >>>;
  void ovfl = <<< error >>>;
  void retfree = <<< error >>>;
  void undfl = <<< error >>>;
  void drop_down = <<< error >>>;
  void cont = <<< error >>>;

  try
    {
      bb = 0B;
      bd = 0B;
      bs = 0B;
      delta = 0B;
      nz = 0;
      nz0 = nz;
      sign = nz0;
      rv.0 = &rv;
      MEM[(union U *)rv.0].d = 0.0;
      s = s00;
      <D.6724>:
      D.6766 = *s;
      D.6767 = (int) D.6766;
      switch (D.6767) <default: <D.6723>, case 0: <D.6714>, case 9: <D.6716>, case 10: <D.6717>, case 11: <D.6718>, case 12: <D.6719>, case 13: <D.6720>, case 32: <D.6721>, case 43: <D.6712>, case 45: <D.6711>>
      <D.6711>:
      sign = 1;
      <D.6712>:
      s = s + 1;
      D.6766 = *s;
      if (D.6766 != 0) goto break2; else goto <D.6768>;
      <D.6768>:
      <D.6714>:
      goto ret0;
      <D.6716>:
      <D.6717>:
      <D.6718>:
      <D.6719>:
      <D.6720>:
      <D.6721>:
      // predicted unlikely by continue predictor.
      goto <D.6722>;
      <D.6723>:
      goto break2;
      <D.6722>:
      s = s + 1;
      goto <D.6724>;
      break2:
      D.6766 = *s;
      if (D.6766 == 48) goto <D.6769>; else goto <D.6770>;
      <D.6769>:
      nz0 = 1;
      goto <D.6726>;
      <D.6725>:
      <D.6726>:
      s = s + 1;
      D.6766 = *s;
      if (D.6766 == 48) goto <D.6725>; else goto <D.6727>;
      <D.6727>:
      D.6766 = *s;
      if (D.6766 == 0) goto ret; else goto <D.6771>;
      <D.6771>:
      <D.6770>:
      s0 = s;
      z = 0;
      y = z;
      nf = 0;
      nd = nf;
      goto <D.6730>;
      <D.6729>:
      if (nd <= 8) goto <D.6772>; else goto <D.6773>;
      <D.6772>:
      D.6774 = y * 10;
      c.1 = (unsigned int) c;
      D.6776 = D.6774 + c.1;
      y = D.6776 + 4294967248;
      goto <D.6777>;
      <D.6773>:
      if (nd <= 15) goto <D.6778>; else goto <D.6779>;
      <D.6778>:
      D.6780 = z * 10;
      c.1 = (unsigned int) c;
      D.6781 = D.6780 + c.1;
      z = D.6781 + 4294967248;
      <D.6779>:
      <D.6777>:
      nd = nd + 1;
      s = s + 1;
      <D.6730>:
      D.6766 = *s;
      c = (int) D.6766;
      if (c > 47) goto <D.6782>; else goto <D.6731>;
      <D.6782>:
      if (c <= 57) goto <D.6729>; else goto <D.6731>;
      <D.6731>:
      nd0 = nd;
      if (c == 46) goto <D.6783>; else goto <D.6784>;
      <D.6783>:
      s = s + 1;
      D.6766 = *s;
      c = (int) D.6766;
      if (nd == 0) goto <D.6785>; else goto <D.6786>;
      <D.6785>:
      goto <D.6733>;
      <D.6732>:
      nz = nz + 1;
      s = s + 1;
      D.6766 = *s;
      c = (int) D.6766;
      <D.6733>:
      if (c == 48) goto <D.6732>; else goto <D.6734>;
      <D.6734>:
      c.2 = (unsigned int) c;
      D.6788 = c.2 + 4294967247;
      if (D.6788 <= 8) goto <D.6789>; else goto <D.6790>;
      <D.6789>:
      s0 = s;
      nf = nf + nz;
      nz = 0;
      goto have_dig;
      <D.6790>:
      goto dig_done;
      <D.6786>:
      goto <D.6741>;
      <D.6740>:
      have_dig:
      nz = nz + 1;
      c = c + -48;
      if (c != 0) goto <D.6791>; else goto <D.6792>;
      <D.6791>:
      nf = nf + nz;
      i = 1;
      goto <D.6738>;
      <D.6737>:
      nd.3 = nd;
      nd = nd.3 + 1;
      if (nd.3 <= 8) goto <D.6794>; else goto <D.6795>;
      <D.6794>:
      y = y * 10;
      goto <D.6796>;
      <D.6795>:
      if (nd <= 16) goto <D.6797>; else goto <D.6798>;
      <D.6797>:
      z = z * 10;
      <D.6798>:
      <D.6796>:
      i = i + 1;
      <D.6738>:
      if (i < nz) goto <D.6737>; else goto <D.6739>;
      <D.6739>:
      nd.4 = nd;
      nd = nd.4 + 1;
      if (nd.4 <= 8) goto <D.6800>; else goto <D.6801>;
      <D.6800>:
      D.6774 = y * 10;
      c.1 = (unsigned int) c;
      y = D.6774 + c.1;
      goto <D.6802>;
      <D.6801>:
      if (nd <= 16) goto <D.6803>; else goto <D.6804>;
      <D.6803>:
      D.6780 = z * 10;
      c.1 = (unsigned int) c;
      z = D.6780 + c.1;
      <D.6804>:
      <D.6802>:
      nz = 0;
      <D.6792>:
      s = s + 1;
      D.6766 = *s;
      c = (int) D.6766;
      <D.6741>:
      c.2 = (unsigned int) c;
      D.6805 = c.2 + 4294967248;
      if (D.6805 <= 9) goto <D.6740>; else goto <D.6742>;
      <D.6742>:
      <D.6784>:
      dig_done:
      e = 0;
      if (c == 101) goto <D.6806>; else goto <D.6808>;
      <D.6808>:
      if (c == 69) goto <D.6806>; else goto <D.6807>;
      <D.6806>:
      if (nd == 0) goto <D.6809>; else goto <D.6810>;
      <D.6809>:
      if (nz == 0) goto <D.6811>; else goto <D.6812>;
      <D.6811>:
      if (nz0 == 0) goto ret0; else goto <D.6813>;
      <D.6813>:
      <D.6812>:
      <D.6810>:
      s00 = s;
      esign = 0;
      s = s + 1;
      D.6766 = *s;
      c = (int) D.6766;
      switch (c) <default: <D.6814>, case 43: <D.6744>, case 45: <D.6743>>
      <D.6743>:
      esign = 1;
      <D.6744>:
      s = s + 1;
      D.6766 = *s;
      c = (int) D.6766;
      <D.6814>:
      c.2 = (unsigned int) c;
      D.6805 = c.2 + 4294967248;
      if (D.6805 <= 9) goto <D.6815>; else goto <D.6816>;
      <D.6815>:
      goto <D.6746>;
      <D.6745>:
      s = s + 1;
      D.6766 = *s;
      c = (int) D.6766;
      <D.6746>:
      if (c == 48) goto <D.6745>; else goto <D.6747>;
      <D.6747>:
      c.2 = (unsigned int) c;
      D.6788 = c.2 + 4294967247;
      if (D.6788 <= 8) goto <D.6817>; else goto <D.6818>;
      <D.6817>:
      L = c + -48;
      s1 = s;
      goto <D.6749>;
      <D.6748>:
      D.6819 = L * 10;
      D.6820 = D.6819 + c;
      L = D.6820 + -48;
      <D.6749>:
      s = s + 1;
      D.6766 = *s;
      c = (int) D.6766;
      if (c > 47) goto <D.6821>; else goto <D.6750>;
      <D.6821>:
      if (c <= 57) goto <D.6748>; else goto <D.6750>;
      <D.6750>:
      s.5 = (long int) s;
      s1.6 = (long int) s1;
      D.6827 = s.5 - s1.6;
      if (D.6827 > 8) goto <D.6822>; else goto <D.6828>;
      <D.6828>:
      if (L > 19999) goto <D.6822>; else goto <D.6823>;
      <D.6822>:
      e = 19999;
      goto <D.6824>;
      <D.6823>:
      e = L;
      <D.6824>:
      if (esign != 0) goto <D.6829>; else goto <D.6830>;
      <D.6829>:
      e = -e;
      <D.6830>:
      goto <D.6831>;
      <D.6818>:
      e = 0;
      <D.6831>:
      goto <D.6832>;
      <D.6816>:
      s = s00;
      <D.6832>:
      <D.6807>:
      if (nd == 0) goto <D.6833>; else goto <D.6834>;
      <D.6833>:
      if (nz == 0) goto <D.6835>; else goto <D.6836>;
      <D.6835>:
      if (nz0 == 0) goto <D.6837>; else goto <D.6838>;
      <D.6837>:
      ret0:
      s = s00;
      sign = 0;
      <D.6838>:
      <D.6836>:
      goto ret;
      <D.6834>:
      e = e - nf;
      e1 = e;
      if (nd0 == 0) goto <D.6839>; else goto <D.6840>;
      <D.6839>:
      nd0 = nd;
      <D.6840>:
      k = MIN_EXPR <nd, 16>;
      rv.0 = &rv;
      D.6841 = (double) y;
      MEM[(union U *)rv.0].d = D.6841;
      if (k > 9) goto <D.6842>; else goto <D.6843>;
      <D.6842>:
      rv.0 = &rv;
      D.6844 = k + -9;
      D.6845 = tens[D.6844];
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.6847 = D.6845 * D.6846;
      D.6848 = (double) z;
      D.6849 = D.6847 + D.6848;
      MEM[(union U *)rv.0].d = D.6849;
      <D.6843>:
      bd0 = 0B;
      if (nd <= 15) goto <D.6850>; else goto <D.6851>;
      <D.6850>:
      if (e == 0) goto ret; else goto <D.6852>;
      <D.6852>:
      if (e > 0) goto <D.6853>; else goto <D.6854>;
      <D.6853>:
      if (e <= 22) goto <D.6855>; else goto <D.6856>;
      <D.6855>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.6857 = tens[e];
      D.6858 = D.6846 * D.6857;
      MEM[(union U *)rv.0].d = D.6858;
      goto ret;
      <D.6856>:
      i = 15 - nd;
      D.6859 = i + 22;
      if (D.6859 >= e) goto <D.6860>; else goto <D.6861>;
      <D.6860>:
      e = e - i;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.6862 = tens[i];
      D.6863 = D.6846 * D.6862;
      MEM[(union U *)rv.0].d = D.6863;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.6857 = tens[e];
      D.6858 = D.6846 * D.6857;
      MEM[(union U *)rv.0].d = D.6858;
      goto ret;
      <D.6861>:
      goto <D.6864>;
      <D.6854>:
      if (e >= -22) goto <D.6865>; else goto <D.6866>;
      <D.6865>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.6867 = -e;
      D.6868 = tens[D.6867];
      D.6869 = D.6846 / D.6868;
      MEM[(union U *)rv.0].d = D.6869;
      goto ret;
      <D.6866>:
      <D.6864>:
      <D.6851>:
      D.6870 = nd - k;
      e1 = D.6870 + e1;
      scale = 0;
      if (e1 > 0) goto <D.6871>; else goto <D.6872>;
      <D.6871>:
      i = e1 & 15;
      if (i != 0) goto <D.6873>; else goto <D.6874>;
      <D.6873>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.6862 = tens[i];
      D.6863 = D.6846 * D.6862;
      MEM[(union U *)rv.0].d = D.6863;
      <D.6874>:
      e1 = e1 & -16;
      if (e1 != 0) goto <D.6875>; else goto <D.6876>;
      <D.6875>:
      if (e1 > 308) goto <D.6877>; else goto <D.6878>;
      <D.6877>:
      ovfl:
      D.6879 = __errno_location ();
      *D.6879 = 34;
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[0] = 2146435072;
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[1] = 0;
      if (bd0 != 0B) goto retfree; else goto <D.6880>;
      <D.6880>:
      goto ret;
      <D.6878>:
      e1 = e1 >> 4;
      j = 0;
      goto <D.6754>;
      <D.6753>:
      D.6881 = e1 & 1;
      if (D.6881 != 0) goto <D.6882>; else goto <D.6883>;
      <D.6882>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.6884 = bigtens[j];
      D.6885 = D.6846 * D.6884;
      MEM[(union U *)rv.0].d = D.6885;
      <D.6883>:
      j = j + 1;
      e1 = e1 >> 1;
      <D.6754>:
      if (e1 > 1) goto <D.6753>; else goto <D.6755>;
      <D.6755>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      D.6887 = D.6886 + 4239392768;
      MEM[(union U *)rv.0].L[0] = D.6887;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.6884 = bigtens[j];
      D.6885 = D.6846 * D.6884;
      MEM[(union U *)rv.0].d = D.6885;
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      z = D.6886 & 2146435072;
      if (z > 2090860544) goto ovfl; else goto <D.6888>;
      <D.6888>:
      if (z > 2089811968) goto <D.6889>; else goto <D.6890>;
      <D.6889>:
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[0] = 2146435071;
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[1] = 4294967295;
      goto <D.6891>;
      <D.6890>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      D.6892 = D.6886 + 55574528;
      MEM[(union U *)rv.0].L[0] = D.6892;
      <D.6891>:
      <D.6876>:
      goto <D.6893>;
      <D.6872>:
      if (e1 < 0) goto <D.6894>; else goto <D.6895>;
      <D.6894>:
      e1 = -e1;
      i = e1 & 15;
      if (i != 0) goto <D.6896>; else goto <D.6897>;
      <D.6896>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.6862 = tens[i];
      D.6898 = D.6846 / D.6862;
      MEM[(union U *)rv.0].d = D.6898;
      <D.6897>:
      e1 = e1 >> 4;
      if (e1 != 0) goto <D.6899>; else goto <D.6900>;
      <D.6899>:
      if (e1 > 31) goto undfl; else goto <D.6901>;
      <D.6901>:
      D.6902 = e1 & 16;
      if (D.6902 != 0) goto <D.6903>; else goto <D.6904>;
      <D.6903>:
      scale = 106;
      <D.6904>:
      j = 0;
      goto <D.6758>;
      <D.6757>:
      D.6881 = e1 & 1;
      if (D.6881 != 0) goto <D.6905>; else goto <D.6906>;
      <D.6905>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.6907 = tinytens[j];
      D.6908 = D.6846 * D.6907;
      MEM[(union U *)rv.0].d = D.6908;
      <D.6906>:
      j = j + 1;
      e1 = e1 >> 1;
      <D.6758>:
      if (e1 > 0) goto <D.6757>; else goto <D.6759>;
      <D.6759>:
      if (scale != 0) goto <D.6909>; else goto <D.6910>;
      <D.6909>:
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      D.6911 = D.6886 >> 20;
      D.6912 = D.6911 & 2047;
      D.6913 = 107 - D.6912;
      j = (int) D.6913;
      if (j > 0) goto <D.6914>; else goto <D.6915>;
      <D.6914>:
      if (j > 31) goto <D.6916>; else goto <D.6917>;
      <D.6916>:
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[1] = 0;
      if (j > 52) goto <D.6918>; else goto <D.6919>;
      <D.6918>:
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[0] = 57671680;
      goto <D.6920>;
      <D.6919>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      D.6921 = j + -32;
      D.6922 = 4294967295 << D.6921;
      D.6923 = D.6886 & D.6922;
      MEM[(union U *)rv.0].L[0] = D.6923;
      <D.6920>:
      goto <D.6924>;
      <D.6917>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6925 = MEM[(union U *)rv.0].L[1];
      D.6926 = 4294967295 << j;
      D.6927 = D.6925 & D.6926;
      MEM[(union U *)rv.0].L[1] = D.6927;
      <D.6924>:
      <D.6915>:
      <D.6910>:
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      if (D.6846 == 0.0) goto <D.6928>; else goto <D.6929>;
      <D.6928>:
      undfl:
      rv.0 = &rv;
      MEM[(union U *)rv.0].d = 0.0;
      D.6879 = __errno_location ();
      *D.6879 = 34;
      if (bd0 != 0B) goto retfree; else goto <D.6930>;
      <D.6930>:
      goto ret;
      <D.6929>:
      <D.6900>:
      <D.6895>:
      <D.6893>:
      bd0 = s2b (s0, nd0, nd, y);
      <D.6763>:
      D.6931 = bd0->k;
      bd = Balloc (D.6931);
      D.6932 = &bd->sign;
      D.6933 = &bd0->sign;
      D.6934 = bd0->wds;
      D.6935 = (long unsigned int) D.6934;
      D.6936 = D.6935 + 2;
      D.6937 = D.6936 * 4;
      memcpy (D.6932, D.6933, D.6937);
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      bb = d2b (D.6846, &bbe, &bbbits);
      bs = i2b (1);
      if (e >= 0) goto <D.6938>; else goto <D.6939>;
      <D.6938>:
      bb5 = 0;
      bb2 = bb5;
      bd5 = e;
      bd2 = bd5;
      goto <D.6940>;
      <D.6939>:
      bb5 = -e;
      bb2 = bb5;
      bd5 = 0;
      bd2 = bd5;
      <D.6940>:
      bbe.7 = bbe;
      if (bbe.7 >= 0) goto <D.6942>; else goto <D.6943>;
      <D.6942>:
      bbe.7 = bbe;
      bb2 = bb2 + bbe.7;
      goto <D.6944>;
      <D.6943>:
      bbe.7 = bbe;
      bd2 = bd2 - bbe.7;
      <D.6944>:
      bs2 = bb2;
      bbe.7 = bbe;
      j = bbe.7 - scale;
      bbbits.8 = bbbits;
      D.6946 = j + bbbits.8;
      i = D.6946 + -1;
      if (i < -1022) goto <D.6947>; else goto <D.6948>;
      <D.6947>:
      j = j + 1075;
      goto <D.6949>;
      <D.6948>:
      bbbits.8 = bbbits;
      j = 54 - bbbits.8;
      <D.6949>:
      bb2 = bb2 + j;
      bd2 = bd2 + j;
      bd2 = bd2 + scale;
      i = MIN_EXPR <bd2, bb2>;
      if (i > bs2) goto <D.6950>; else goto <D.6951>;
      <D.6950>:
      i = bs2;
      <D.6951>:
      if (i > 0) goto <D.6952>; else goto <D.6953>;
      <D.6952>:
      bb2 = bb2 - i;
      bd2 = bd2 - i;
      bs2 = bs2 - i;
      <D.6953>:
      if (bb5 > 0) goto <D.6954>; else goto <D.6955>;
      <D.6954>:
      bs = pow5mult (bs, bb5);
      bb1 = mult (bs, bb);
      Bfree (bb);
      bb = bb1;
      <D.6955>:
      if (bb2 > 0) goto <D.6956>; else goto <D.6957>;
      <D.6956>:
      bb = lshift (bb, bb2);
      <D.6957>:
      if (bd5 > 0) goto <D.6958>; else goto <D.6959>;
      <D.6958>:
      bd = pow5mult (bd, bd5);
      <D.6959>:
      if (bd2 > 0) goto <D.6960>; else goto <D.6961>;
      <D.6960>:
      bd = lshift (bd, bd2);
      <D.6961>:
      if (bs2 > 0) goto <D.6962>; else goto <D.6963>;
      <D.6962>:
      bs = lshift (bs, bs2);
      <D.6963>:
      delta = diff (bb, bd);
      dsign = delta->sign;
      delta->sign = 0;
      i = cmp (delta, bs);
      if (i < 0) goto <D.6964>; else goto <D.6965>;
      <D.6964>:
      if (dsign != 0) goto <D.6760>; else goto <D.6966>;
      <D.6966>:
      D.6967 = BIT_FIELD_REF <MEM[(void *)&rv], 64, 0>;
      D.6968 = D.6967 & 4503599627370495;
      if (D.6968 != 0) goto <D.6760>; else goto <D.6969>;
      <D.6969>:
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      D.6970 = D.6886 & 2146435072;
      if (D.6970 <= 112197632) goto <D.6760>; else goto <D.6971>;
      <D.6971>:
      D.6972 = delta->x[0];
      if (D.6972 == 0) goto <D.6973>; else goto <D.6974>;
      <D.6973>:
      D.6975 = delta->wds;
      if (D.6975 <= 1) goto <D.6760>; else goto <D.6976>;
      <D.6976>:
      <D.6974>:
      delta = lshift (delta, 1);
      D.6977 = cmp (delta, bs);
      if (D.6977 > 0) goto drop_down; else goto <D.6978>;
      <D.6978>:
      goto <D.6760>;
      <D.6965>:
      if (i == 0) goto <D.6979>; else goto <D.6980>;
      <D.6979>:
      if (dsign != 0) goto <D.6981>; else goto <D.6982>;
      <D.6981>:
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      D.6983 = D.6886 & 1048575;
      if (D.6983 == 1048575) goto <D.6984>; else goto <D.6985>;
      <D.6984>:
      rv.0 = &rv;
      D.6925 = MEM[(union U *)rv.0].L[1];
      if (scale != 0) goto <D.6989>; else goto <D.6987>;
      <D.6989>:
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      y = D.6886 & 2146435072;
      if (y <= 111149056) goto <D.6990>; else goto <D.6987>;
      <D.6990>:
      D.6991 = y >> 20;
      D.6992 = 107 - D.6991;
      iftmp.9 = 4294967295 << D.6992;
      goto <D.6988>;
      <D.6987>:
      iftmp.9 = 4294967295;
      <D.6988>:
      if (D.6925 == iftmp.9) goto <D.6993>; else goto <D.6994>;
      <D.6993>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      D.6970 = D.6886 & 2146435072;
      D.6995 = D.6970 + 1048576;
      MEM[(union U *)rv.0].L[0] = D.6995;
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[1] = 0;
      dsign = 0;
      goto <D.6760>;
      <D.6994>:
      <D.6985>:
      goto <D.6996>;
      <D.6982>:
      D.6967 = BIT_FIELD_REF <MEM[(void *)&rv], 64, 0>;
      D.6968 = D.6967 & 4503599627370495;
      if (D.6968 == 0) goto <D.6997>; else goto <D.6998>;
      <D.6997>:
      drop_down:
      if (scale != 0) goto <D.6999>; else goto <D.7000>;
      <D.6999>:
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      D.7001 = (int) D.6886;
      L = D.7001 & 2146435072;
      if (L <= 112197632) goto <D.7002>; else goto <D.7003>;
      <D.7002>:
      if (L > 57671680) goto <D.6760>; else goto <D.7004>;
      <D.7004>:
      goto undfl;
      <D.7003>:
      <D.7000>:
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      D.6970 = D.6886 & 2146435072;
      D.7005 = D.6970 + 4293918720;
      L = (gint32) D.7005;
      rv.0 = &rv;
      D.7006 = L | 1048575;
      D.7007 = (unsigned int) D.7006;
      MEM[(union U *)rv.0].L[0] = D.7007;
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[1] = 4294967295;
      goto <D.6760>;
      <D.6998>:
      <D.6996>:
      rv.0 = &rv;
      D.6925 = MEM[(union U *)rv.0].L[1];
      D.7008 = D.6925 & 1;
      if (D.7008 == 0) goto <D.6760>; else goto <D.7009>;
      <D.7009>:
      if (dsign != 0) goto <D.7010>; else goto <D.7011>;
      <D.7010>:
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.7012 = ulp (D.6846);
      rv.0 = &rv;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.7013 = D.6846 + D.7012;
      MEM[(union U *)rv.0].d = D.7013;
      goto <D.7014>;
      <D.7011>:
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.7015 = ulp (D.6846);
      rv.0 = &rv;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.7016 = D.6846 - D.7015;
      MEM[(union U *)rv.0].d = D.7016;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      if (D.6846 == 0.0) goto undfl; else goto <D.7017>;
      <D.7017>:
      <D.7014>:
      dsign = 1 - dsign;
      goto <D.6760>;
      <D.6980>:
      aadj = ratio (delta, bs);
      if (aadj <= 2.0e+0) goto <D.7018>; else goto <D.7019>;
      <D.7018>:
      if (dsign != 0) goto <D.7020>; else goto <D.7021>;
      <D.7020>:
      aadj1 = 1.0e+0;
      aadj = aadj1;
      goto <D.7022>;
      <D.7021>:
      D.6967 = BIT_FIELD_REF <MEM[(void *)&rv], 64, 0>;
      D.6968 = D.6967 & 4503599627370495;
      if (D.6968 != 0) goto <D.7023>; else goto <D.7024>;
      <D.7023>:
      D.6967 = BIT_FIELD_REF <MEM[(void *)&rv], 64, 0>;
      D.7025 = D.6967;
      if (D.7025 == 1) goto undfl; else goto <D.7026>;
      <D.7026>:
      aadj = 1.0e+0;
      aadj1 = -1.0e+0;
      goto <D.7027>;
      <D.7024>:
      if (aadj < 1.0e+0) goto <D.7028>; else goto <D.7029>;
      <D.7028>:
      aadj = 5.0e-1;
      goto <D.7030>;
      <D.7029>:
      aadj = aadj * 5.0e-1;
      <D.7030>:
      aadj1.10 = -aadj;
      aadj1 = aadj1.10;
      <D.7027>:
      <D.7022>:
      goto <D.7032>;
      <D.7019>:
      aadj = aadj * 5.0e-1;
      if (dsign == 0) goto <D.7034>; else goto <D.7035>;
      <D.7034>:
      iftmp.11 = -aadj;
      goto <D.7036>;
      <D.7035>:
      iftmp.11 = aadj;
      <D.7036>:
      aadj1 = iftmp.11;
      if (0 != 0) goto <D.7037>; else goto <D.7038>;
      <D.7037>:
      aadj1.12 = aadj1;
      aadj1.13 = aadj1.12 + 5.0e-1;
      aadj1 = aadj1.13;
      <D.7038>:
      <D.7032>:
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      y = D.6886 & 2146435072;
      if (y == 2145386496) goto <D.7041>; else goto <D.7042>;
      <D.7041>:
      rv0.14 = &rv0;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      MEM[(union U *)rv0.14].d = D.6846;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      D.6887 = D.6886 + 4239392768;
      MEM[(union U *)rv.0].L[0] = D.6887;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.7044 = ulp (D.6846);
      aadj1.12 = aadj1;
      adj = D.7044 * aadj1.12;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.7045 = D.6846 + adj;
      MEM[(union U *)rv.0].d = D.7045;
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      D.6970 = D.6886 & 2146435072;
      if (D.6970 > 2090860543) goto <D.7046>; else goto <D.7047>;
      <D.7046>:
      D.7048 = BIT_FIELD_REF <MEM[(void *)&rv0], 64, 0>;
      D.7049 = D.7048;
      if (D.7049 == 9218868437227405311) goto ovfl; else goto <D.7050>;
      <D.7050>:
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[0] = 2146435071;
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[1] = 4294967295;
      goto cont;
      <D.7047>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      D.6892 = D.6886 + 55574528;
      MEM[(union U *)rv.0].L[0] = D.6892;
      goto <D.7051>;
      <D.7042>:
      if (scale != 0) goto <D.7052>; else goto <D.7053>;
      <D.7052>:
      if (y <= 111149056) goto <D.7054>; else goto <D.7055>;
      <D.7054>:
      if (aadj <= 2.147483647e+9) goto <D.7056>; else goto <D.7057>;
      <D.7056>:
      z = (guint32) aadj;
      if (z == 0) goto <D.7058>; else goto <D.7059>;
      <D.7058>:
      z = 1;
      <D.7059>:
      aadj = (double) z;
      if (dsign == 0) goto <D.7061>; else goto <D.7062>;
      <D.7061>:
      iftmp.15 = -aadj;
      goto <D.7063>;
      <D.7062>:
      iftmp.15 = aadj;
      <D.7063>:
      aadj1 = iftmp.15;
      <D.7057>:
      aadj1.16 = &aadj1;
      aadj1.16 = &aadj1;
      D.7065 = MEM[(union U *)aadj1.16].L[0];
      D.7066 = D.7065 - y;
      D.7067 = D.7066 + 112197632;
      MEM[(union U *)aadj1.16].L[0] = D.7067;
      <D.7055>:
      <D.7053>:
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.7068 = ulp (D.6846);
      aadj1.12 = aadj1;
      adj = D.7068 * aadj1.12;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      D.7045 = D.6846 + adj;
      MEM[(union U *)rv.0].d = D.7045;
      <D.7051>:
      rv.0 = &rv;
      D.6886 = MEM[(union U *)rv.0].L[0];
      z = D.6886 & 2146435072;
      if (scale == 0) goto <D.7069>; else goto <D.7070>;
      <D.7069>:
      if (y == z) goto <D.7071>; else goto <D.7072>;
      <D.7071>:
      L = (gint32) aadj;
      D.7073 = (double) L;
      aadj = aadj - D.7073;
      if (dsign != 0) goto <D.7074>; else goto <D.7077>;
      <D.7077>:
      D.6967 = BIT_FIELD_REF <MEM[(void *)&rv], 64, 0>;
      D.6968 = D.6967 & 4503599627370495;
      if (D.6968 != 0) goto <D.7074>; else goto <D.7075>;
      <D.7074>:
      if (aadj < 4.99999899999999997124433548378874547779560089111328125e-1) goto <D.6760>; else goto <D.7078>;
      <D.7078>:
      if (aadj > 5.0000009999999994736441522036329843103885650634765625e-1) goto <D.6760>; else goto <D.7079>;
      <D.7079>:
      goto <D.7076>;
      <D.7075>:
      if (aadj < 2.499999499999999985622167741894372738897800445556640625e-1) goto <D.6760>; else goto <D.7080>;
      <D.7080>:
      <D.7076>:
      <D.7072>:
      <D.7070>:
      cont:
      Bfree (bb);
      Bfree (bd);
      Bfree (bs);
      Bfree (delta);
      goto <D.6763>;
      <D.6760>:
      if (scale != 0) goto <D.7081>; else goto <D.7082>;
      <D.7081>:
      rv0.14 = &rv0;
      MEM[(union U *)rv0.14].L[0] = 961544192;
      rv0.14 = &rv0;
      MEM[(union U *)rv0.14].L[1] = 0;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      rv0.14 = &rv0;
      D.7083 = MEM[(union U *)rv0.14].d;
      D.7084 = D.6846 * D.7083;
      MEM[(union U *)rv.0].d = D.7084;
      D.6967 = BIT_FIELD_REF <MEM[(void *)&rv], 64, 0>;
      D.7025 = D.6967;
      if (D.7025 == 0) goto <D.7085>; else goto <D.7086>;
      <D.7085>:
      D.6879 = __errno_location ();
      *D.6879 = 34;
      <D.7086>:
      <D.7082>:
      retfree:
      Bfree (bb);
      Bfree (bd);
      Bfree (bs);
      Bfree (bd0);
      Bfree (delta);
      ret:
      if (se != 0B) goto <D.7087>; else goto <D.7088>;
      <D.7087>:
      *se = s;
      <D.7088>:
      if (sign != 0) goto <D.7091>; else goto <D.7092>;
      <D.7091>:
      rv.0 = &rv;
      D.6846 = MEM[(union U *)rv.0].d;
      iftmp.17 = -D.6846;
      goto <D.7093>;
      <D.7092>:
      rv.0 = &rv;
      iftmp.17 = MEM[(union U *)rv.0].d;
      <D.7093>:
      D.7089 = iftmp.17;
      return D.7089;
    }
  finally
    {
      bbe = {CLOBBER};
      bbbits = {CLOBBER};
      aadj1 = {CLOBBER};
      rv = {CLOBBER};
      rv0 = {CLOBBER};
    }
}


s2b (const char * s, int nd0, int nd, guint32 y9)
{
  int D.7096;
  const char * s.18;
  char D.7100;
  int D.7101;
  int D.7102;
  const char * s.19;
  char D.7105;
  int D.7106;
  int D.7107;
  struct Bigint * D.7108;
  struct Bigint * b;
  int i;
  int k;
  gint32 x;
  gint32 y;

  D.7096 = nd + 8;
  x = D.7096 / 9;
  k = 0;
  y = 1;
  goto <D.6507>;
  <D.6506>:
  y = y << 1;
  k = k + 1;
  <D.6507>:
  if (x > y) goto <D.6506>; else goto <D.6508>;
  <D.6508>:
  b = Balloc (k);
  b->x[0] = y9;
  b->wds = 1;
  i = 9;
  if (nd0 > 9) goto <D.7097>; else goto <D.7098>;
  <D.7097>:
  s = s + 9;
  <D.6509>:
  s.18 = s;
  s = s.18 + 1;
  D.7100 = *s.18;
  D.7101 = (int) D.7100;
  D.7102 = D.7101 + -48;
  b = multadd (b, 10, D.7102);
  i = i + 1;
  if (i < nd0) goto <D.6509>; else goto <D.6510>;
  <D.6510>:
  s = s + 1;
  goto <D.7103>;
  <D.7098>:
  s = s + 10;
  <D.7103>:
  goto <D.6512>;
  <D.6511>:
  s.19 = s;
  s = s.19 + 1;
  D.7105 = *s.19;
  D.7106 = (int) D.7105;
  D.7107 = D.7106 + -48;
  b = multadd (b, 10, D.7107);
  i = i + 1;
  <D.6512>:
  if (i < nd) goto <D.6511>; else goto <D.6513>;
  <D.6513>:
  D.7108 = b;
  return D.7108;
}


multadd (struct Bigint * b, int m, int a)
{
  unsigned int D.7110;
  long long unsigned int D.7111;
  long long unsigned int D.7112;
  long long unsigned int D.7113;
  guint32 * x.20;
  unsigned int D.7115;
  int D.7118;
  int D.7121;
  int D.7122;
  int * D.7123;
  int * D.7124;
  int D.7125;
  long unsigned int D.7126;
  long unsigned int D.7127;
  long unsigned int D.7128;
  int wds.21;
  unsigned int D.7130;
  struct Bigint * D.7131;
  int i;
  int wds;
  guint32 * x;
  long long unsigned int carry;
  long long unsigned int y;
  struct Bigint * b1;

  wds = b->wds;
  x = &b->x;
  i = 0;
  carry = (long long unsigned int) a;
  <D.6493>:
  D.7110 = *x;
  D.7111 = (long long unsigned int) D.7110;
  D.7112 = (long long unsigned int) m;
  D.7113 = D.7111 * D.7112;
  y = D.7113 + carry;
  carry = y >> 32;
  x.20 = x;
  x = x.20 + 4;
  D.7115 = (unsigned int) y;
  *x.20 = D.7115;
  i = i + 1;
  if (i < wds) goto <D.6493>; else goto <D.6494>;
  <D.6494>:
  if (carry != 0) goto <D.7116>; else goto <D.7117>;
  <D.7116>:
  D.7118 = b->maxwds;
  if (D.7118 <= wds) goto <D.7119>; else goto <D.7120>;
  <D.7119>:
  D.7121 = b->k;
  D.7122 = D.7121 + 1;
  b1 = Balloc (D.7122);
  D.7123 = &b1->sign;
  D.7124 = &b->sign;
  D.7125 = b->wds;
  D.7126 = (long unsigned int) D.7125;
  D.7127 = D.7126 + 2;
  D.7128 = D.7127 * 4;
  memcpy (D.7123, D.7124, D.7128);
  Bfree (b);
  b = b1;
  <D.7120>:
  wds.21 = wds;
  wds = wds.21 + 1;
  D.7130 = (unsigned int) carry;
  b->x[wds.21] = D.7130;
  b->wds = wds;
  <D.7117>:
  D.7131 = b;
  return D.7131;
}


Balloc (int k)
{
  struct Bigint * D.7135;
  int D.7137;
  long unsigned int D.7138;
  long unsigned int D.7139;
  long unsigned int D.7140;
  int D.7141;
  struct Bigint * D.7142;
  int x;
  struct Bigint * rv;

  rv = freelist[k];
  if (rv != 0B) goto <D.7133>; else goto <D.7134>;
  <D.7133>:
  D.7135 = rv->next;
  freelist[k] = D.7135;
  goto <D.7136>;
  <D.7134>:
  x = 1 << k;
  D.7137 = x + -1;
  D.7138 = (long unsigned int) D.7137;
  D.7139 = D.7138 + 8;
  D.7140 = D.7139 * 4;
  rv = malloc (D.7140);
  rv->k = k;
  rv->maxwds = x;
  <D.7136>:
  rv->wds = 0;
  D.7141 = rv->wds;
  rv->sign = D.7141;
  D.7142 = rv;
  return D.7142;
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.7144;
  long unsigned int D.7145;

  D.7145 = __builtin_object_size (__dest, 0);
  D.7144 = __builtin___memcpy_chk (__dest, __src, __len, D.7145);
  return D.7144;
}


d2b (double d, int * e, int * bits)
{
  double * d.22;
  unsigned int D.7148;
  unsigned int z.23;
  unsigned int D.7150;
  unsigned int D.7151;
  unsigned int z.24;
  unsigned int z.25;
  unsigned int y.26;
  unsigned int y.27;
  int D.7162;
  unsigned int D.7163;
  unsigned int D.7164;
  unsigned int z.28;
  int iftmp.29;
  guint32 * D.7168;
  unsigned int D.7169;
  int D.7176;
  int D.7177;
  int D.7178;
  int D.7180;
  int D.7181;
  int D.7182;
  long unsigned int D.7183;
  long unsigned int D.7184;
  sizetype D.7185;
  guint32 * D.7186;
  unsigned int D.7187;
  int D.7188;
  int D.7189;
  struct Bigint * D.7190;
  struct Bigint * b;
  int de;
  int k;
  guint32 * x;
  guint32 y;
  guint32 z;
  int i;

  try
    {
      b = Balloc (1);
      x = &b->x;
      d.22 = &d;
      D.7148 = MEM[(union U *)d.22].L[0];
      z.23 = D.7148 & 1048575;
      z = z.23;
      d.22 = &d;
      d.22 = &d;
      D.7148 = MEM[(union U *)d.22].L[0];
      D.7150 = D.7148 & 2147483647;
      MEM[(union U *)d.22].L[0] = D.7150;
      d.22 = &d;
      D.7148 = MEM[(union U *)d.22].L[0];
      D.7151 = D.7148 >> 20;
      de = (int) D.7151;
      if (de != 0) goto <D.7152>; else goto <D.7153>;
      <D.7152>:
      z.24 = z;
      z.25 = z.24 | 1048576;
      z = z.25;
      <D.7153>:
      d.22 = &d;
      y.26 = MEM[(union U *)d.22].L[1];
      y = y.26;
      y.27 = y;
      if (y.27 != 0) goto <D.7158>; else goto <D.7159>;
      <D.7158>:
      k = lo0bits (&y);
      if (k != 0) goto <D.7160>; else goto <D.7161>;
      <D.7160>:
      z.24 = z;
      D.7162 = 32 - k;
      D.7163 = z.24 << D.7162;
      y.27 = y;
      D.7164 = D.7163 | y.27;
      *x = D.7164;
      z.24 = z;
      z.28 = z.24 >> k;
      z = z.28;
      goto <D.7166>;
      <D.7161>:
      y.27 = y;
      *x = y.27;
      <D.7166>:
      D.7168 = x + 4;
      z.24 = z;
      *D.7168 = z.24;
      D.7169 = *D.7168;
      if (D.7169 != 0) goto <D.7170>; else goto <D.7171>;
      <D.7170>:
      iftmp.29 = 2;
      goto <D.7172>;
      <D.7171>:
      iftmp.29 = 1;
      <D.7172>:
      b->wds = iftmp.29;
      i = b->wds;
      goto <D.7173>;
      <D.7159>:
      k = lo0bits (&z);
      z.24 = z;
      *x = z.24;
      b->wds = 1;
      i = b->wds;
      k = k + 32;
      <D.7173>:
      if (de != 0) goto <D.7174>; else goto <D.7175>;
      <D.7174>:
      D.7176 = de + -1075;
      D.7177 = D.7176 + k;
      *e = D.7177;
      D.7178 = 53 - k;
      *bits = D.7178;
      goto <D.7179>;
      <D.7175>:
      D.7180 = de + -1074;
      D.7181 = D.7180 + k;
      *e = D.7181;
      D.7182 = i * 32;
      D.7183 = (long unsigned int) i;
      D.7184 = D.7183 * 4;
      D.7185 = D.7184 + 18446744073709551612;
      D.7186 = x + D.7185;
      D.7187 = *D.7186;
      D.7188 = hi0bits (D.7187);
      D.7189 = D.7182 - D.7188;
      *bits = D.7189;
      <D.7179>:
      D.7190 = b;
      return D.7190;
    }
  finally
    {
      y = {CLOBBER};
      z = {CLOBBER};
    }
}


lo0bits (guint32 * y)
{
  unsigned int D.7193;
  unsigned int D.7196;
  int D.7199;
  unsigned int D.7200;
  unsigned int D.7203;
  unsigned int D.7204;
  unsigned int D.7205;
  unsigned int D.7208;
  unsigned int D.7211;
  unsigned int D.7214;
  register int k;
  register guint32 x;

  x = *y;
  D.7193 = x & 7;
  if (D.7193 != 0) goto <D.7194>; else goto <D.7195>;
  <D.7194>:
  D.7196 = x & 1;
  if (D.7196 != 0) goto <D.7197>; else goto <D.7198>;
  <D.7197>:
  D.7199 = 0;
  return D.7199;
  <D.7198>:
  D.7200 = x & 2;
  if (D.7200 != 0) goto <D.7201>; else goto <D.7202>;
  <D.7201>:
  D.7203 = x >> 1;
  *y = D.7203;
  D.7199 = 1;
  return D.7199;
  <D.7202>:
  D.7204 = x >> 2;
  *y = D.7204;
  D.7199 = 2;
  return D.7199;
  <D.7195>:
  k = 0;
  D.7205 = x & 65535;
  if (D.7205 == 0) goto <D.7206>; else goto <D.7207>;
  <D.7206>:
  k = 16;
  x = x >> 16;
  <D.7207>:
  D.7208 = x & 255;
  if (D.7208 == 0) goto <D.7209>; else goto <D.7210>;
  <D.7209>:
  k = k + 8;
  x = x >> 8;
  <D.7210>:
  D.7211 = x & 15;
  if (D.7211 == 0) goto <D.7212>; else goto <D.7213>;
  <D.7212>:
  k = k + 4;
  x = x >> 4;
  <D.7213>:
  D.7214 = x & 3;
  if (D.7214 == 0) goto <D.7215>; else goto <D.7216>;
  <D.7215>:
  k = k + 2;
  x = x >> 2;
  <D.7216>:
  D.7196 = x & 1;
  if (D.7196 == 0) goto <D.7217>; else goto <D.7218>;
  <D.7217>:
  k = k + 1;
  x = x >> 1;
  if (x == 0) goto <D.7219>; else goto <D.7220>;
  <D.7219>:
  D.7199 = 32;
  return D.7199;
  <D.7220>:
  <D.7218>:
  *y = x;
  D.7199 = k;
  return D.7199;
}


hi0bits (guint32 x)
{
  unsigned int D.7222;
  unsigned int D.7225;
  unsigned int D.7228;
  unsigned int D.7231;
  signed int x.30;
  unsigned int D.7237;
  int D.7240;
  register int k;

  k = 0;
  D.7222 = x & 4294901760;
  if (D.7222 == 0) goto <D.7223>; else goto <D.7224>;
  <D.7223>:
  k = 16;
  x = x << 16;
  <D.7224>:
  D.7225 = x & 4278190080;
  if (D.7225 == 0) goto <D.7226>; else goto <D.7227>;
  <D.7226>:
  k = k + 8;
  x = x << 8;
  <D.7227>:
  D.7228 = x & 4026531840;
  if (D.7228 == 0) goto <D.7229>; else goto <D.7230>;
  <D.7229>:
  k = k + 4;
  x = x << 4;
  <D.7230>:
  D.7231 = x & 3221225472;
  if (D.7231 == 0) goto <D.7232>; else goto <D.7233>;
  <D.7232>:
  k = k + 2;
  x = x << 2;
  <D.7233>:
  x.30 = (signed int) x;
  if (x.30 >= 0) goto <D.7235>; else goto <D.7236>;
  <D.7235>:
  k = k + 1;
  D.7237 = x & 1073741824;
  if (D.7237 == 0) goto <D.7238>; else goto <D.7239>;
  <D.7238>:
  D.7240 = 32;
  return D.7240;
  <D.7239>:
  <D.7236>:
  D.7240 = k;
  return D.7240;
}


i2b (int i)
{
  unsigned int i.31;
  struct Bigint * D.7243;
  struct Bigint * b;

  b = Balloc (1);
  i.31 = (unsigned int) i;
  b->x[0] = i.31;
  b->wds = 1;
  D.7243 = b;
  return D.7243;
}


mult (struct Bigint * a, struct Bigint * b)
{
  int D.7245;
  int D.7246;
  int D.7249;
  long unsigned int D.7252;
  long unsigned int D.7253;
  long unsigned int D.7254;
  long unsigned int D.7255;
  long unsigned int D.7256;
  long unsigned int D.7257;
  guint32 * xb.32;
  guint32 * x.33;
  unsigned int D.7262;
  long long unsigned int D.7263;
  long long unsigned int D.7264;
  long long unsigned int D.7265;
  unsigned int D.7266;
  long long unsigned int D.7267;
  long long unsigned int D.7268;
  guint32 * xc.34;
  unsigned int D.7270;
  unsigned int D.7271;
  struct Bigint * D.7273;
  struct Bigint * c;
  int k;
  int wa;
  int wb;
  int wc;
  guint32 * x;
  guint32 * xa;
  guint32 * xae;
  guint32 * xb;
  guint32 * xbe;
  guint32 * xc;
  guint32 * xc0;
  guint32 y;
  long long unsigned int carry;
  long long unsigned int z;

  D.7245 = a->wds;
  D.7246 = b->wds;
  if (D.7245 < D.7246) goto <D.7247>; else goto <D.7248>;
  <D.7247>:
  c = a;
  a = b;
  b = c;
  <D.7248>:
  k = a->k;
  wa = a->wds;
  wb = b->wds;
  wc = wa + wb;
  D.7249 = a->maxwds;
  if (D.7249 < wc) goto <D.7250>; else goto <D.7251>;
  <D.7250>:
  k = k + 1;
  <D.7251>:
  c = Balloc (k);
  x = &c->x;
  D.7252 = (long unsigned int) wc;
  D.7253 = D.7252 * 4;
  xa = x + D.7253;
  goto <D.6547>;
  <D.6546>:
  *x = 0;
  x = x + 4;
  <D.6547>:
  if (x < xa) goto <D.6546>; else goto <D.6548>;
  <D.6548>:
  xa = &a->x;
  D.7254 = (long unsigned int) wa;
  D.7255 = D.7254 * 4;
  xae = xa + D.7255;
  xb = &b->x;
  D.7256 = (long unsigned int) wb;
  D.7257 = D.7256 * 4;
  xbe = xb + D.7257;
  xc0 = &c->x;
  goto <D.6552>;
  <D.6551>:
  xb.32 = xb;
  xb = xb.32 + 4;
  y = *xb.32;
  if (y != 0) goto <D.7259>; else goto <D.7260>;
  <D.7259>:
  x = xa;
  xc = xc0;
  carry = 0;
  <D.6549>:
  x.33 = x;
  x = x.33 + 4;
  D.7262 = *x.33;
  D.7263 = (long long unsigned int) D.7262;
  D.7264 = (long long unsigned int) y;
  D.7265 = D.7263 * D.7264;
  D.7266 = *xc;
  D.7267 = (long long unsigned int) D.7266;
  D.7268 = D.7265 + D.7267;
  z = D.7268 + carry;
  carry = z >> 32;
  xc.34 = xc;
  xc = xc.34 + 4;
  D.7270 = (unsigned int) z;
  *xc.34 = D.7270;
  if (x < xae) goto <D.6549>; else goto <D.6550>;
  <D.6550>:
  D.7271 = (unsigned int) carry;
  *xc = D.7271;
  <D.7260>:
  xc0 = xc0 + 4;
  <D.6552>:
  if (xb < xbe) goto <D.6551>; else goto <D.6553>;
  <D.6553>:
  xc0 = &c->x;
  D.7252 = (long unsigned int) wc;
  D.7253 = D.7252 * 4;
  xc = xc0 + D.7253;
  goto <D.6555>;
  <D.6554>:
  wc = wc + -1;
  <D.6555>:
  if (wc > 0) goto <D.7272>; else goto <D.6556>;
  <D.7272>:
  xc = xc + 18446744073709551612;
  D.7266 = *xc;
  if (D.7266 == 0) goto <D.6554>; else goto <D.6556>;
  <D.6556>:
  c->wds = wc;
  D.7273 = c;
  return D.7273;
}


pow5mult (struct Bigint * b, int k)
{
  int D.7277;
  int D.7278;
  struct Bigint * D.7281;
  struct Bigint * D.7286;
  int D.7287;
  struct Bigint * D.7295;
  struct Bigint * b1;
  struct Bigint * p5;
  struct Bigint * p51;
  int i;
  static int p05[3] = {5, 25, 125};

  i = k & 3;
  if (i != 0) goto <D.7275>; else goto <D.7276>;
  <D.7275>:
  D.7277 = i + -1;
  D.7278 = p05[D.7277];
  b = multadd (b, D.7278, 0);
  <D.7276>:
  k = k >> 2;
  if (k == 0) goto <D.7279>; else goto <D.7280>;
  <D.7279>:
  D.7281 = b;
  return D.7281;
  <D.7280>:
  p5 = p5s;
  if (p5 == 0B) goto <D.7282>; else goto <D.7283>;
  <D.7282>:
  p5 = p5s;
  if (p5 == 0B) goto <D.7284>; else goto <D.7285>;
  <D.7284>:
  D.7286 = i2b (625);
  p5s = D.7286;
  p5 = p5s;
  p5->next = 0B;
  <D.7285>:
  <D.7283>:
  <D.6568>:
  D.7287 = k & 1;
  if (D.7287 != 0) goto <D.7288>; else goto <D.7289>;
  <D.7288>:
  b1 = mult (b, p5);
  Bfree (b);
  b = b1;
  <D.7289>:
  k = k >> 1;
  if (k == 0) goto <D.6567>; else goto <D.7290>;
  <D.7290>:
  p51 = p5->next;
  if (p51 == 0B) goto <D.7291>; else goto <D.7292>;
  <D.7291>:
  p51 = p5->next;
  if (p51 == 0B) goto <D.7293>; else goto <D.7294>;
  <D.7293>:
  D.7295 = mult (p5, p5);
  p5->next = D.7295;
  p51 = p5->next;
  p51->next = 0B;
  <D.7294>:
  <D.7292>:
  p5 = p51;
  goto <D.6568>;
  <D.6567>:
  D.7281 = b;
  return D.7281;
}


diff (struct Bigint * a, struct Bigint * b)
{
  struct Bigint * D.7299;
  int D.7303;
  long unsigned int D.7304;
  long unsigned int D.7305;
  long unsigned int D.7306;
  long unsigned int D.7307;
  guint32 * xa.35;
  unsigned int D.7309;
  long long unsigned int D.7310;
  guint32 * xb.36;
  unsigned int D.7312;
  long long unsigned int D.7313;
  long long unsigned int D.7314;
  long long unsigned int D.7315;
  guint32 * xc.37;
  unsigned int D.7317;
  guint32 * xa.38;
  unsigned int D.7319;
  long long unsigned int D.7320;
  guint32 * xc.39;
  unsigned int D.7322;
  struct Bigint * c;
  int i;
  int wa;
  int wb;
  guint32 * xa;
  guint32 * xae;
  guint32 * xb;
  guint32 * xbe;
  guint32 * xc;
  long long unsigned int borrow;
  long long unsigned int y;

  i = cmp (a, b);
  if (i == 0) goto <D.7297>; else goto <D.7298>;
  <D.7297>:
  c = Balloc (0);
  c->wds = 1;
  c->x[0] = 0;
  D.7299 = c;
  return D.7299;
  <D.7298>:
  if (i < 0) goto <D.7300>; else goto <D.7301>;
  <D.7300>:
  c = a;
  a = b;
  b = c;
  i = 1;
  goto <D.7302>;
  <D.7301>:
  i = 0;
  <D.7302>:
  D.7303 = a->k;
  c = Balloc (D.7303);
  c->sign = i;
  wa = a->wds;
  xa = &a->x;
  D.7304 = (long unsigned int) wa;
  D.7305 = D.7304 * 4;
  xae = xa + D.7305;
  wb = b->wds;
  xb = &b->x;
  D.7306 = (long unsigned int) wb;
  D.7307 = D.7306 * 4;
  xbe = xb + D.7307;
  xc = &c->x;
  borrow = 0;
  <D.6619>:
  xa.35 = xa;
  xa = xa.35 + 4;
  D.7309 = *xa.35;
  D.7310 = (long long unsigned int) D.7309;
  xb.36 = xb;
  xb = xb.36 + 4;
  D.7312 = *xb.36;
  D.7313 = (long long unsigned int) D.7312;
  D.7314 = D.7310 - D.7313;
  y = D.7314 - borrow;
  D.7315 = y >> 32;
  borrow = D.7315 & 1;
  xc.37 = xc;
  xc = xc.37 + 4;
  D.7317 = (unsigned int) y;
  *xc.37 = D.7317;
  if (xb < xbe) goto <D.6619>; else goto <D.6620>;
  <D.6620>:
  goto <D.6622>;
  <D.6621>:
  xa.38 = xa;
  xa = xa.38 + 4;
  D.7319 = *xa.38;
  D.7320 = (long long unsigned int) D.7319;
  y = D.7320 - borrow;
  D.7315 = y >> 32;
  borrow = D.7315 & 1;
  xc.39 = xc;
  xc = xc.39 + 4;
  D.7317 = (unsigned int) y;
  *xc.39 = D.7317;
  <D.6622>:
  if (xa < xae) goto <D.6621>; else goto <D.6623>;
  <D.6623>:
  goto <D.6625>;
  <D.6624>:
  wa = wa + -1;
  <D.6625>:
  xc = xc + 18446744073709551612;
  D.7322 = *xc;
  if (D.7322 == 0) goto <D.6624>; else goto <D.6626>;
  <D.6626>:
  c->wds = wa;
  D.7299 = c;
  return D.7299;
}


lshift (struct Bigint * b, int k)
{
  int D.7324;
  int D.7325;
  guint32 * x1.40;
  long unsigned int D.7327;
  long unsigned int D.7328;
  guint32 * x1.41;
  unsigned int D.7332;
  unsigned int D.7333;
  unsigned int D.7334;
  guint32 * x.42;
  unsigned int D.7336;
  unsigned int D.7337;
  guint32 * x1.43;
  guint32 * x.44;
  unsigned int D.7343;
  int D.7344;
  struct Bigint * D.7345;
  int i;
  int k1;
  int n;
  int n1;
  struct Bigint * b1;
  guint32 * x;
  guint32 * x1;
  guint32 * xe;
  guint32 z;

  n = k >> 5;
  k1 = b->k;
  D.7324 = b->wds;
  D.7325 = D.7324 + n;
  n1 = D.7325 + 1;
  i = b->maxwds;
  goto <D.6583>;
  <D.6582>:
  k1 = k1 + 1;
  i = i << 1;
  <D.6583>:
  if (n1 > i) goto <D.6582>; else goto <D.6584>;
  <D.6584>:
  b1 = Balloc (k1);
  x1 = &b1->x;
  i = 0;
  goto <D.6586>;
  <D.6585>:
  x1.40 = x1;
  x1 = x1.40 + 4;
  *x1.40 = 0;
  i = i + 1;
  <D.6586>:
  if (i < n) goto <D.6585>; else goto <D.6587>;
  <D.6587>:
  x = &b->x;
  D.7324 = b->wds;
  D.7327 = (long unsigned int) D.7324;
  D.7328 = D.7327 * 4;
  xe = x + D.7328;
  k = k & 31;
  if (k != 0) goto <D.7329>; else goto <D.7330>;
  <D.7329>:
  k1 = 32 - k;
  z = 0;
  <D.6588>:
  x1.41 = x1;
  x1 = x1.41 + 4;
  D.7332 = *x;
  D.7333 = D.7332 << k;
  D.7334 = D.7333 | z;
  *x1.41 = D.7334;
  x.42 = x;
  x = x.42 + 4;
  D.7336 = *x.42;
  z = D.7336 >> k1;
  if (x < xe) goto <D.6588>; else goto <D.6589>;
  <D.6589>:
  *x1 = z;
  D.7337 = *x1;
  if (D.7337 != 0) goto <D.7338>; else goto <D.7339>;
  <D.7338>:
  n1 = n1 + 1;
  <D.7339>:
  goto <D.7340>;
  <D.7330>:
  <D.6590>:
  x1.43 = x1;
  x1 = x1.43 + 4;
  x.44 = x;
  x = x.44 + 4;
  D.7343 = *x.44;
  *x1.43 = D.7343;
  if (x < xe) goto <D.6590>; else goto <D.6591>;
  <D.6591>:
  <D.7340>:
  D.7344 = n1 + -1;
  b1->wds = D.7344;
  Bfree (b);
  D.7345 = b1;
  return D.7345;
}


cmp (struct Bigint * a, struct Bigint * b)
{
  int D.7349;
  long unsigned int D.7350;
  long unsigned int D.7351;
  unsigned int D.7352;
  unsigned int D.7353;
  int iftmp.45;
  guint32 * xa;
  guint32 * xa0;
  guint32 * xb;
  guint32 * xb0;
  int i;
  int j;

  i = a->wds;
  j = b->wds;
  i = i - j;
  if (i != 0) goto <D.7347>; else goto <D.7348>;
  <D.7347>:
  D.7349 = i;
  return D.7349;
  <D.7348>:
  xa0 = &a->x;
  D.7350 = (long unsigned int) j;
  D.7351 = D.7350 * 4;
  xa = xa0 + D.7351;
  xb0 = &b->x;
  D.7350 = (long unsigned int) j;
  D.7351 = D.7350 * 4;
  xb = xb0 + D.7351;
  <D.6603>:
  xa = xa + 18446744073709551612;
  D.7352 = *xa;
  xb = xb + 18446744073709551612;
  D.7353 = *xb;
  if (D.7352 != D.7353) goto <D.7354>; else goto <D.7355>;
  <D.7354>:
  D.7352 = *xa;
  D.7353 = *xb;
  if (D.7352 < D.7353) goto <D.7357>; else goto <D.7358>;
  <D.7357>:
  iftmp.45 = -1;
  goto <D.7359>;
  <D.7358>:
  iftmp.45 = 1;
  <D.7359>:
  D.7349 = iftmp.45;
  return D.7349;
  <D.7355>:
  if (xa <= xa0) goto <D.6602>; else goto <D.7360>;
  <D.7360>:
  goto <D.6603>;
  <D.6602>:
  D.7349 = 0;
  return D.7349;
}


ratio (struct Bigint * a, struct Bigint * b)
{
  double * da.46;
  double D.7363;
  double * db.47;
  double D.7365;
  int ka.48;
  int kb.49;
  int D.7368;
  int D.7369;
  int D.7370;
  int D.7371;
  int D.7372;
  unsigned int D.7375;
  int D.7376;
  unsigned int D.7377;
  unsigned int D.7378;
  unsigned int D.7380;
  unsigned int D.7381;
  double D.7382;
  double D.7383;
  double D.7384;
  double da;
  double db;
  int k;
  int ka;
  int kb;

  try
    {
      da.46 = &da;
      D.7363 = b2d (a, &ka);
      MEM[(union U *)da.46].d = D.7363;
      db.47 = &db;
      D.7365 = b2d (b, &kb);
      MEM[(union U *)db.47].d = D.7365;
      ka.48 = ka;
      kb.49 = kb;
      D.7368 = ka.48 - kb.49;
      D.7369 = a->wds;
      D.7370 = b->wds;
      D.7371 = D.7369 - D.7370;
      D.7372 = D.7371 * 32;
      k = D.7368 + D.7372;
      if (k > 0) goto <D.7373>; else goto <D.7374>;
      <D.7373>:
      da.46 = &da;
      da.46 = &da;
      D.7375 = MEM[(union U *)da.46].L[0];
      D.7376 = k * 1048576;
      D.7377 = (unsigned int) D.7376;
      D.7378 = D.7375 + D.7377;
      MEM[(union U *)da.46].L[0] = D.7378;
      goto <D.7379>;
      <D.7374>:
      k = -k;
      db.47 = &db;
      db.47 = &db;
      D.7380 = MEM[(union U *)db.47].L[0];
      D.7376 = k * 1048576;
      D.7377 = (unsigned int) D.7376;
      D.7381 = D.7380 + D.7377;
      MEM[(union U *)db.47].L[0] = D.7381;
      <D.7379>:
      da.46 = &da;
      D.7383 = MEM[(union U *)da.46].d;
      db.47 = &db;
      D.7384 = MEM[(union U *)db.47].d;
      D.7382 = D.7383 / D.7384;
      return D.7382;
    }
  finally
    {
      da = {CLOBBER};
      db = {CLOBBER};
      ka = {CLOBBER};
      kb = {CLOBBER};
    }
}


b2d (struct Bigint * a, int * e)
{
  int D.7387;
  long unsigned int D.7388;
  long unsigned int D.7389;
  int D.7390;
  double * d.50;
  int D.7394;
  unsigned int D.7395;
  unsigned int D.7396;
  guint32 iftmp.51;
  int D.7401;
  unsigned int D.7402;
  unsigned int D.7403;
  unsigned int D.7404;
  guint32 iftmp.52;
  unsigned int D.7411;
  unsigned int D.7412;
  unsigned int D.7413;
  unsigned int D.7414;
  guint32 iftmp.53;
  unsigned int D.7419;
  unsigned int D.7420;
  unsigned int D.7421;
  unsigned int D.7423;
  double D.7424;
  guint32 * xa;
  guint32 * xa0;
  guint32 w;
  guint32 y;
  guint32 z;
  int k;
  double d;
  void ret_d = <<< error >>>;

  try
    {
      xa0 = &a->x;
      D.7387 = a->wds;
      D.7388 = (long unsigned int) D.7387;
      D.7389 = D.7388 * 4;
      xa = xa0 + D.7389;
      xa = xa + 18446744073709551612;
      y = *xa;
      k = hi0bits (y);
      D.7390 = 32 - k;
      *e = D.7390;
      if (k <= 10) goto <D.7391>; else goto <D.7392>;
      <D.7391>:
      d.50 = &d;
      D.7394 = 11 - k;
      D.7395 = y >> D.7394;
      D.7396 = D.7395 | 1072693248;
      MEM[(union U *)d.50].L[0] = D.7396;
      if (xa > xa0) goto <D.7398>; else goto <D.7399>;
      <D.7398>:
      xa = xa + 18446744073709551612;
      iftmp.51 = *xa;
      goto <D.7400>;
      <D.7399>:
      iftmp.51 = 0;
      <D.7400>:
      w = iftmp.51;
      d.50 = &d;
      D.7401 = k + 21;
      D.7402 = y << D.7401;
      D.7394 = 11 - k;
      D.7403 = w >> D.7394;
      D.7404 = D.7402 | D.7403;
      MEM[(union U *)d.50].L[1] = D.7404;
      goto ret_d;
      <D.7392>:
      if (xa > xa0) goto <D.7406>; else goto <D.7407>;
      <D.7406>:
      xa = xa + 18446744073709551612;
      iftmp.52 = *xa;
      goto <D.7408>;
      <D.7407>:
      iftmp.52 = 0;
      <D.7408>:
      z = iftmp.52;
      k = k + -11;
      if (k != 0) goto <D.7409>; else goto <D.7410>;
      <D.7409>:
      d.50 = &d;
      D.7411 = y << k;
      D.7390 = 32 - k;
      D.7412 = z >> D.7390;
      D.7413 = D.7411 | D.7412;
      D.7414 = D.7413 | 1072693248;
      MEM[(union U *)d.50].L[0] = D.7414;
      if (xa > xa0) goto <D.7416>; else goto <D.7417>;
      <D.7416>:
      xa = xa + 18446744073709551612;
      iftmp.53 = *xa;
      goto <D.7418>;
      <D.7417>:
      iftmp.53 = 0;
      <D.7418>:
      y = iftmp.53;
      d.50 = &d;
      D.7419 = z << k;
      D.7390 = 32 - k;
      D.7420 = y >> D.7390;
      D.7421 = D.7419 | D.7420;
      MEM[(union U *)d.50].L[1] = D.7421;
      goto <D.7422>;
      <D.7410>:
      d.50 = &d;
      D.7423 = y | 1072693248;
      MEM[(union U *)d.50].L[0] = D.7423;
      d.50 = &d;
      MEM[(union U *)d.50].L[1] = z;
      <D.7422>:
      ret_d:
      d.50 = &d;
      D.7424 = MEM[(union U *)d.50].d;
      return D.7424;
    }
  finally
    {
      d = {CLOBBER};
    }
}


ulp (double x)
{
  double * x.54;
  unsigned int D.7428;
  unsigned int D.7429;
  unsigned int D.7430;
  double * a.55;
  unsigned int L.56;
  double D.7433;
  register gint32 L;
  double a;

  try
    {
      x.54 = &x;
      D.7428 = MEM[(union U *)x.54].L[0];
      D.7429 = D.7428 & 2146435072;
      D.7430 = D.7429 + 4240441344;
      L = (gint32) D.7430;
      a.55 = &a;
      L.56 = (unsigned int) L;
      MEM[(union U *)a.55].L[0] = L.56;
      a.55 = &a;
      MEM[(union U *)a.55].L[1] = 0;
      a.55 = &a;
      D.7433 = MEM[(union U *)a.55].d;
      return D.7433;
    }
  finally
    {
      a = {CLOBBER};
    }
}


Bfree (struct Bigint * v)
{
  free (v);
}


