mono_strtod (const char * s00, char * * se)
{
  double * rv.0;
  char D.6863;
  int D.6864;
  unsigned int D.6871;
  unsigned int c.1;
  unsigned int D.6873;
  unsigned int D.6877;
  unsigned int D.6878;
  unsigned int c.2;
  unsigned int D.6885;
  int nd.3;
  int nd.4;
  unsigned int D.6902;
  int D.6906;
  int D.6907;
  int D.6914;
  int D.6915;
  long int s.5;
  long int s1.6;
  long int D.6922;
  int D.6930;
  double D.6935;
  int D.6938;
  double D.6939;
  double D.6940;
  double D.6941;
  double D.6942;
  double D.6943;
  double D.6951;
  double D.6952;
  int D.6953;
  double D.6956;
  double D.6957;
  int D.6961;
  double D.6962;
  double D.6963;
  int D.6964;
  int * D.6973;
  int D.6975;
  double D.6978;
  double D.6979;
  unsigned int D.6980;
  unsigned int D.6981;
  unsigned int D.6986;
  double D.6992;
  int D.6996;
  double D.7001;
  double D.7002;
  unsigned int D.7005;
  unsigned int D.7006;
  unsigned int D.7007;
  int D.7015;
  unsigned int D.7016;
  unsigned int D.7017;
  unsigned int D.7019;
  unsigned int D.7020;
  unsigned int D.7021;
  int D.7025;
  int * D.7026;
  int * D.7027;
  int D.7028;
  long unsigned int D.7029;
  long unsigned int D.7030;
  long unsigned int D.7031;
  int bbe.7;
  int bbbits.8;
  int D.7040;
  long unsigned int D.7061;
  long unsigned int D.7062;
  unsigned int D.7065;
  int D.7068;
  int D.7070;
  unsigned int D.7076;
  guint32 iftmp.9;
  unsigned int D.7084;
  unsigned int D.7085;
  int D.7086;
  unsigned int D.7089;
  int D.7095;
  unsigned int D.7099;
  int D.7100;
  unsigned int D.7101;
  unsigned int D.7102;
  double D.7106;
  double D.7107;
  double D.7109;
  double D.7110;
  long unsigned int D.7119;
  double aadj1.10;
  double iftmp.11;
  double aadj1.12;
  double aadj1.13;
  double * rv0.14;
  double D.7138;
  double D.7139;
  long unsigned int D.7142;
  long unsigned int D.7143;
  double iftmp.15;
  double * aadj1.16;
  unsigned int D.7159;
  unsigned int D.7160;
  unsigned int D.7161;
  double D.7162;
  double D.7167;
  double D.7177;
  double D.7178;
  double D.7183;
  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.6821>:
      D.6863 = *s;
      D.6864 = (int) D.6863;
      switch (D.6864) <default: <D.6820>, case 0: <D.6811>, case 9: <D.6813>, case 10: <D.6814>, case 11: <D.6815>, case 12: <D.6816>, case 13: <D.6817>, case 32: <D.6818>, case 43: <D.6809>, case 45: <D.6808>>
      <D.6808>:
      sign = 1;
      <D.6809>:
      s = s + 1;
      D.6863 = *s;
      if (D.6863 != 0) goto break2; else goto <D.6865>;
      <D.6865>:
      <D.6811>:
      goto ret0;
      <D.6813>:
      <D.6814>:
      <D.6815>:
      <D.6816>:
      <D.6817>:
      <D.6818>:
      // predicted unlikely by continue predictor.
      goto <D.6819>;
      <D.6820>:
      goto break2;
      <D.6819>:
      s = s + 1;
      goto <D.6821>;
      break2:
      D.6863 = *s;
      if (D.6863 == 48) goto <D.6866>; else goto <D.6867>;
      <D.6866>:
      nz0 = 1;
      goto <D.6823>;
      <D.6822>:
      <D.6823>:
      s = s + 1;
      D.6863 = *s;
      if (D.6863 == 48) goto <D.6822>; else goto <D.6824>;
      <D.6824>:
      D.6863 = *s;
      if (D.6863 == 0) goto ret; else goto <D.6868>;
      <D.6868>:
      <D.6867>:
      s0 = s;
      z = 0;
      y = z;
      nf = 0;
      nd = nf;
      goto <D.6827>;
      <D.6826>:
      if (nd <= 8) goto <D.6869>; else goto <D.6870>;
      <D.6869>:
      D.6871 = y * 10;
      c.1 = (unsigned int) c;
      D.6873 = D.6871 + c.1;
      y = D.6873 + 4294967248;
      goto <D.6874>;
      <D.6870>:
      if (nd <= 15) goto <D.6875>; else goto <D.6876>;
      <D.6875>:
      D.6877 = z * 10;
      c.1 = (unsigned int) c;
      D.6878 = D.6877 + c.1;
      z = D.6878 + 4294967248;
      <D.6876>:
      <D.6874>:
      nd = nd + 1;
      s = s + 1;
      <D.6827>:
      D.6863 = *s;
      c = (int) D.6863;
      if (c > 47) goto <D.6879>; else goto <D.6828>;
      <D.6879>:
      if (c <= 57) goto <D.6826>; else goto <D.6828>;
      <D.6828>:
      nd0 = nd;
      if (c == 46) goto <D.6880>; else goto <D.6881>;
      <D.6880>:
      s = s + 1;
      D.6863 = *s;
      c = (int) D.6863;
      if (nd == 0) goto <D.6882>; else goto <D.6883>;
      <D.6882>:
      goto <D.6830>;
      <D.6829>:
      nz = nz + 1;
      s = s + 1;
      D.6863 = *s;
      c = (int) D.6863;
      <D.6830>:
      if (c == 48) goto <D.6829>; else goto <D.6831>;
      <D.6831>:
      c.2 = (unsigned int) c;
      D.6885 = c.2 + 4294967247;
      if (D.6885 <= 8) goto <D.6886>; else goto <D.6887>;
      <D.6886>:
      s0 = s;
      nf = nf + nz;
      nz = 0;
      goto have_dig;
      <D.6887>:
      goto dig_done;
      <D.6883>:
      goto <D.6838>;
      <D.6837>:
      have_dig:
      nz = nz + 1;
      c = c + -48;
      if (c != 0) goto <D.6888>; else goto <D.6889>;
      <D.6888>:
      nf = nf + nz;
      i = 1;
      goto <D.6835>;
      <D.6834>:
      nd.3 = nd;
      nd = nd.3 + 1;
      if (nd.3 <= 8) goto <D.6891>; else goto <D.6892>;
      <D.6891>:
      y = y * 10;
      goto <D.6893>;
      <D.6892>:
      if (nd <= 16) goto <D.6894>; else goto <D.6895>;
      <D.6894>:
      z = z * 10;
      <D.6895>:
      <D.6893>:
      i = i + 1;
      <D.6835>:
      if (i < nz) goto <D.6834>; else goto <D.6836>;
      <D.6836>:
      nd.4 = nd;
      nd = nd.4 + 1;
      if (nd.4 <= 8) goto <D.6897>; else goto <D.6898>;
      <D.6897>:
      D.6871 = y * 10;
      c.1 = (unsigned int) c;
      y = D.6871 + c.1;
      goto <D.6899>;
      <D.6898>:
      if (nd <= 16) goto <D.6900>; else goto <D.6901>;
      <D.6900>:
      D.6877 = z * 10;
      c.1 = (unsigned int) c;
      z = D.6877 + c.1;
      <D.6901>:
      <D.6899>:
      nz = 0;
      <D.6889>:
      s = s + 1;
      D.6863 = *s;
      c = (int) D.6863;
      <D.6838>:
      c.2 = (unsigned int) c;
      D.6902 = c.2 + 4294967248;
      if (D.6902 <= 9) goto <D.6837>; else goto <D.6839>;
      <D.6839>:
      <D.6881>:
      dig_done:
      e = 0;
      if (c == 101) goto <D.6903>; else goto <D.6905>;
      <D.6905>:
      if (c == 69) goto <D.6903>; else goto <D.6904>;
      <D.6903>:
      D.6906 = nd | nz;
      D.6907 = D.6906 | nz0;
      if (D.6907 == 0) goto ret0; else goto <D.6908>;
      <D.6908>:
      s00 = s;
      esign = 0;
      s = s + 1;
      D.6863 = *s;
      c = (int) D.6863;
      switch (c) <default: <D.6909>, case 43: <D.6841>, case 45: <D.6840>>
      <D.6840>:
      esign = 1;
      <D.6841>:
      s = s + 1;
      D.6863 = *s;
      c = (int) D.6863;
      <D.6909>:
      c.2 = (unsigned int) c;
      D.6902 = c.2 + 4294967248;
      if (D.6902 <= 9) goto <D.6910>; else goto <D.6911>;
      <D.6910>:
      goto <D.6843>;
      <D.6842>:
      s = s + 1;
      D.6863 = *s;
      c = (int) D.6863;
      <D.6843>:
      if (c == 48) goto <D.6842>; else goto <D.6844>;
      <D.6844>:
      c.2 = (unsigned int) c;
      D.6885 = c.2 + 4294967247;
      if (D.6885 <= 8) goto <D.6912>; else goto <D.6913>;
      <D.6912>:
      L = c + -48;
      s1 = s;
      goto <D.6846>;
      <D.6845>:
      D.6914 = L * 10;
      D.6915 = D.6914 + c;
      L = D.6915 + -48;
      <D.6846>:
      s = s + 1;
      D.6863 = *s;
      c = (int) D.6863;
      if (c > 47) goto <D.6916>; else goto <D.6847>;
      <D.6916>:
      if (c <= 57) goto <D.6845>; else goto <D.6847>;
      <D.6847>:
      s.5 = (long int) s;
      s1.6 = (long int) s1;
      D.6922 = s.5 - s1.6;
      if (D.6922 > 8) goto <D.6917>; else goto <D.6923>;
      <D.6923>:
      if (L > 19999) goto <D.6917>; else goto <D.6918>;
      <D.6917>:
      e = 19999;
      goto <D.6919>;
      <D.6918>:
      e = L;
      <D.6919>:
      if (esign != 0) goto <D.6924>; else goto <D.6925>;
      <D.6924>:
      e = -e;
      <D.6925>:
      goto <D.6926>;
      <D.6913>:
      e = 0;
      <D.6926>:
      goto <D.6927>;
      <D.6911>:
      s = s00;
      <D.6927>:
      <D.6904>:
      if (nd == 0) goto <D.6928>; else goto <D.6929>;
      <D.6928>:
      D.6930 = nz | nz0;
      if (D.6930 == 0) goto <D.6931>; else goto <D.6932>;
      <D.6931>:
      ret0:
      s = s00;
      sign = 0;
      <D.6932>:
      goto ret;
      <D.6929>:
      e = e - nf;
      e1 = e;
      if (nd0 == 0) goto <D.6933>; else goto <D.6934>;
      <D.6933>:
      nd0 = nd;
      <D.6934>:
      k = MIN_EXPR <nd, 16>;
      rv.0 = &rv;
      D.6935 = (double) y;
      MEM[(union U *)rv.0].d = D.6935;
      if (k > 9) goto <D.6936>; else goto <D.6937>;
      <D.6936>:
      rv.0 = &rv;
      D.6938 = k + -9;
      D.6939 = tens[D.6938];
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.6941 = D.6939 * D.6940;
      D.6942 = (double) z;
      D.6943 = D.6941 + D.6942;
      MEM[(union U *)rv.0].d = D.6943;
      <D.6937>:
      bd0 = 0B;
      if (nd <= 15) goto <D.6944>; else goto <D.6945>;
      <D.6944>:
      if (e == 0) goto ret; else goto <D.6946>;
      <D.6946>:
      if (e > 0) goto <D.6947>; else goto <D.6948>;
      <D.6947>:
      if (e <= 22) goto <D.6949>; else goto <D.6950>;
      <D.6949>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.6951 = tens[e];
      D.6952 = D.6940 * D.6951;
      MEM[(union U *)rv.0].d = D.6952;
      goto ret;
      <D.6950>:
      i = 15 - nd;
      D.6953 = i + 22;
      if (D.6953 >= e) goto <D.6954>; else goto <D.6955>;
      <D.6954>:
      e = e - i;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.6956 = tens[i];
      D.6957 = D.6940 * D.6956;
      MEM[(union U *)rv.0].d = D.6957;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.6951 = tens[e];
      D.6952 = D.6940 * D.6951;
      MEM[(union U *)rv.0].d = D.6952;
      goto ret;
      <D.6955>:
      goto <D.6958>;
      <D.6948>:
      if (e >= -22) goto <D.6959>; else goto <D.6960>;
      <D.6959>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.6961 = -e;
      D.6962 = tens[D.6961];
      D.6963 = D.6940 / D.6962;
      MEM[(union U *)rv.0].d = D.6963;
      goto ret;
      <D.6960>:
      <D.6958>:
      <D.6945>:
      D.6964 = nd - k;
      e1 = D.6964 + e1;
      scale = 0;
      if (e1 > 0) goto <D.6965>; else goto <D.6966>;
      <D.6965>:
      i = e1 & 15;
      if (i != 0) goto <D.6967>; else goto <D.6968>;
      <D.6967>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.6956 = tens[i];
      D.6957 = D.6940 * D.6956;
      MEM[(union U *)rv.0].d = D.6957;
      <D.6968>:
      e1 = e1 & -16;
      if (e1 != 0) goto <D.6969>; else goto <D.6970>;
      <D.6969>:
      if (e1 > 308) goto <D.6971>; else goto <D.6972>;
      <D.6971>:
      ovfl:
      D.6973 = __errno_location ();
      *D.6973 = 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.6974>;
      <D.6974>:
      goto ret;
      <D.6972>:
      e1 = e1 >> 4;
      j = 0;
      goto <D.6851>;
      <D.6850>:
      D.6975 = e1 & 1;
      if (D.6975 != 0) goto <D.6976>; else goto <D.6977>;
      <D.6976>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.6978 = bigtens[j];
      D.6979 = D.6940 * D.6978;
      MEM[(union U *)rv.0].d = D.6979;
      <D.6977>:
      j = j + 1;
      e1 = e1 >> 1;
      <D.6851>:
      if (e1 > 1) goto <D.6850>; else goto <D.6852>;
      <D.6852>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      D.6981 = D.6980 + 4239392768;
      MEM[(union U *)rv.0].L[0] = D.6981;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.6978 = bigtens[j];
      D.6979 = D.6940 * D.6978;
      MEM[(union U *)rv.0].d = D.6979;
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      z = D.6980 & 2146435072;
      if (z > 2090860544) goto ovfl; else goto <D.6982>;
      <D.6982>:
      if (z > 2089811968) goto <D.6983>; else goto <D.6984>;
      <D.6983>:
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[0] = 2146435071;
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[1] = 4294967295;
      goto <D.6985>;
      <D.6984>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      D.6986 = D.6980 + 55574528;
      MEM[(union U *)rv.0].L[0] = D.6986;
      <D.6985>:
      <D.6970>:
      goto <D.6987>;
      <D.6966>:
      if (e1 < 0) goto <D.6988>; else goto <D.6989>;
      <D.6988>:
      e1 = -e1;
      i = e1 & 15;
      if (i != 0) goto <D.6990>; else goto <D.6991>;
      <D.6990>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.6956 = tens[i];
      D.6992 = D.6940 / D.6956;
      MEM[(union U *)rv.0].d = D.6992;
      <D.6991>:
      e1 = e1 >> 4;
      if (e1 != 0) goto <D.6993>; else goto <D.6994>;
      <D.6993>:
      if (e1 > 31) goto undfl; else goto <D.6995>;
      <D.6995>:
      D.6996 = e1 & 16;
      if (D.6996 != 0) goto <D.6997>; else goto <D.6998>;
      <D.6997>:
      scale = 106;
      <D.6998>:
      j = 0;
      goto <D.6855>;
      <D.6854>:
      D.6975 = e1 & 1;
      if (D.6975 != 0) goto <D.6999>; else goto <D.7000>;
      <D.6999>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.7001 = tinytens[j];
      D.7002 = D.6940 * D.7001;
      MEM[(union U *)rv.0].d = D.7002;
      <D.7000>:
      j = j + 1;
      e1 = e1 >> 1;
      <D.6855>:
      if (e1 > 0) goto <D.6854>; else goto <D.6856>;
      <D.6856>:
      if (scale != 0) goto <D.7003>; else goto <D.7004>;
      <D.7003>:
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      D.7005 = D.6980 & 2146435072;
      D.7006 = D.7005 >> 20;
      D.7007 = 107 - D.7006;
      j = (int) D.7007;
      if (j > 0) goto <D.7008>; else goto <D.7009>;
      <D.7008>:
      if (j > 31) goto <D.7010>; else goto <D.7011>;
      <D.7010>:
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[1] = 0;
      if (j > 52) goto <D.7012>; else goto <D.7013>;
      <D.7012>:
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[0] = 57671680;
      goto <D.7014>;
      <D.7013>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      D.7015 = j + -32;
      D.7016 = 4294967295 << D.7015;
      D.7017 = D.6980 & D.7016;
      MEM[(union U *)rv.0].L[0] = D.7017;
      <D.7014>:
      goto <D.7018>;
      <D.7011>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.7019 = MEM[(union U *)rv.0].L[1];
      D.7020 = 4294967295 << j;
      D.7021 = D.7019 & D.7020;
      MEM[(union U *)rv.0].L[1] = D.7021;
      <D.7018>:
      <D.7009>:
      <D.7004>:
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      if (D.6940 == 0.0) goto <D.7022>; else goto <D.7023>;
      <D.7022>:
      undfl:
      rv.0 = &rv;
      MEM[(union U *)rv.0].d = 0.0;
      D.6973 = __errno_location ();
      *D.6973 = 34;
      if (bd0 != 0B) goto retfree; else goto <D.7024>;
      <D.7024>:
      goto ret;
      <D.7023>:
      <D.6994>:
      <D.6989>:
      <D.6987>:
      bd0 = s2b (s0, nd0, nd, y);
      <D.6860>:
      D.7025 = bd0->k;
      bd = Balloc (D.7025);
      D.7026 = &bd->sign;
      D.7027 = &bd0->sign;
      D.7028 = bd0->wds;
      D.7029 = (long unsigned int) D.7028;
      D.7030 = D.7029 + 2;
      D.7031 = D.7030 * 4;
      memcpy (D.7026, D.7027, D.7031);
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      bb = d2b (D.6940, &bbe, &bbbits);
      bs = i2b (1);
      if (e >= 0) goto <D.7032>; else goto <D.7033>;
      <D.7032>:
      bb5 = 0;
      bb2 = bb5;
      bd5 = e;
      bd2 = bd5;
      goto <D.7034>;
      <D.7033>:
      bb5 = -e;
      bb2 = bb5;
      bd5 = 0;
      bd2 = bd5;
      <D.7034>:
      bbe.7 = bbe;
      if (bbe.7 >= 0) goto <D.7036>; else goto <D.7037>;
      <D.7036>:
      bbe.7 = bbe;
      bb2 = bb2 + bbe.7;
      goto <D.7038>;
      <D.7037>:
      bbe.7 = bbe;
      bd2 = bd2 - bbe.7;
      <D.7038>:
      bs2 = bb2;
      bbe.7 = bbe;
      j = bbe.7 - scale;
      bbbits.8 = bbbits;
      D.7040 = j + bbbits.8;
      i = D.7040 + -1;
      if (i < -1022) goto <D.7041>; else goto <D.7042>;
      <D.7041>:
      j = j + 1075;
      goto <D.7043>;
      <D.7042>:
      bbbits.8 = bbbits;
      j = 54 - bbbits.8;
      <D.7043>:
      bb2 = bb2 + j;
      bd2 = bd2 + j;
      bd2 = bd2 + scale;
      i = MIN_EXPR <bd2, bb2>;
      if (i > bs2) goto <D.7044>; else goto <D.7045>;
      <D.7044>:
      i = bs2;
      <D.7045>:
      if (i > 0) goto <D.7046>; else goto <D.7047>;
      <D.7046>:
      bb2 = bb2 - i;
      bd2 = bd2 - i;
      bs2 = bs2 - i;
      <D.7047>:
      if (bb5 > 0) goto <D.7048>; else goto <D.7049>;
      <D.7048>:
      bs = pow5mult (bs, bb5);
      bb1 = mult (bs, bb);
      Bfree (bb);
      bb = bb1;
      <D.7049>:
      if (bb2 > 0) goto <D.7050>; else goto <D.7051>;
      <D.7050>:
      bb = lshift (bb, bb2);
      <D.7051>:
      if (bd5 > 0) goto <D.7052>; else goto <D.7053>;
      <D.7052>:
      bd = pow5mult (bd, bd5);
      <D.7053>:
      if (bd2 > 0) goto <D.7054>; else goto <D.7055>;
      <D.7054>:
      bd = lshift (bd, bd2);
      <D.7055>:
      if (bs2 > 0) goto <D.7056>; else goto <D.7057>;
      <D.7056>:
      bs = lshift (bs, bs2);
      <D.7057>:
      delta = diff (bb, bd);
      dsign = delta->sign;
      delta->sign = 0;
      i = cmp (delta, bs);
      if (i < 0) goto <D.7058>; else goto <D.7059>;
      <D.7058>:
      if (dsign != 0) goto <D.6857>; else goto <D.7060>;
      <D.7060>:
      rv.0 = &rv;
      D.7061 = BIT_FIELD_REF <MEM[(union U *)rv.0], 64, 0>;
      D.7062 = D.7061 & 18446744069415632895;
      if (D.7062 != 0) goto <D.6857>; else goto <D.7063>;
      <D.7063>:
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      D.7005 = D.6980 & 2146435072;
      if (D.7005 <= 112197632) goto <D.6857>; else goto <D.7064>;
      <D.7064>:
      D.7065 = delta->x[0];
      if (D.7065 == 0) goto <D.7066>; else goto <D.7067>;
      <D.7066>:
      D.7068 = delta->wds;
      if (D.7068 <= 1) goto <D.6857>; else goto <D.7069>;
      <D.7069>:
      <D.7067>:
      delta = lshift (delta, 1);
      D.7070 = cmp (delta, bs);
      if (D.7070 > 0) goto drop_down; else goto <D.7071>;
      <D.7071>:
      goto <D.6857>;
      <D.7059>:
      if (i == 0) goto <D.7072>; else goto <D.7073>;
      <D.7072>:
      if (dsign != 0) goto <D.7074>; else goto <D.7075>;
      <D.7074>:
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      D.7076 = D.6980 & 1048575;
      if (D.7076 == 1048575) goto <D.7077>; else goto <D.7078>;
      <D.7077>:
      rv.0 = &rv;
      D.7019 = MEM[(union U *)rv.0].L[1];
      if (scale != 0) goto <D.7082>; else goto <D.7080>;
      <D.7082>:
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      y = D.6980 & 2146435072;
      if (y <= 111149056) goto <D.7083>; else goto <D.7080>;
      <D.7083>:
      D.7084 = y >> 20;
      D.7085 = 107 - D.7084;
      D.7086 = (int) D.7085;
      iftmp.9 = 4294967295 << D.7086;
      goto <D.7081>;
      <D.7080>:
      iftmp.9 = 4294967295;
      <D.7081>:
      if (D.7019 == iftmp.9) goto <D.7087>; else goto <D.7088>;
      <D.7087>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      D.7005 = D.6980 & 2146435072;
      D.7089 = D.7005 + 1048576;
      MEM[(union U *)rv.0].L[0] = D.7089;
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[1] = 0;
      dsign = 0;
      goto <D.6857>;
      <D.7088>:
      <D.7078>:
      goto <D.7090>;
      <D.7075>:
      rv.0 = &rv;
      D.7061 = BIT_FIELD_REF <MEM[(union U *)rv.0], 64, 0>;
      D.7062 = D.7061 & 18446744069415632895;
      if (D.7062 == 0) goto <D.7091>; else goto <D.7092>;
      <D.7091>:
      drop_down:
      if (scale != 0) goto <D.7093>; else goto <D.7094>;
      <D.7093>:
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      D.7095 = (int) D.6980;
      L = D.7095 & 2146435072;
      if (L <= 112197632) goto <D.7096>; else goto <D.7097>;
      <D.7096>:
      if (L > 57671680) goto <D.6857>; else goto <D.7098>;
      <D.7098>:
      goto undfl;
      <D.7097>:
      <D.7094>:
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      D.7005 = D.6980 & 2146435072;
      D.7099 = D.7005 + 4293918720;
      L = (gint32) D.7099;
      rv.0 = &rv;
      D.7100 = L | 1048575;
      D.7101 = (unsigned int) D.7100;
      MEM[(union U *)rv.0].L[0] = D.7101;
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[1] = 4294967295;
      goto <D.6857>;
      <D.7092>:
      <D.7090>:
      rv.0 = &rv;
      D.7019 = MEM[(union U *)rv.0].L[1];
      D.7102 = D.7019 & 1;
      if (D.7102 == 0) goto <D.6857>; else goto <D.7103>;
      <D.7103>:
      if (dsign != 0) goto <D.7104>; else goto <D.7105>;
      <D.7104>:
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.7106 = ulp (D.6940);
      rv.0 = &rv;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.7107 = D.6940 + D.7106;
      MEM[(union U *)rv.0].d = D.7107;
      goto <D.7108>;
      <D.7105>:
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.7109 = ulp (D.6940);
      rv.0 = &rv;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.7110 = D.6940 - D.7109;
      MEM[(union U *)rv.0].d = D.7110;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      if (D.6940 == 0.0) goto undfl; else goto <D.7111>;
      <D.7111>:
      <D.7108>:
      dsign = 1 - dsign;
      goto <D.6857>;
      <D.7073>:
      aadj = ratio (delta, bs);
      if (aadj <= 2.0e+0) goto <D.7112>; else goto <D.7113>;
      <D.7112>:
      if (dsign != 0) goto <D.7114>; else goto <D.7115>;
      <D.7114>:
      aadj1 = 1.0e+0;
      aadj = aadj1;
      goto <D.7116>;
      <D.7115>:
      rv.0 = &rv;
      D.7061 = BIT_FIELD_REF <MEM[(union U *)rv.0], 64, 0>;
      D.7062 = D.7061 & 18446744069415632895;
      if (D.7062 != 0) goto <D.7117>; else goto <D.7118>;
      <D.7117>:
      rv.0 = &rv;
      D.7061 = BIT_FIELD_REF <MEM[(union U *)rv.0], 64, 0>;
      D.7119 = D.7061;
      if (D.7119 == 4294967296) goto undfl; else goto <D.7120>;
      <D.7120>:
      aadj = 1.0e+0;
      aadj1 = -1.0e+0;
      goto <D.7121>;
      <D.7118>:
      if (aadj < 1.0e+0) goto <D.7122>; else goto <D.7123>;
      <D.7122>:
      aadj = 5.0e-1;
      goto <D.7124>;
      <D.7123>:
      aadj = aadj * 5.0e-1;
      <D.7124>:
      aadj1.10 = -aadj;
      aadj1 = aadj1.10;
      <D.7121>:
      <D.7116>:
      goto <D.7126>;
      <D.7113>:
      aadj = aadj * 5.0e-1;
      if (dsign == 0) goto <D.7128>; else goto <D.7129>;
      <D.7128>:
      iftmp.11 = -aadj;
      goto <D.7130>;
      <D.7129>:
      iftmp.11 = aadj;
      <D.7130>:
      aadj1 = iftmp.11;
      if (0 != 0) goto <D.7131>; else goto <D.7132>;
      <D.7131>:
      aadj1.12 = aadj1;
      aadj1.13 = aadj1.12 + 5.0e-1;
      aadj1 = aadj1.13;
      <D.7132>:
      <D.7126>:
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      y = D.6980 & 2146435072;
      if (y == 2145386496) goto <D.7135>; else goto <D.7136>;
      <D.7135>:
      rv0.14 = &rv0;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      MEM[(union U *)rv0.14].d = D.6940;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      D.6981 = D.6980 + 4239392768;
      MEM[(union U *)rv.0].L[0] = D.6981;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.7138 = ulp (D.6940);
      aadj1.12 = aadj1;
      adj = D.7138 * aadj1.12;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.7139 = D.6940 + adj;
      MEM[(union U *)rv.0].d = D.7139;
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      D.7005 = D.6980 & 2146435072;
      if (D.7005 > 2090860543) goto <D.7140>; else goto <D.7141>;
      <D.7140>:
      rv0.14 = &rv0;
      D.7142 = BIT_FIELD_REF <MEM[(union U *)rv0.14], 64, 0>;
      D.7143 = D.7142;
      if (D.7143 == 18446744071561019391) goto ovfl; else goto <D.7144>;
      <D.7144>:
      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.7141>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      D.6986 = D.6980 + 55574528;
      MEM[(union U *)rv.0].L[0] = D.6986;
      goto <D.7145>;
      <D.7136>:
      if (scale != 0) goto <D.7146>; else goto <D.7147>;
      <D.7146>:
      if (y <= 111149056) goto <D.7148>; else goto <D.7149>;
      <D.7148>:
      if (aadj <= 2.147483647e+9) goto <D.7150>; else goto <D.7151>;
      <D.7150>:
      z = (guint32) aadj;
      if (z == 0) goto <D.7152>; else goto <D.7153>;
      <D.7152>:
      z = 1;
      <D.7153>:
      aadj = (double) z;
      if (dsign == 0) goto <D.7155>; else goto <D.7156>;
      <D.7155>:
      iftmp.15 = -aadj;
      goto <D.7157>;
      <D.7156>:
      iftmp.15 = aadj;
      <D.7157>:
      aadj1 = iftmp.15;
      <D.7151>:
      aadj1.16 = &aadj1;
      aadj1.16 = &aadj1;
      D.7159 = MEM[(union U *)aadj1.16].L[0];
      D.7160 = D.7159 - y;
      D.7161 = D.7160 + 112197632;
      MEM[(union U *)aadj1.16].L[0] = D.7161;
      <D.7149>:
      <D.7147>:
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.7162 = ulp (D.6940);
      aadj1.12 = aadj1;
      adj = D.7162 * aadj1.12;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      D.7139 = D.6940 + adj;
      MEM[(union U *)rv.0].d = D.7139;
      <D.7145>:
      rv.0 = &rv;
      D.6980 = MEM[(union U *)rv.0].L[0];
      z = D.6980 & 2146435072;
      if (scale == 0) goto <D.7163>; else goto <D.7164>;
      <D.7163>:
      if (y == z) goto <D.7165>; else goto <D.7166>;
      <D.7165>:
      L = (gint32) aadj;
      D.7167 = (double) L;
      aadj = aadj - D.7167;
      if (dsign != 0) goto <D.7168>; else goto <D.7171>;
      <D.7171>:
      rv.0 = &rv;
      D.7061 = BIT_FIELD_REF <MEM[(union U *)rv.0], 64, 0>;
      D.7062 = D.7061 & 18446744069415632895;
      if (D.7062 != 0) goto <D.7168>; else goto <D.7169>;
      <D.7168>:
      if (aadj < 4.99999899999999997124433548378874547779560089111328125e-1) goto <D.6857>; else goto <D.7172>;
      <D.7172>:
      if (aadj > 5.0000009999999994736441522036329843103885650634765625e-1) goto <D.6857>; else goto <D.7173>;
      <D.7173>:
      goto <D.7170>;
      <D.7169>:
      if (aadj < 2.499999499999999985622167741894372738897800445556640625e-1) goto <D.6857>; else goto <D.7174>;
      <D.7174>:
      <D.7170>:
      <D.7166>:
      <D.7164>:
      cont:
      Bfree (bb);
      Bfree (bd);
      Bfree (bs);
      Bfree (delta);
      goto <D.6860>;
      <D.6857>:
      if (scale != 0) goto <D.7175>; else goto <D.7176>;
      <D.7175>:
      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.6940 = MEM[(union U *)rv.0].d;
      rv0.14 = &rv0;
      D.7177 = MEM[(union U *)rv0.14].d;
      D.7178 = D.6940 * D.7177;
      MEM[(union U *)rv.0].d = D.7178;
      rv.0 = &rv;
      D.7061 = BIT_FIELD_REF <MEM[(union U *)rv.0], 64, 0>;
      D.7119 = D.7061;
      if (D.7119 == 0) goto <D.7179>; else goto <D.7180>;
      <D.7179>:
      D.6973 = __errno_location ();
      *D.6973 = 34;
      <D.7180>:
      <D.7176>:
      retfree:
      Bfree (bb);
      Bfree (bd);
      Bfree (bs);
      Bfree (bd0);
      Bfree (delta);
      ret:
      if (se != 0B) goto <D.7181>; else goto <D.7182>;
      <D.7181>:
      *se = s;
      <D.7182>:
      if (sign != 0) goto <D.7185>; else goto <D.7186>;
      <D.7185>:
      rv.0 = &rv;
      D.6940 = MEM[(union U *)rv.0].d;
      iftmp.17 = -D.6940;
      goto <D.7187>;
      <D.7186>:
      rv.0 = &rv;
      iftmp.17 = MEM[(union U *)rv.0].d;
      <D.7187>:
      D.7183 = iftmp.17;
      return D.7183;
    }
  finally
    {
      bbe = {CLOBBER};
      bbbits = {CLOBBER};
      aadj1 = {CLOBBER};
      rv = {CLOBBER};
      rv0 = {CLOBBER};
    }
}


s2b (const char * s, int nd0, int nd, guint32 y9)
{
  int D.7190;
  const char * s.18;
  char D.7194;
  int D.7195;
  int D.7196;
  const char * s.19;
  char D.7199;
  int D.7200;
  int D.7201;
  struct Bigint * D.7202;
  struct Bigint * b;
  int i;
  int k;
  gint32 x;
  gint32 y;

  D.7190 = nd + 8;
  x = D.7190 / 9;
  k = 0;
  y = 1;
  goto <D.6604>;
  <D.6603>:
  y = y << 1;
  k = k + 1;
  <D.6604>:
  if (x > y) goto <D.6603>; else goto <D.6605>;
  <D.6605>:
  b = Balloc (k);
  b->x[0] = y9;
  b->wds = 1;
  i = 9;
  if (nd0 > 9) goto <D.7191>; else goto <D.7192>;
  <D.7191>:
  s = s + 9;
  <D.6606>:
  s.18 = s;
  s = s.18 + 1;
  D.7194 = *s.18;
  D.7195 = (int) D.7194;
  D.7196 = D.7195 + -48;
  b = multadd (b, 10, D.7196);
  i = i + 1;
  if (i < nd0) goto <D.6606>; else goto <D.6607>;
  <D.6607>:
  s = s + 1;
  goto <D.7197>;
  <D.7192>:
  s = s + 10;
  <D.7197>:
  goto <D.6609>;
  <D.6608>:
  s.19 = s;
  s = s.19 + 1;
  D.7199 = *s.19;
  D.7200 = (int) D.7199;
  D.7201 = D.7200 + -48;
  b = multadd (b, 10, D.7201);
  i = i + 1;
  <D.6609>:
  if (i < nd) goto <D.6608>; else goto <D.6610>;
  <D.6610>:
  D.7202 = b;
  return D.7202;
}


multadd (struct Bigint * b, int m, int a)
{
  unsigned int D.7204;
  long long unsigned int D.7205;
  long long unsigned int D.7206;
  long long unsigned int D.7207;
  guint32 * x.20;
  unsigned int D.7209;
  int D.7212;
  int D.7215;
  int D.7216;
  int * D.7217;
  int * D.7218;
  int D.7219;
  long unsigned int D.7220;
  long unsigned int D.7221;
  long unsigned int D.7222;
  int wds.21;
  unsigned int D.7224;
  struct Bigint * D.7225;
  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.6590>:
  D.7204 = *x;
  D.7205 = (long long unsigned int) D.7204;
  D.7206 = (long long unsigned int) m;
  D.7207 = D.7205 * D.7206;
  y = D.7207 + carry;
  carry = y >> 32;
  x.20 = x;
  x = x.20 + 4;
  D.7209 = (unsigned int) y;
  *x.20 = D.7209;
  i = i + 1;
  if (i < wds) goto <D.6590>; else goto <D.6591>;
  <D.6591>:
  if (carry != 0) goto <D.7210>; else goto <D.7211>;
  <D.7210>:
  D.7212 = b->maxwds;
  if (D.7212 <= wds) goto <D.7213>; else goto <D.7214>;
  <D.7213>:
  D.7215 = b->k;
  D.7216 = D.7215 + 1;
  b1 = Balloc (D.7216);
  D.7217 = &b1->sign;
  D.7218 = &b->sign;
  D.7219 = b->wds;
  D.7220 = (long unsigned int) D.7219;
  D.7221 = D.7220 + 2;
  D.7222 = D.7221 * 4;
  memcpy (D.7217, D.7218, D.7222);
  Bfree (b);
  b = b1;
  <D.7214>:
  wds.21 = wds;
  wds = wds.21 + 1;
  D.7224 = (unsigned int) carry;
  b->x[wds.21] = D.7224;
  b->wds = wds;
  <D.7211>:
  D.7225 = b;
  return D.7225;
}


Balloc (int k)
{
  struct Bigint * D.7229;
  int D.7231;
  long unsigned int D.7232;
  long unsigned int D.7233;
  long unsigned int D.7234;
  int D.7235;
  struct Bigint * D.7236;
  int x;
  struct Bigint * rv;

  rv = freelist[k];
  if (rv != 0B) goto <D.7227>; else goto <D.7228>;
  <D.7227>:
  D.7229 = rv->next;
  freelist[k] = D.7229;
  goto <D.7230>;
  <D.7228>:
  x = 1 << k;
  D.7231 = x + -1;
  D.7232 = (long unsigned int) D.7231;
  D.7233 = D.7232 + 8;
  D.7234 = D.7233 * 4;
  rv = malloc (D.7234);
  rv->k = k;
  rv->maxwds = x;
  <D.7230>:
  rv->wds = 0;
  D.7235 = rv->wds;
  rv->sign = D.7235;
  D.7236 = rv;
  return D.7236;
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.7238;
  long unsigned int D.7239;

  D.7239 = __builtin_object_size (__dest, 0);
  D.7238 = __builtin___memcpy_chk (__dest, __src, __len, D.7239);
  return D.7238;
}


d2b (double d, int * e, int * bits)
{
  double * d.22;
  unsigned int D.7242;
  unsigned int z.23;
  unsigned int D.7244;
  unsigned int D.7245;
  unsigned int z.24;
  unsigned int z.25;
  unsigned int y.26;
  unsigned int y.27;
  int D.7256;
  unsigned int D.7257;
  unsigned int D.7258;
  unsigned int z.28;
  int iftmp.29;
  guint32 * D.7262;
  unsigned int D.7263;
  int D.7270;
  int D.7271;
  int D.7272;
  int D.7274;
  int D.7275;
  int D.7276;
  long unsigned int D.7277;
  long unsigned int D.7278;
  sizetype D.7279;
  guint32 * D.7280;
  unsigned int D.7281;
  int D.7282;
  int D.7283;
  struct Bigint * D.7284;
  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.7242 = MEM[(union U *)d.22].L[0];
      z.23 = D.7242 & 1048575;
      z = z.23;
      d.22 = &d;
      d.22 = &d;
      D.7242 = MEM[(union U *)d.22].L[0];
      D.7244 = D.7242 & 2147483647;
      MEM[(union U *)d.22].L[0] = D.7244;
      d.22 = &d;
      D.7242 = MEM[(union U *)d.22].L[0];
      D.7245 = D.7242 >> 20;
      de = (int) D.7245;
      if (de != 0) goto <D.7246>; else goto <D.7247>;
      <D.7246>:
      z.24 = z;
      z.25 = z.24 | 1048576;
      z = z.25;
      <D.7247>:
      d.22 = &d;
      y.26 = MEM[(union U *)d.22].L[1];
      y = y.26;
      y.27 = y;
      if (y.27 != 0) goto <D.7252>; else goto <D.7253>;
      <D.7252>:
      k = lo0bits (&y);
      if (k != 0) goto <D.7254>; else goto <D.7255>;
      <D.7254>:
      z.24 = z;
      D.7256 = 32 - k;
      D.7257 = z.24 << D.7256;
      y.27 = y;
      D.7258 = D.7257 | y.27;
      *x = D.7258;
      z.24 = z;
      z.28 = z.24 >> k;
      z = z.28;
      goto <D.7260>;
      <D.7255>:
      y.27 = y;
      *x = y.27;
      <D.7260>:
      D.7262 = x + 4;
      z.24 = z;
      *D.7262 = z.24;
      D.7263 = *D.7262;
      if (D.7263 != 0) goto <D.7264>; else goto <D.7265>;
      <D.7264>:
      iftmp.29 = 2;
      goto <D.7266>;
      <D.7265>:
      iftmp.29 = 1;
      <D.7266>:
      b->wds = iftmp.29;
      i = b->wds;
      goto <D.7267>;
      <D.7253>:
      k = lo0bits (&z);
      z.24 = z;
      *x = z.24;
      b->wds = 1;
      i = b->wds;
      k = k + 32;
      <D.7267>:
      if (de != 0) goto <D.7268>; else goto <D.7269>;
      <D.7268>:
      D.7270 = de + -1075;
      D.7271 = D.7270 + k;
      *e = D.7271;
      D.7272 = 53 - k;
      *bits = D.7272;
      goto <D.7273>;
      <D.7269>:
      D.7274 = de + -1074;
      D.7275 = D.7274 + k;
      *e = D.7275;
      D.7276 = i * 32;
      D.7277 = (long unsigned int) i;
      D.7278 = D.7277 * 4;
      D.7279 = D.7278 + 18446744073709551612;
      D.7280 = x + D.7279;
      D.7281 = *D.7280;
      D.7282 = hi0bits (D.7281);
      D.7283 = D.7276 - D.7282;
      *bits = D.7283;
      <D.7273>:
      D.7284 = b;
      return D.7284;
    }
  finally
    {
      y = {CLOBBER};
      z = {CLOBBER};
    }
}


lo0bits (guint32 * y)
{
  unsigned int D.7287;
  unsigned int D.7290;
  int D.7293;
  unsigned int D.7294;
  unsigned int D.7297;
  unsigned int D.7298;
  unsigned int D.7299;
  unsigned int D.7302;
  unsigned int D.7305;
  unsigned int D.7308;
  register int k;
  register guint32 x;

  x = *y;
  D.7287 = x & 7;
  if (D.7287 != 0) goto <D.7288>; else goto <D.7289>;
  <D.7288>:
  D.7290 = x & 1;
  if (D.7290 != 0) goto <D.7291>; else goto <D.7292>;
  <D.7291>:
  D.7293 = 0;
  return D.7293;
  <D.7292>:
  D.7294 = x & 2;
  if (D.7294 != 0) goto <D.7295>; else goto <D.7296>;
  <D.7295>:
  D.7297 = x >> 1;
  *y = D.7297;
  D.7293 = 1;
  return D.7293;
  <D.7296>:
  D.7298 = x >> 2;
  *y = D.7298;
  D.7293 = 2;
  return D.7293;
  <D.7289>:
  k = 0;
  D.7299 = x & 65535;
  if (D.7299 == 0) goto <D.7300>; else goto <D.7301>;
  <D.7300>:
  k = 16;
  x = x >> 16;
  <D.7301>:
  D.7302 = x & 255;
  if (D.7302 == 0) goto <D.7303>; else goto <D.7304>;
  <D.7303>:
  k = k + 8;
  x = x >> 8;
  <D.7304>:
  D.7305 = x & 15;
  if (D.7305 == 0) goto <D.7306>; else goto <D.7307>;
  <D.7306>:
  k = k + 4;
  x = x >> 4;
  <D.7307>:
  D.7308 = x & 3;
  if (D.7308 == 0) goto <D.7309>; else goto <D.7310>;
  <D.7309>:
  k = k + 2;
  x = x >> 2;
  <D.7310>:
  D.7290 = x & 1;
  if (D.7290 == 0) goto <D.7311>; else goto <D.7312>;
  <D.7311>:
  k = k + 1;
  x = x >> 1;
  if (x == 0) goto <D.7313>; else goto <D.7314>;
  <D.7313>:
  D.7293 = 32;
  return D.7293;
  <D.7314>:
  <D.7312>:
  *y = x;
  D.7293 = k;
  return D.7293;
}


hi0bits (guint32 x)
{
  unsigned int D.7316;
  unsigned int D.7319;
  unsigned int D.7322;
  unsigned int D.7325;
  signed int x.30;
  unsigned int D.7331;
  int D.7334;
  register int k;

  k = 0;
  D.7316 = x & 4294901760;
  if (D.7316 == 0) goto <D.7317>; else goto <D.7318>;
  <D.7317>:
  k = 16;
  x = x << 16;
  <D.7318>:
  D.7319 = x & 4278190080;
  if (D.7319 == 0) goto <D.7320>; else goto <D.7321>;
  <D.7320>:
  k = k + 8;
  x = x << 8;
  <D.7321>:
  D.7322 = x & 4026531840;
  if (D.7322 == 0) goto <D.7323>; else goto <D.7324>;
  <D.7323>:
  k = k + 4;
  x = x << 4;
  <D.7324>:
  D.7325 = x & 3221225472;
  if (D.7325 == 0) goto <D.7326>; else goto <D.7327>;
  <D.7326>:
  k = k + 2;
  x = x << 2;
  <D.7327>:
  x.30 = (signed int) x;
  if (x.30 >= 0) goto <D.7329>; else goto <D.7330>;
  <D.7329>:
  k = k + 1;
  D.7331 = x & 1073741824;
  if (D.7331 == 0) goto <D.7332>; else goto <D.7333>;
  <D.7332>:
  D.7334 = 32;
  return D.7334;
  <D.7333>:
  <D.7330>:
  D.7334 = k;
  return D.7334;
}


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

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


mult (struct Bigint * a, struct Bigint * b)
{
  int D.7339;
  int D.7340;
  int D.7343;
  long unsigned int D.7346;
  long unsigned int D.7347;
  long unsigned int D.7348;
  long unsigned int D.7349;
  long unsigned int D.7350;
  long unsigned int D.7351;
  guint32 * xb.32;
  guint32 * x.33;
  unsigned int D.7356;
  long long unsigned int D.7357;
  long long unsigned int D.7358;
  long long unsigned int D.7359;
  unsigned int D.7360;
  long long unsigned int D.7361;
  long long unsigned int D.7362;
  guint32 * xc.34;
  unsigned int D.7364;
  unsigned int D.7365;
  struct Bigint * D.7367;
  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.7339 = a->wds;
  D.7340 = b->wds;
  if (D.7339 < D.7340) goto <D.7341>; else goto <D.7342>;
  <D.7341>:
  c = a;
  a = b;
  b = c;
  <D.7342>:
  k = a->k;
  wa = a->wds;
  wb = b->wds;
  wc = wa + wb;
  D.7343 = a->maxwds;
  if (D.7343 < wc) goto <D.7344>; else goto <D.7345>;
  <D.7344>:
  k = k + 1;
  <D.7345>:
  c = Balloc (k);
  x = &c->x;
  D.7346 = (long unsigned int) wc;
  D.7347 = D.7346 * 4;
  xa = x + D.7347;
  goto <D.6644>;
  <D.6643>:
  *x = 0;
  x = x + 4;
  <D.6644>:
  if (x < xa) goto <D.6643>; else goto <D.6645>;
  <D.6645>:
  xa = &a->x;
  D.7348 = (long unsigned int) wa;
  D.7349 = D.7348 * 4;
  xae = xa + D.7349;
  xb = &b->x;
  D.7350 = (long unsigned int) wb;
  D.7351 = D.7350 * 4;
  xbe = xb + D.7351;
  xc0 = &c->x;
  goto <D.6649>;
  <D.6648>:
  xb.32 = xb;
  xb = xb.32 + 4;
  y = *xb.32;
  if (y != 0) goto <D.7353>; else goto <D.7354>;
  <D.7353>:
  x = xa;
  xc = xc0;
  carry = 0;
  <D.6646>:
  x.33 = x;
  x = x.33 + 4;
  D.7356 = *x.33;
  D.7357 = (long long unsigned int) D.7356;
  D.7358 = (long long unsigned int) y;
  D.7359 = D.7357 * D.7358;
  D.7360 = *xc;
  D.7361 = (long long unsigned int) D.7360;
  D.7362 = D.7359 + D.7361;
  z = D.7362 + carry;
  carry = z >> 32;
  xc.34 = xc;
  xc = xc.34 + 4;
  D.7364 = (unsigned int) z;
  *xc.34 = D.7364;
  if (x < xae) goto <D.6646>; else goto <D.6647>;
  <D.6647>:
  D.7365 = (unsigned int) carry;
  *xc = D.7365;
  <D.7354>:
  xc0 = xc0 + 4;
  <D.6649>:
  if (xb < xbe) goto <D.6648>; else goto <D.6650>;
  <D.6650>:
  xc0 = &c->x;
  D.7346 = (long unsigned int) wc;
  D.7347 = D.7346 * 4;
  xc = xc0 + D.7347;
  goto <D.6652>;
  <D.6651>:
  wc = wc + -1;
  <D.6652>:
  if (wc > 0) goto <D.7366>; else goto <D.6653>;
  <D.7366>:
  xc = xc + 18446744073709551612;
  D.7360 = *xc;
  if (D.7360 == 0) goto <D.6651>; else goto <D.6653>;
  <D.6653>:
  c->wds = wc;
  D.7367 = c;
  return D.7367;
}


pow5mult (struct Bigint * b, int k)
{
  int D.7371;
  int D.7372;
  struct Bigint * D.7375;
  struct Bigint * p5s.35;
  int D.7381;
  struct Bigint * D.7389;
  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.7369>; else goto <D.7370>;
  <D.7369>:
  D.7371 = i + -1;
  D.7372 = p05[D.7371];
  b = multadd (b, D.7372, 0);
  <D.7370>:
  k = k >> 2;
  if (k == 0) goto <D.7373>; else goto <D.7374>;
  <D.7373>:
  D.7375 = b;
  return D.7375;
  <D.7374>:
  p5 = p5s;
  if (p5 == 0B) goto <D.7376>; else goto <D.7377>;
  <D.7376>:
  p5 = p5s;
  if (p5 == 0B) goto <D.7378>; else goto <D.7379>;
  <D.7378>:
  p5s.35 = i2b (625);
  p5s = p5s.35;
  p5 = p5s;
  p5->next = 0B;
  <D.7379>:
  <D.7377>:
  <D.6665>:
  D.7381 = k & 1;
  if (D.7381 != 0) goto <D.7382>; else goto <D.7383>;
  <D.7382>:
  b1 = mult (b, p5);
  Bfree (b);
  b = b1;
  <D.7383>:
  k = k >> 1;
  if (k == 0) goto <D.6664>; else goto <D.7384>;
  <D.7384>:
  p51 = p5->next;
  if (p51 == 0B) goto <D.7385>; else goto <D.7386>;
  <D.7385>:
  p51 = p5->next;
  if (p51 == 0B) goto <D.7387>; else goto <D.7388>;
  <D.7387>:
  D.7389 = mult (p5, p5);
  p5->next = D.7389;
  p51 = p5->next;
  p51->next = 0B;
  <D.7388>:
  <D.7386>:
  p5 = p51;
  goto <D.6665>;
  <D.6664>:
  D.7375 = b;
  return D.7375;
}


diff (struct Bigint * a, struct Bigint * b)
{
  struct Bigint * D.7393;
  int D.7397;
  long unsigned int D.7398;
  long unsigned int D.7399;
  long unsigned int D.7400;
  long unsigned int D.7401;
  guint32 * xa.36;
  unsigned int D.7403;
  long long unsigned int D.7404;
  guint32 * xb.37;
  unsigned int D.7406;
  long long unsigned int D.7407;
  long long unsigned int D.7408;
  long long unsigned int D.7409;
  guint32 * xc.38;
  unsigned int D.7411;
  guint32 * xa.39;
  unsigned int D.7413;
  long long unsigned int D.7414;
  guint32 * xc.40;
  unsigned int D.7416;
  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.7391>; else goto <D.7392>;
  <D.7391>:
  c = Balloc (0);
  c->wds = 1;
  c->x[0] = 0;
  D.7393 = c;
  return D.7393;
  <D.7392>:
  if (i < 0) goto <D.7394>; else goto <D.7395>;
  <D.7394>:
  c = a;
  a = b;
  b = c;
  i = 1;
  goto <D.7396>;
  <D.7395>:
  i = 0;
  <D.7396>:
  D.7397 = a->k;
  c = Balloc (D.7397);
  c->sign = i;
  wa = a->wds;
  xa = &a->x;
  D.7398 = (long unsigned int) wa;
  D.7399 = D.7398 * 4;
  xae = xa + D.7399;
  wb = b->wds;
  xb = &b->x;
  D.7400 = (long unsigned int) wb;
  D.7401 = D.7400 * 4;
  xbe = xb + D.7401;
  xc = &c->x;
  borrow = 0;
  <D.6716>:
  xa.36 = xa;
  xa = xa.36 + 4;
  D.7403 = *xa.36;
  D.7404 = (long long unsigned int) D.7403;
  xb.37 = xb;
  xb = xb.37 + 4;
  D.7406 = *xb.37;
  D.7407 = (long long unsigned int) D.7406;
  D.7408 = D.7404 - D.7407;
  y = D.7408 - borrow;
  D.7409 = y >> 32;
  borrow = D.7409 & 1;
  xc.38 = xc;
  xc = xc.38 + 4;
  D.7411 = (unsigned int) y;
  *xc.38 = D.7411;
  if (xb < xbe) goto <D.6716>; else goto <D.6717>;
  <D.6717>:
  goto <D.6719>;
  <D.6718>:
  xa.39 = xa;
  xa = xa.39 + 4;
  D.7413 = *xa.39;
  D.7414 = (long long unsigned int) D.7413;
  y = D.7414 - borrow;
  D.7409 = y >> 32;
  borrow = D.7409 & 1;
  xc.40 = xc;
  xc = xc.40 + 4;
  D.7411 = (unsigned int) y;
  *xc.40 = D.7411;
  <D.6719>:
  if (xa < xae) goto <D.6718>; else goto <D.6720>;
  <D.6720>:
  goto <D.6722>;
  <D.6721>:
  wa = wa + -1;
  <D.6722>:
  xc = xc + 18446744073709551612;
  D.7416 = *xc;
  if (D.7416 == 0) goto <D.6721>; else goto <D.6723>;
  <D.6723>:
  c->wds = wa;
  D.7393 = c;
  return D.7393;
}


lshift (struct Bigint * b, int k)
{
  int D.7418;
  int D.7419;
  guint32 * x1.41;
  long unsigned int D.7421;
  long unsigned int D.7422;
  guint32 * x1.42;
  unsigned int D.7426;
  unsigned int D.7427;
  unsigned int D.7428;
  guint32 * x.43;
  unsigned int D.7430;
  unsigned int D.7431;
  guint32 * x1.44;
  guint32 * x.45;
  unsigned int D.7437;
  int D.7438;
  struct Bigint * D.7439;
  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.7418 = b->wds;
  D.7419 = D.7418 + n;
  n1 = D.7419 + 1;
  i = b->maxwds;
  goto <D.6680>;
  <D.6679>:
  k1 = k1 + 1;
  i = i << 1;
  <D.6680>:
  if (n1 > i) goto <D.6679>; else goto <D.6681>;
  <D.6681>:
  b1 = Balloc (k1);
  x1 = &b1->x;
  i = 0;
  goto <D.6683>;
  <D.6682>:
  x1.41 = x1;
  x1 = x1.41 + 4;
  *x1.41 = 0;
  i = i + 1;
  <D.6683>:
  if (i < n) goto <D.6682>; else goto <D.6684>;
  <D.6684>:
  x = &b->x;
  D.7418 = b->wds;
  D.7421 = (long unsigned int) D.7418;
  D.7422 = D.7421 * 4;
  xe = x + D.7422;
  k = k & 31;
  if (k != 0) goto <D.7423>; else goto <D.7424>;
  <D.7423>:
  k1 = 32 - k;
  z = 0;
  <D.6685>:
  x1.42 = x1;
  x1 = x1.42 + 4;
  D.7426 = *x;
  D.7427 = D.7426 << k;
  D.7428 = D.7427 | z;
  *x1.42 = D.7428;
  x.43 = x;
  x = x.43 + 4;
  D.7430 = *x.43;
  z = D.7430 >> k1;
  if (x < xe) goto <D.6685>; else goto <D.6686>;
  <D.6686>:
  *x1 = z;
  D.7431 = *x1;
  if (D.7431 != 0) goto <D.7432>; else goto <D.7433>;
  <D.7432>:
  n1 = n1 + 1;
  <D.7433>:
  goto <D.7434>;
  <D.7424>:
  <D.6687>:
  x1.44 = x1;
  x1 = x1.44 + 4;
  x.45 = x;
  x = x.45 + 4;
  D.7437 = *x.45;
  *x1.44 = D.7437;
  if (x < xe) goto <D.6687>; else goto <D.6688>;
  <D.6688>:
  <D.7434>:
  D.7438 = n1 + -1;
  b1->wds = D.7438;
  Bfree (b);
  D.7439 = b1;
  return D.7439;
}


cmp (struct Bigint * a, struct Bigint * b)
{
  int D.7443;
  long unsigned int D.7444;
  long unsigned int D.7445;
  unsigned int D.7446;
  unsigned int D.7447;
  int iftmp.46;
  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.7441>; else goto <D.7442>;
  <D.7441>:
  D.7443 = i;
  return D.7443;
  <D.7442>:
  xa0 = &a->x;
  D.7444 = (long unsigned int) j;
  D.7445 = D.7444 * 4;
  xa = xa0 + D.7445;
  xb0 = &b->x;
  D.7444 = (long unsigned int) j;
  D.7445 = D.7444 * 4;
  xb = xb0 + D.7445;
  <D.6700>:
  xa = xa + 18446744073709551612;
  D.7446 = *xa;
  xb = xb + 18446744073709551612;
  D.7447 = *xb;
  if (D.7446 != D.7447) goto <D.7448>; else goto <D.7449>;
  <D.7448>:
  D.7446 = *xa;
  D.7447 = *xb;
  if (D.7446 < D.7447) goto <D.7451>; else goto <D.7452>;
  <D.7451>:
  iftmp.46 = -1;
  goto <D.7453>;
  <D.7452>:
  iftmp.46 = 1;
  <D.7453>:
  D.7443 = iftmp.46;
  return D.7443;
  <D.7449>:
  if (xa <= xa0) goto <D.6699>; else goto <D.7454>;
  <D.7454>:
  goto <D.6700>;
  <D.6699>:
  D.7443 = 0;
  return D.7443;
}


ratio (struct Bigint * a, struct Bigint * b)
{
  double * da.47;
  double D.7457;
  double * db.48;
  double D.7459;
  int ka.49;
  int kb.50;
  int D.7462;
  int D.7463;
  int D.7464;
  int D.7465;
  int D.7466;
  unsigned int D.7469;
  int D.7470;
  unsigned int D.7471;
  unsigned int D.7472;
  unsigned int D.7474;
  unsigned int D.7475;
  double D.7476;
  double D.7477;
  double D.7478;
  double da;
  double db;
  int k;
  int ka;
  int kb;

  try
    {
      da.47 = &da;
      D.7457 = b2d (a, &ka);
      MEM[(union U *)da.47].d = D.7457;
      db.48 = &db;
      D.7459 = b2d (b, &kb);
      MEM[(union U *)db.48].d = D.7459;
      ka.49 = ka;
      kb.50 = kb;
      D.7462 = ka.49 - kb.50;
      D.7463 = a->wds;
      D.7464 = b->wds;
      D.7465 = D.7463 - D.7464;
      D.7466 = D.7465 * 32;
      k = D.7462 + D.7466;
      if (k > 0) goto <D.7467>; else goto <D.7468>;
      <D.7467>:
      da.47 = &da;
      da.47 = &da;
      D.7469 = MEM[(union U *)da.47].L[0];
      D.7470 = k * 1048576;
      D.7471 = (unsigned int) D.7470;
      D.7472 = D.7469 + D.7471;
      MEM[(union U *)da.47].L[0] = D.7472;
      goto <D.7473>;
      <D.7468>:
      k = -k;
      db.48 = &db;
      db.48 = &db;
      D.7474 = MEM[(union U *)db.48].L[0];
      D.7470 = k * 1048576;
      D.7471 = (unsigned int) D.7470;
      D.7475 = D.7474 + D.7471;
      MEM[(union U *)db.48].L[0] = D.7475;
      <D.7473>:
      da.47 = &da;
      D.7477 = MEM[(union U *)da.47].d;
      db.48 = &db;
      D.7478 = MEM[(union U *)db.48].d;
      D.7476 = D.7477 / D.7478;
      return D.7476;
    }
  finally
    {
      da = {CLOBBER};
      db = {CLOBBER};
      ka = {CLOBBER};
      kb = {CLOBBER};
    }
}


b2d (struct Bigint * a, int * e)
{
  int D.7481;
  long unsigned int D.7482;
  long unsigned int D.7483;
  int D.7484;
  double * d.51;
  int D.7488;
  unsigned int D.7489;
  unsigned int D.7490;
  guint32 iftmp.52;
  int D.7495;
  unsigned int D.7496;
  unsigned int D.7497;
  unsigned int D.7498;
  guint32 iftmp.53;
  unsigned int D.7505;
  unsigned int D.7506;
  unsigned int D.7507;
  unsigned int D.7508;
  guint32 iftmp.54;
  unsigned int D.7513;
  unsigned int D.7514;
  unsigned int D.7515;
  unsigned int D.7517;
  double D.7518;
  guint32 * xa;
  guint32 * xa0;
  guint32 w;
  guint32 y;
  guint32 z;
  int k;
  double d;
  void ret_d = <<< error >>>;

  try
    {
      xa0 = &a->x;
      D.7481 = a->wds;
      D.7482 = (long unsigned int) D.7481;
      D.7483 = D.7482 * 4;
      xa = xa0 + D.7483;
      xa = xa + 18446744073709551612;
      y = *xa;
      k = hi0bits (y);
      D.7484 = 32 - k;
      *e = D.7484;
      if (k <= 10) goto <D.7485>; else goto <D.7486>;
      <D.7485>:
      d.51 = &d;
      D.7488 = 11 - k;
      D.7489 = y >> D.7488;
      D.7490 = D.7489 | 1072693248;
      MEM[(union U *)d.51].L[0] = D.7490;
      if (xa > xa0) goto <D.7492>; else goto <D.7493>;
      <D.7492>:
      xa = xa + 18446744073709551612;
      iftmp.52 = *xa;
      goto <D.7494>;
      <D.7493>:
      iftmp.52 = 0;
      <D.7494>:
      w = iftmp.52;
      d.51 = &d;
      D.7495 = k + 21;
      D.7496 = y << D.7495;
      D.7488 = 11 - k;
      D.7497 = w >> D.7488;
      D.7498 = D.7496 | D.7497;
      MEM[(union U *)d.51].L[1] = D.7498;
      goto ret_d;
      <D.7486>:
      if (xa > xa0) goto <D.7500>; else goto <D.7501>;
      <D.7500>:
      xa = xa + 18446744073709551612;
      iftmp.53 = *xa;
      goto <D.7502>;
      <D.7501>:
      iftmp.53 = 0;
      <D.7502>:
      z = iftmp.53;
      k = k + -11;
      if (k != 0) goto <D.7503>; else goto <D.7504>;
      <D.7503>:
      d.51 = &d;
      D.7505 = y << k;
      D.7484 = 32 - k;
      D.7506 = z >> D.7484;
      D.7507 = D.7505 | D.7506;
      D.7508 = D.7507 | 1072693248;
      MEM[(union U *)d.51].L[0] = D.7508;
      if (xa > xa0) goto <D.7510>; else goto <D.7511>;
      <D.7510>:
      xa = xa + 18446744073709551612;
      iftmp.54 = *xa;
      goto <D.7512>;
      <D.7511>:
      iftmp.54 = 0;
      <D.7512>:
      y = iftmp.54;
      d.51 = &d;
      D.7513 = z << k;
      D.7484 = 32 - k;
      D.7514 = y >> D.7484;
      D.7515 = D.7513 | D.7514;
      MEM[(union U *)d.51].L[1] = D.7515;
      goto <D.7516>;
      <D.7504>:
      d.51 = &d;
      D.7517 = y | 1072693248;
      MEM[(union U *)d.51].L[0] = D.7517;
      d.51 = &d;
      MEM[(union U *)d.51].L[1] = z;
      <D.7516>:
      ret_d:
      d.51 = &d;
      D.7518 = MEM[(union U *)d.51].d;
      return D.7518;
    }
  finally
    {
      d = {CLOBBER};
    }
}


ulp (double x)
{
  double * x.55;
  unsigned int D.7522;
  unsigned int D.7523;
  unsigned int D.7524;
  double * a.56;
  unsigned int L.57;
  double D.7527;
  register gint32 L;
  double a;

  try
    {
      x.55 = &x;
      D.7522 = MEM[(union U *)x.55].L[0];
      D.7523 = D.7522 & 2146435072;
      D.7524 = D.7523 + 4240441344;
      L = (gint32) D.7524;
      a.56 = &a;
      L.57 = (unsigned int) L;
      MEM[(union U *)a.56].L[0] = L.57;
      a.56 = &a;
      MEM[(union U *)a.56].L[1] = 0;
      a.56 = &a;
      D.7527 = MEM[(union U *)a.56].d;
      return D.7527;
    }
  finally
    {
      a = {CLOBBER};
    }
}


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


