mono_strtod (const char * s00, char * * se)
{
  double * rv.0;
  char D.6341;
  int D.6342;
  unsigned int D.6349;
  unsigned int c.1;
  unsigned int D.6351;
  unsigned int D.6355;
  unsigned int D.6356;
  unsigned int c.2;
  unsigned int D.6363;
  int nd.3;
  int nd.4;
  unsigned int D.6380;
  _Bool D.6381;
  _Bool D.6382;
  _Bool D.6383;
  int D.6386;
  int D.6387;
  int D.6394;
  int D.6395;
  long int s.5;
  long int s1.6;
  long int D.6402;
  int D.6410;
  double D.6415;
  int D.6418;
  double D.6419;
  double D.6420;
  double D.6421;
  double D.6422;
  double D.6423;
  double D.6431;
  double D.6432;
  int D.6433;
  double D.6436;
  double D.6437;
  int D.6441;
  double D.6442;
  double D.6443;
  int D.6444;
  int * D.6453;
  int D.6455;
  double D.6458;
  double D.6459;
  unsigned int D.6460;
  unsigned int D.6461;
  unsigned int D.6466;
  double D.6472;
  int D.6476;
  double D.6481;
  double D.6482;
  unsigned int D.6485;
  unsigned int D.6486;
  unsigned int D.6487;
  int D.6495;
  unsigned int D.6496;
  unsigned int D.6497;
  unsigned int D.6499;
  unsigned int D.6500;
  unsigned int D.6501;
  int D.6505;
  int D.6506;
  long unsigned int D.6507;
  long unsigned int D.6508;
  long unsigned int D.6509;
  int * D.6510;
  int * D.6511;
  int bbe.7;
  int bbbits.8;
  int D.6520;
  long unsigned int D.6541;
  long unsigned int D.6542;
  unsigned int D.6545;
  int D.6548;
  int D.6550;
  unsigned int D.6556;
  guint32 iftmp.9;
  unsigned int D.6564;
  unsigned int D.6565;
  int D.6566;
  unsigned int D.6569;
  int D.6575;
  unsigned int D.6579;
  int D.6580;
  unsigned int D.6581;
  unsigned int D.6582;
  double D.6586;
  double D.6587;
  double D.6589;
  double D.6590;
  long unsigned int D.6599;
  double aadj1.10;
  double iftmp.11;
  double aadj1.12;
  double aadj1.13;
  double * rv0.14;
  double D.6618;
  double D.6619;
  long unsigned int D.6622;
  long unsigned int D.6623;
  _Bool D.6626;
  _Bool D.6627;
  _Bool D.6628;
  double iftmp.15;
  double * aadj1.16;
  unsigned int D.6640;
  unsigned int D.6641;
  unsigned int D.6642;
  double D.6643;
  double D.6648;
  double D.6658;
  double D.6659;
  double D.6664;
  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.6299>:
      D.6341 = *s;
      D.6342 = (int) D.6341;
      switch (D.6342) <default: <D.6298>, case 0: <D.6289>, case 9: <D.6291>, case 10: <D.6292>, case 11: <D.6293>, case 12: <D.6294>, case 13: <D.6295>, case 32: <D.6296>, case 43: <D.6287>, case 45: <D.6286>>
      <D.6286>:
      sign = 1;
      <D.6287>:
      s = s + 1;
      D.6341 = *s;
      if (D.6341 != 0) goto break2; else goto <D.6343>;
      <D.6343>:
      <D.6289>:
      goto ret0;
      <D.6291>:
      <D.6292>:
      <D.6293>:
      <D.6294>:
      <D.6295>:
      <D.6296>:
      // predicted unlikely by continue predictor.
      goto <D.6297>;
      <D.6298>:
      goto break2;
      <D.6297>:
      s = s + 1;
      goto <D.6299>;
      break2:
      D.6341 = *s;
      if (D.6341 == 48) goto <D.6344>; else goto <D.6345>;
      <D.6344>:
      nz0 = 1;
      goto <D.6301>;
      <D.6300>:
      <D.6301>:
      s = s + 1;
      D.6341 = *s;
      if (D.6341 == 48) goto <D.6300>; else goto <D.6302>;
      <D.6302>:
      D.6341 = *s;
      if (D.6341 == 0) goto ret; else goto <D.6346>;
      <D.6346>:
      <D.6345>:
      s0 = s;
      z = 0;
      y = z;
      nf = 0;
      nd = nf;
      goto <D.6305>;
      <D.6304>:
      if (nd <= 8) goto <D.6347>; else goto <D.6348>;
      <D.6347>:
      D.6349 = y * 10;
      c.1 = (unsigned int) c;
      D.6351 = D.6349 + c.1;
      y = D.6351 + 4294967248;
      goto <D.6352>;
      <D.6348>:
      if (nd <= 15) goto <D.6353>; else goto <D.6354>;
      <D.6353>:
      D.6355 = z * 10;
      c.1 = (unsigned int) c;
      D.6356 = D.6355 + c.1;
      z = D.6356 + 4294967248;
      <D.6354>:
      <D.6352>:
      nd = nd + 1;
      s = s + 1;
      <D.6305>:
      D.6341 = *s;
      c = (int) D.6341;
      if (c > 47) goto <D.6357>; else goto <D.6306>;
      <D.6357>:
      if (c <= 57) goto <D.6304>; else goto <D.6306>;
      <D.6306>:
      nd0 = nd;
      if (c == 46) goto <D.6358>; else goto <D.6359>;
      <D.6358>:
      s = s + 1;
      D.6341 = *s;
      c = (int) D.6341;
      if (nd == 0) goto <D.6360>; else goto <D.6361>;
      <D.6360>:
      goto <D.6308>;
      <D.6307>:
      nz = nz + 1;
      s = s + 1;
      D.6341 = *s;
      c = (int) D.6341;
      <D.6308>:
      if (c == 48) goto <D.6307>; else goto <D.6309>;
      <D.6309>:
      c.2 = (unsigned int) c;
      D.6363 = c.2 + 4294967247;
      if (D.6363 <= 8) goto <D.6364>; else goto <D.6365>;
      <D.6364>:
      s0 = s;
      nf = nf + nz;
      nz = 0;
      goto have_dig;
      <D.6365>:
      goto dig_done;
      <D.6361>:
      goto <D.6316>;
      <D.6315>:
      have_dig:
      nz = nz + 1;
      c = c + -48;
      if (c != 0) goto <D.6366>; else goto <D.6367>;
      <D.6366>:
      nf = nf + nz;
      i = 1;
      goto <D.6313>;
      <D.6312>:
      nd.3 = nd;
      nd = nd.3 + 1;
      if (nd.3 <= 8) goto <D.6369>; else goto <D.6370>;
      <D.6369>:
      y = y * 10;
      goto <D.6371>;
      <D.6370>:
      if (nd <= 16) goto <D.6372>; else goto <D.6373>;
      <D.6372>:
      z = z * 10;
      <D.6373>:
      <D.6371>:
      i = i + 1;
      <D.6313>:
      if (i < nz) goto <D.6312>; else goto <D.6314>;
      <D.6314>:
      nd.4 = nd;
      nd = nd.4 + 1;
      if (nd.4 <= 8) goto <D.6375>; else goto <D.6376>;
      <D.6375>:
      D.6349 = y * 10;
      c.1 = (unsigned int) c;
      y = D.6349 + c.1;
      goto <D.6377>;
      <D.6376>:
      if (nd <= 16) goto <D.6378>; else goto <D.6379>;
      <D.6378>:
      D.6355 = z * 10;
      c.1 = (unsigned int) c;
      z = D.6355 + c.1;
      <D.6379>:
      <D.6377>:
      nz = 0;
      <D.6367>:
      s = s + 1;
      D.6341 = *s;
      c = (int) D.6341;
      <D.6316>:
      c.2 = (unsigned int) c;
      D.6380 = c.2 + 4294967248;
      if (D.6380 <= 9) goto <D.6315>; else goto <D.6317>;
      <D.6317>:
      <D.6359>:
      dig_done:
      e = 0;
      D.6381 = c == 101;
      D.6382 = c == 69;
      D.6383 = D.6381 | D.6382;
      if (D.6383 != 0) goto <D.6384>; else goto <D.6385>;
      <D.6384>:
      D.6386 = nd | nz;
      D.6387 = D.6386 | nz0;
      if (D.6387 == 0) goto ret0; else goto <D.6388>;
      <D.6388>:
      s00 = s;
      esign = 0;
      s = s + 1;
      D.6341 = *s;
      c = (int) D.6341;
      switch (c) <default: <D.6389>, case 43: <D.6319>, case 45: <D.6318>>
      <D.6318>:
      esign = 1;
      <D.6319>:
      s = s + 1;
      D.6341 = *s;
      c = (int) D.6341;
      <D.6389>:
      c.2 = (unsigned int) c;
      D.6380 = c.2 + 4294967248;
      if (D.6380 <= 9) goto <D.6390>; else goto <D.6391>;
      <D.6390>:
      goto <D.6321>;
      <D.6320>:
      s = s + 1;
      D.6341 = *s;
      c = (int) D.6341;
      <D.6321>:
      if (c == 48) goto <D.6320>; else goto <D.6322>;
      <D.6322>:
      c.2 = (unsigned int) c;
      D.6363 = c.2 + 4294967247;
      if (D.6363 <= 8) goto <D.6392>; else goto <D.6393>;
      <D.6392>:
      L = c + -48;
      s1 = s;
      goto <D.6324>;
      <D.6323>:
      D.6394 = L * 10;
      D.6395 = D.6394 + c;
      L = D.6395 + -48;
      <D.6324>:
      s = s + 1;
      D.6341 = *s;
      c = (int) D.6341;
      if (c > 47) goto <D.6396>; else goto <D.6325>;
      <D.6396>:
      if (c <= 57) goto <D.6323>; else goto <D.6325>;
      <D.6325>:
      s.5 = (long int) s;
      s1.6 = (long int) s1;
      D.6402 = s.5 - s1.6;
      if (D.6402 > 8) goto <D.6397>; else goto <D.6403>;
      <D.6403>:
      if (L > 19999) goto <D.6397>; else goto <D.6398>;
      <D.6397>:
      e = 19999;
      goto <D.6399>;
      <D.6398>:
      e = L;
      <D.6399>:
      if (esign != 0) goto <D.6404>; else goto <D.6405>;
      <D.6404>:
      e = -e;
      <D.6405>:
      goto <D.6406>;
      <D.6393>:
      e = 0;
      <D.6406>:
      goto <D.6407>;
      <D.6391>:
      s = s00;
      <D.6407>:
      <D.6385>:
      if (nd == 0) goto <D.6408>; else goto <D.6409>;
      <D.6408>:
      D.6410 = nz | nz0;
      if (D.6410 == 0) goto <D.6411>; else goto <D.6412>;
      <D.6411>:
      ret0:
      s = s00;
      sign = 0;
      <D.6412>:
      goto ret;
      <D.6409>:
      e = e - nf;
      e1 = e;
      if (nd0 == 0) goto <D.6413>; else goto <D.6414>;
      <D.6413>:
      nd0 = nd;
      <D.6414>:
      k = MIN_EXPR <nd, 16>;
      rv.0 = &rv;
      D.6415 = (double) y;
      MEM[(union U *)rv.0].d = D.6415;
      if (k > 9) goto <D.6416>; else goto <D.6417>;
      <D.6416>:
      rv.0 = &rv;
      D.6418 = k + -9;
      D.6419 = tens[D.6418];
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6421 = D.6419 * D.6420;
      D.6422 = (double) z;
      D.6423 = D.6421 + D.6422;
      MEM[(union U *)rv.0].d = D.6423;
      <D.6417>:
      bd0 = 0B;
      if (nd <= 15) goto <D.6424>; else goto <D.6425>;
      <D.6424>:
      if (e == 0) goto ret; else goto <D.6426>;
      <D.6426>:
      if (e > 0) goto <D.6427>; else goto <D.6428>;
      <D.6427>:
      if (e <= 22) goto <D.6429>; else goto <D.6430>;
      <D.6429>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6431 = tens[e];
      D.6432 = D.6420 * D.6431;
      MEM[(union U *)rv.0].d = D.6432;
      goto ret;
      <D.6430>:
      i = 15 - nd;
      D.6433 = i + 22;
      if (D.6433 >= e) goto <D.6434>; else goto <D.6435>;
      <D.6434>:
      e = e - i;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6436 = tens[i];
      D.6437 = D.6420 * D.6436;
      MEM[(union U *)rv.0].d = D.6437;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6431 = tens[e];
      D.6432 = D.6420 * D.6431;
      MEM[(union U *)rv.0].d = D.6432;
      goto ret;
      <D.6435>:
      goto <D.6438>;
      <D.6428>:
      if (e >= -22) goto <D.6439>; else goto <D.6440>;
      <D.6439>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6441 = -e;
      D.6442 = tens[D.6441];
      D.6443 = D.6420 / D.6442;
      MEM[(union U *)rv.0].d = D.6443;
      goto ret;
      <D.6440>:
      <D.6438>:
      <D.6425>:
      D.6444 = nd - k;
      e1 = D.6444 + e1;
      scale = 0;
      if (e1 > 0) goto <D.6445>; else goto <D.6446>;
      <D.6445>:
      i = e1 & 15;
      if (i != 0) goto <D.6447>; else goto <D.6448>;
      <D.6447>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6436 = tens[i];
      D.6437 = D.6420 * D.6436;
      MEM[(union U *)rv.0].d = D.6437;
      <D.6448>:
      e1 = e1 & -16;
      if (e1 != 0) goto <D.6449>; else goto <D.6450>;
      <D.6449>:
      if (e1 > 308) goto <D.6451>; else goto <D.6452>;
      <D.6451>:
      ovfl:
      D.6453 = __errno_location ();
      *D.6453 = 34;
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[1] = 2146435072;
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[0] = 0;
      if (bd0 != 0B) goto retfree; else goto <D.6454>;
      <D.6454>:
      goto ret;
      <D.6452>:
      e1 = e1 >> 4;
      j = 0;
      goto <D.6329>;
      <D.6328>:
      D.6455 = e1 & 1;
      if (D.6455 != 0) goto <D.6456>; else goto <D.6457>;
      <D.6456>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6458 = bigtens[j];
      D.6459 = D.6420 * D.6458;
      MEM[(union U *)rv.0].d = D.6459;
      <D.6457>:
      j = j + 1;
      e1 = e1 >> 1;
      <D.6329>:
      if (e1 > 1) goto <D.6328>; else goto <D.6330>;
      <D.6330>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      D.6461 = D.6460 + 4239392768;
      MEM[(union U *)rv.0].L[1] = D.6461;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6458 = bigtens[j];
      D.6459 = D.6420 * D.6458;
      MEM[(union U *)rv.0].d = D.6459;
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      z = D.6460 & 2146435072;
      if (z > 2090860544) goto ovfl; else goto <D.6462>;
      <D.6462>:
      if (z > 2089811968) goto <D.6463>; else goto <D.6464>;
      <D.6463>:
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[1] = 2146435071;
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[0] = 4294967295;
      goto <D.6465>;
      <D.6464>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      D.6466 = D.6460 + 55574528;
      MEM[(union U *)rv.0].L[1] = D.6466;
      <D.6465>:
      <D.6450>:
      goto <D.6467>;
      <D.6446>:
      if (e1 < 0) goto <D.6468>; else goto <D.6469>;
      <D.6468>:
      e1 = -e1;
      i = e1 & 15;
      if (i != 0) goto <D.6470>; else goto <D.6471>;
      <D.6470>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6436 = tens[i];
      D.6472 = D.6420 / D.6436;
      MEM[(union U *)rv.0].d = D.6472;
      <D.6471>:
      e1 = e1 >> 4;
      if (e1 != 0) goto <D.6473>; else goto <D.6474>;
      <D.6473>:
      if (e1 > 31) goto undfl; else goto <D.6475>;
      <D.6475>:
      D.6476 = e1 & 16;
      if (D.6476 != 0) goto <D.6477>; else goto <D.6478>;
      <D.6477>:
      scale = 106;
      <D.6478>:
      j = 0;
      goto <D.6333>;
      <D.6332>:
      D.6455 = e1 & 1;
      if (D.6455 != 0) goto <D.6479>; else goto <D.6480>;
      <D.6479>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6481 = tinytens[j];
      D.6482 = D.6420 * D.6481;
      MEM[(union U *)rv.0].d = D.6482;
      <D.6480>:
      j = j + 1;
      e1 = e1 >> 1;
      <D.6333>:
      if (e1 > 0) goto <D.6332>; else goto <D.6334>;
      <D.6334>:
      if (scale != 0) goto <D.6483>; else goto <D.6484>;
      <D.6483>:
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      D.6485 = D.6460 & 2146435072;
      D.6486 = D.6485 >> 20;
      D.6487 = 107 - D.6486;
      j = (int) D.6487;
      if (j > 0) goto <D.6488>; else goto <D.6489>;
      <D.6488>:
      if (j > 31) goto <D.6490>; else goto <D.6491>;
      <D.6490>:
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[0] = 0;
      if (j > 52) goto <D.6492>; else goto <D.6493>;
      <D.6492>:
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[1] = 57671680;
      goto <D.6494>;
      <D.6493>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      D.6495 = j + -32;
      D.6496 = 4294967295 << D.6495;
      D.6497 = D.6460 & D.6496;
      MEM[(union U *)rv.0].L[1] = D.6497;
      <D.6494>:
      goto <D.6498>;
      <D.6491>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6499 = MEM[(union U *)rv.0].L[0];
      D.6500 = 4294967295 << j;
      D.6501 = D.6499 & D.6500;
      MEM[(union U *)rv.0].L[0] = D.6501;
      <D.6498>:
      <D.6489>:
      <D.6484>:
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      if (D.6420 == 0.0) goto <D.6502>; else goto <D.6503>;
      <D.6502>:
      undfl:
      rv.0 = &rv;
      MEM[(union U *)rv.0].d = 0.0;
      D.6453 = __errno_location ();
      *D.6453 = 34;
      if (bd0 != 0B) goto retfree; else goto <D.6504>;
      <D.6504>:
      goto ret;
      <D.6503>:
      <D.6474>:
      <D.6469>:
      <D.6467>:
      bd0 = s2b (s0, nd0, nd, y);
      <D.6338>:
      D.6505 = bd0->k;
      bd = Balloc (D.6505);
      D.6506 = bd0->wds;
      D.6507 = (long unsigned int) D.6506;
      D.6508 = D.6507 + 2;
      D.6509 = D.6508 * 4;
      D.6510 = &bd0->sign;
      D.6511 = &bd->sign;
      memcpy (D.6511, D.6510, D.6509);
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      bb = d2b (D.6420, &bbe, &bbbits);
      bs = i2b (1);
      if (e >= 0) goto <D.6512>; else goto <D.6513>;
      <D.6512>:
      bb5 = 0;
      bb2 = bb5;
      bd5 = e;
      bd2 = bd5;
      goto <D.6514>;
      <D.6513>:
      bb5 = -e;
      bb2 = bb5;
      bd5 = 0;
      bd2 = bd5;
      <D.6514>:
      bbe.7 = bbe;
      if (bbe.7 >= 0) goto <D.6516>; else goto <D.6517>;
      <D.6516>:
      bbe.7 = bbe;
      bb2 = bb2 + bbe.7;
      goto <D.6518>;
      <D.6517>:
      bbe.7 = bbe;
      bd2 = bd2 - bbe.7;
      <D.6518>:
      bs2 = bb2;
      bbe.7 = bbe;
      j = bbe.7 - scale;
      bbbits.8 = bbbits;
      D.6520 = j + bbbits.8;
      i = D.6520 + -1;
      if (i < -1022) goto <D.6521>; else goto <D.6522>;
      <D.6521>:
      j = j + 1075;
      goto <D.6523>;
      <D.6522>:
      bbbits.8 = bbbits;
      j = 54 - bbbits.8;
      <D.6523>:
      bb2 = bb2 + j;
      bd2 = bd2 + j;
      bd2 = bd2 + scale;
      i = MIN_EXPR <bd2, bb2>;
      if (i > bs2) goto <D.6524>; else goto <D.6525>;
      <D.6524>:
      i = bs2;
      <D.6525>:
      if (i > 0) goto <D.6526>; else goto <D.6527>;
      <D.6526>:
      bb2 = bb2 - i;
      bd2 = bd2 - i;
      bs2 = bs2 - i;
      <D.6527>:
      if (bb5 > 0) goto <D.6528>; else goto <D.6529>;
      <D.6528>:
      bs = pow5mult (bs, bb5);
      bb1 = mult (bs, bb);
      Bfree (bb);
      bb = bb1;
      <D.6529>:
      if (bb2 > 0) goto <D.6530>; else goto <D.6531>;
      <D.6530>:
      bb = lshift (bb, bb2);
      <D.6531>:
      if (bd5 > 0) goto <D.6532>; else goto <D.6533>;
      <D.6532>:
      bd = pow5mult (bd, bd5);
      <D.6533>:
      if (bd2 > 0) goto <D.6534>; else goto <D.6535>;
      <D.6534>:
      bd = lshift (bd, bd2);
      <D.6535>:
      if (bs2 > 0) goto <D.6536>; else goto <D.6537>;
      <D.6536>:
      bs = lshift (bs, bs2);
      <D.6537>:
      delta = diff (bb, bd);
      dsign = delta->sign;
      delta->sign = 0;
      i = cmp (delta, bs);
      if (i < 0) goto <D.6538>; else goto <D.6539>;
      <D.6538>:
      if (dsign != 0) goto <D.6335>; else goto <D.6540>;
      <D.6540>:
      rv.0 = &rv;
      D.6541 = BIT_FIELD_REF <MEM[(union U *)rv.0], 64, 0>;
      D.6542 = D.6541 & 4503599627370495;
      if (D.6542 != 0) goto <D.6335>; else goto <D.6543>;
      <D.6543>:
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      D.6485 = D.6460 & 2146435072;
      if (D.6485 <= 112197632) goto <D.6335>; else goto <D.6544>;
      <D.6544>:
      D.6545 = delta->x[0];
      if (D.6545 == 0) goto <D.6546>; else goto <D.6547>;
      <D.6546>:
      D.6548 = delta->wds;
      if (D.6548 <= 1) goto <D.6335>; else goto <D.6549>;
      <D.6549>:
      <D.6547>:
      delta = lshift (delta, 1);
      D.6550 = cmp (delta, bs);
      if (D.6550 > 0) goto drop_down; else goto <D.6551>;
      <D.6551>:
      goto <D.6335>;
      <D.6539>:
      if (i == 0) goto <D.6552>; else goto <D.6553>;
      <D.6552>:
      if (dsign != 0) goto <D.6554>; else goto <D.6555>;
      <D.6554>:
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      D.6556 = D.6460 & 1048575;
      if (D.6556 == 1048575) goto <D.6557>; else goto <D.6558>;
      <D.6557>:
      rv.0 = &rv;
      D.6499 = MEM[(union U *)rv.0].L[0];
      if (scale != 0) goto <D.6562>; else goto <D.6560>;
      <D.6562>:
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      y = D.6460 & 2146435072;
      if (y <= 111149056) goto <D.6563>; else goto <D.6560>;
      <D.6563>:
      D.6564 = y >> 20;
      D.6565 = 107 - D.6564;
      D.6566 = (int) D.6565;
      iftmp.9 = 4294967295 << D.6566;
      goto <D.6561>;
      <D.6560>:
      iftmp.9 = 4294967295;
      <D.6561>:
      if (D.6499 == iftmp.9) goto <D.6567>; else goto <D.6568>;
      <D.6567>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      D.6485 = D.6460 & 2146435072;
      D.6569 = D.6485 + 1048576;
      MEM[(union U *)rv.0].L[1] = D.6569;
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[0] = 0;
      dsign = 0;
      goto <D.6335>;
      <D.6568>:
      <D.6558>:
      goto <D.6570>;
      <D.6555>:
      rv.0 = &rv;
      D.6541 = BIT_FIELD_REF <MEM[(union U *)rv.0], 64, 0>;
      D.6542 = D.6541 & 4503599627370495;
      if (D.6542 == 0) goto <D.6571>; else goto <D.6572>;
      <D.6571>:
      drop_down:
      if (scale != 0) goto <D.6573>; else goto <D.6574>;
      <D.6573>:
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      D.6575 = (int) D.6460;
      L = D.6575 & 2146435072;
      if (L <= 112197632) goto <D.6576>; else goto <D.6577>;
      <D.6576>:
      if (L > 57671680) goto <D.6335>; else goto <D.6578>;
      <D.6578>:
      goto undfl;
      <D.6577>:
      <D.6574>:
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      D.6485 = D.6460 & 2146435072;
      D.6579 = D.6485 + 4293918720;
      L = (gint32) D.6579;
      rv.0 = &rv;
      D.6580 = L | 1048575;
      D.6581 = (unsigned int) D.6580;
      MEM[(union U *)rv.0].L[1] = D.6581;
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[0] = 4294967295;
      goto <D.6335>;
      <D.6572>:
      <D.6570>:
      rv.0 = &rv;
      D.6499 = MEM[(union U *)rv.0].L[0];
      D.6582 = D.6499 & 1;
      if (D.6582 == 0) goto <D.6335>; else goto <D.6583>;
      <D.6583>:
      if (dsign != 0) goto <D.6584>; else goto <D.6585>;
      <D.6584>:
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6586 = ulp (D.6420);
      rv.0 = &rv;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6587 = D.6420 + D.6586;
      MEM[(union U *)rv.0].d = D.6587;
      goto <D.6588>;
      <D.6585>:
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6589 = ulp (D.6420);
      rv.0 = &rv;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6590 = D.6420 - D.6589;
      MEM[(union U *)rv.0].d = D.6590;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      if (D.6420 == 0.0) goto undfl; else goto <D.6591>;
      <D.6591>:
      <D.6588>:
      dsign = 1 - dsign;
      goto <D.6335>;
      <D.6553>:
      aadj = ratio (delta, bs);
      if (aadj <= 2.0e+0) goto <D.6592>; else goto <D.6593>;
      <D.6592>:
      if (dsign != 0) goto <D.6594>; else goto <D.6595>;
      <D.6594>:
      aadj1 = 1.0e+0;
      aadj = aadj1;
      goto <D.6596>;
      <D.6595>:
      rv.0 = &rv;
      D.6541 = BIT_FIELD_REF <MEM[(union U *)rv.0], 64, 0>;
      D.6542 = D.6541 & 4503599627370495;
      if (D.6542 != 0) goto <D.6597>; else goto <D.6598>;
      <D.6597>:
      rv.0 = &rv;
      D.6541 = BIT_FIELD_REF <MEM[(union U *)rv.0], 64, 0>;
      D.6599 = D.6541;
      if (D.6599 == 1) goto undfl; else goto <D.6600>;
      <D.6600>:
      aadj = 1.0e+0;
      aadj1 = -1.0e+0;
      goto <D.6601>;
      <D.6598>:
      if (aadj < 1.0e+0) goto <D.6602>; else goto <D.6603>;
      <D.6602>:
      aadj = 5.0e-1;
      goto <D.6604>;
      <D.6603>:
      aadj = aadj * 5.0e-1;
      <D.6604>:
      aadj1.10 = -aadj;
      aadj1 = aadj1.10;
      <D.6601>:
      <D.6596>:
      goto <D.6606>;
      <D.6593>:
      aadj = aadj * 5.0e-1;
      if (dsign == 0) goto <D.6608>; else goto <D.6609>;
      <D.6608>:
      iftmp.11 = -aadj;
      goto <D.6610>;
      <D.6609>:
      iftmp.11 = aadj;
      <D.6610>:
      aadj1 = iftmp.11;
      if (0 != 0) goto <D.6611>; else goto <D.6612>;
      <D.6611>:
      aadj1.12 = aadj1;
      aadj1.13 = aadj1.12 + 5.0e-1;
      aadj1 = aadj1.13;
      <D.6612>:
      <D.6606>:
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      y = D.6460 & 2146435072;
      if (y == 2145386496) goto <D.6615>; else goto <D.6616>;
      <D.6615>:
      rv0.14 = &rv0;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      MEM[(union U *)rv0.14].d = D.6420;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      D.6461 = D.6460 + 4239392768;
      MEM[(union U *)rv.0].L[1] = D.6461;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6618 = ulp (D.6420);
      aadj1.12 = aadj1;
      adj = D.6618 * aadj1.12;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6619 = D.6420 + adj;
      MEM[(union U *)rv.0].d = D.6619;
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      D.6485 = D.6460 & 2146435072;
      if (D.6485 > 2090860543) goto <D.6620>; else goto <D.6621>;
      <D.6620>:
      rv0.14 = &rv0;
      D.6622 = BIT_FIELD_REF <MEM[(union U *)rv0.14], 64, 0>;
      D.6623 = D.6622;
      if (D.6623 == 9218868437227405311) goto ovfl; else goto <D.6624>;
      <D.6624>:
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[1] = 2146435071;
      rv.0 = &rv;
      MEM[(union U *)rv.0].L[0] = 4294967295;
      goto cont;
      <D.6621>:
      rv.0 = &rv;
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      D.6466 = D.6460 + 55574528;
      MEM[(union U *)rv.0].L[1] = D.6466;
      goto <D.6625>;
      <D.6616>:
      D.6626 = scale != 0;
      D.6627 = y <= 111149056;
      D.6628 = D.6626 & D.6627;
      if (D.6628 != 0) goto <D.6629>; else goto <D.6630>;
      <D.6629>:
      if (aadj <= 2.147483647e+9) goto <D.6631>; else goto <D.6632>;
      <D.6631>:
      z = (guint32) aadj;
      if (z == 0) goto <D.6633>; else goto <D.6634>;
      <D.6633>:
      z = 1;
      <D.6634>:
      aadj = (double) z;
      if (dsign == 0) goto <D.6636>; else goto <D.6637>;
      <D.6636>:
      iftmp.15 = -aadj;
      goto <D.6638>;
      <D.6637>:
      iftmp.15 = aadj;
      <D.6638>:
      aadj1 = iftmp.15;
      <D.6632>:
      aadj1.16 = &aadj1;
      aadj1.16 = &aadj1;
      D.6640 = MEM[(union U *)aadj1.16].L[1];
      D.6641 = D.6640 - y;
      D.6642 = D.6641 + 112197632;
      MEM[(union U *)aadj1.16].L[1] = D.6642;
      <D.6630>:
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6643 = ulp (D.6420);
      aadj1.12 = aadj1;
      adj = D.6643 * aadj1.12;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      D.6619 = D.6420 + adj;
      MEM[(union U *)rv.0].d = D.6619;
      <D.6625>:
      rv.0 = &rv;
      D.6460 = MEM[(union U *)rv.0].L[1];
      z = D.6460 & 2146435072;
      if (scale == 0) goto <D.6644>; else goto <D.6645>;
      <D.6644>:
      if (y == z) goto <D.6646>; else goto <D.6647>;
      <D.6646>:
      L = (gint32) aadj;
      D.6648 = (double) L;
      aadj = aadj - D.6648;
      if (dsign != 0) goto <D.6649>; else goto <D.6652>;
      <D.6652>:
      rv.0 = &rv;
      D.6541 = BIT_FIELD_REF <MEM[(union U *)rv.0], 64, 0>;
      D.6542 = D.6541 & 4503599627370495;
      if (D.6542 != 0) goto <D.6649>; else goto <D.6650>;
      <D.6649>:
      if (aadj < 4.99999899999999997124433548378874547779560089111328125e-1) goto <D.6335>; else goto <D.6653>;
      <D.6653>:
      if (aadj > 5.0000009999999994736441522036329843103885650634765625e-1) goto <D.6335>; else goto <D.6654>;
      <D.6654>:
      goto <D.6651>;
      <D.6650>:
      if (aadj < 2.499999499999999985622167741894372738897800445556640625e-1) goto <D.6335>; else goto <D.6655>;
      <D.6655>:
      <D.6651>:
      <D.6647>:
      <D.6645>:
      cont:
      Bfree (bb);
      Bfree (bd);
      Bfree (bs);
      Bfree (delta);
      goto <D.6338>;
      <D.6335>:
      if (scale != 0) goto <D.6656>; else goto <D.6657>;
      <D.6656>:
      rv0.14 = &rv0;
      MEM[(union U *)rv0.14].L[1] = 961544192;
      rv0.14 = &rv0;
      MEM[(union U *)rv0.14].L[0] = 0;
      rv.0 = &rv;
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      rv0.14 = &rv0;
      D.6658 = MEM[(union U *)rv0.14].d;
      D.6659 = D.6420 * D.6658;
      MEM[(union U *)rv.0].d = D.6659;
      rv.0 = &rv;
      D.6541 = BIT_FIELD_REF <MEM[(union U *)rv.0], 64, 0>;
      D.6599 = D.6541;
      if (D.6599 == 0) goto <D.6660>; else goto <D.6661>;
      <D.6660>:
      D.6453 = __errno_location ();
      *D.6453 = 34;
      <D.6661>:
      <D.6657>:
      retfree:
      Bfree (bb);
      Bfree (bd);
      Bfree (bs);
      Bfree (bd0);
      Bfree (delta);
      ret:
      if (se != 0B) goto <D.6662>; else goto <D.6663>;
      <D.6662>:
      *se = s;
      <D.6663>:
      if (sign != 0) goto <D.6666>; else goto <D.6667>;
      <D.6666>:
      rv.0 = &rv;
      D.6420 = MEM[(union U *)rv.0].d;
      iftmp.17 = -D.6420;
      goto <D.6668>;
      <D.6667>:
      rv.0 = &rv;
      iftmp.17 = MEM[(union U *)rv.0].d;
      <D.6668>:
      D.6664 = iftmp.17;
      return D.6664;
    }
  finally
    {
      bbe = {CLOBBER};
      bbbits = {CLOBBER};
      aadj1 = {CLOBBER};
      rv = {CLOBBER};
      rv0 = {CLOBBER};
    }
}


s2b (const char * s, int nd0, int nd, guint32 y9)
{
  int D.6671;
  const char * s.18;
  char D.6675;
  int D.6676;
  int D.6677;
  const char * s.19;
  char D.6680;
  int D.6681;
  int D.6682;
  struct Bigint * D.6683;
  struct Bigint * b;
  int i;
  int k;
  gint32 x;
  gint32 y;

  D.6671 = nd + 8;
  x = D.6671 / 9;
  k = 0;
  y = 1;
  goto <D.6082>;
  <D.6081>:
  y = y << 1;
  k = k + 1;
  <D.6082>:
  if (x > y) goto <D.6081>; else goto <D.6083>;
  <D.6083>:
  b = Balloc (k);
  b->x[0] = y9;
  b->wds = 1;
  i = 9;
  if (nd0 > 9) goto <D.6672>; else goto <D.6673>;
  <D.6672>:
  s = s + 9;
  <D.6084>:
  s.18 = s;
  s = s.18 + 1;
  D.6675 = *s.18;
  D.6676 = (int) D.6675;
  D.6677 = D.6676 + -48;
  b = multadd (b, 10, D.6677);
  i = i + 1;
  if (i < nd0) goto <D.6084>; else goto <D.6085>;
  <D.6085>:
  s = s + 1;
  goto <D.6678>;
  <D.6673>:
  s = s + 10;
  <D.6678>:
  goto <D.6087>;
  <D.6086>:
  s.19 = s;
  s = s.19 + 1;
  D.6680 = *s.19;
  D.6681 = (int) D.6680;
  D.6682 = D.6681 + -48;
  b = multadd (b, 10, D.6682);
  i = i + 1;
  <D.6087>:
  if (i < nd) goto <D.6086>; else goto <D.6088>;
  <D.6088>:
  D.6683 = b;
  return D.6683;
}


multadd (struct Bigint * b, int m, int a)
{
  unsigned int D.6685;
  long long unsigned int D.6686;
  long long unsigned int D.6687;
  long long unsigned int D.6688;
  guint32 * x.20;
  unsigned int D.6690;
  int D.6693;
  int D.6696;
  int D.6697;
  int D.6698;
  long unsigned int D.6699;
  long unsigned int D.6700;
  long unsigned int D.6701;
  int * D.6702;
  int * D.6703;
  int wds.21;
  unsigned int D.6705;
  struct Bigint * D.6706;
  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.6068>:
  D.6685 = *x;
  D.6686 = (long long unsigned int) D.6685;
  D.6687 = (long long unsigned int) m;
  D.6688 = D.6686 * D.6687;
  y = D.6688 + carry;
  carry = y >> 32;
  x.20 = x;
  x = x.20 + 4;
  D.6690 = (unsigned int) y;
  *x.20 = D.6690;
  i = i + 1;
  if (i < wds) goto <D.6068>; else goto <D.6069>;
  <D.6069>:
  if (carry != 0) goto <D.6691>; else goto <D.6692>;
  <D.6691>:
  D.6693 = b->maxwds;
  if (D.6693 <= wds) goto <D.6694>; else goto <D.6695>;
  <D.6694>:
  D.6696 = b->k;
  D.6697 = D.6696 + 1;
  b1 = Balloc (D.6697);
  D.6698 = b->wds;
  D.6699 = (long unsigned int) D.6698;
  D.6700 = D.6699 + 2;
  D.6701 = D.6700 * 4;
  D.6702 = &b->sign;
  D.6703 = &b1->sign;
  memcpy (D.6703, D.6702, D.6701);
  Bfree (b);
  b = b1;
  <D.6695>:
  wds.21 = wds;
  wds = wds.21 + 1;
  D.6705 = (unsigned int) carry;
  b->x[wds.21] = D.6705;
  b->wds = wds;
  <D.6692>:
  D.6706 = b;
  return D.6706;
}


Balloc (int k)
{
  struct Bigint * D.6710;
  int D.6712;
  long unsigned int D.6713;
  long unsigned int D.6714;
  long unsigned int D.6715;
  int D.6716;
  struct Bigint * D.6717;
  int x;
  struct Bigint * rv;

  rv = freelist[k];
  if (rv != 0B) goto <D.6708>; else goto <D.6709>;
  <D.6708>:
  D.6710 = rv->next;
  freelist[k] = D.6710;
  goto <D.6711>;
  <D.6709>:
  x = 1 << k;
  D.6712 = x + -1;
  D.6713 = (long unsigned int) D.6712;
  D.6714 = D.6713 + 8;
  D.6715 = D.6714 * 4;
  rv = malloc (D.6715);
  rv->k = k;
  rv->maxwds = x;
  <D.6711>:
  rv->wds = 0;
  D.6716 = rv->wds;
  rv->sign = D.6716;
  D.6717 = rv;
  return D.6717;
}


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

  D.6720 = __builtin_object_size (__dest, 0);
  D.6719 = __builtin___memcpy_chk (__dest, __src, __len, D.6720);
  return D.6719;
}


d2b (double d, int * e, int * bits)
{
  double * d.22;
  unsigned int D.6723;
  unsigned int z.23;
  unsigned int D.6725;
  unsigned int D.6726;
  unsigned int z.24;
  unsigned int z.25;
  unsigned int y.26;
  unsigned int y.27;
  int D.6737;
  unsigned int D.6738;
  unsigned int D.6739;
  unsigned int z.28;
  int iftmp.29;
  guint32 * D.6743;
  unsigned int D.6744;
  int D.6751;
  int D.6752;
  int D.6753;
  int D.6755;
  int D.6756;
  int D.6757;
  long unsigned int D.6758;
  long unsigned int D.6759;
  sizetype D.6760;
  guint32 * D.6761;
  unsigned int D.6762;
  int D.6763;
  int D.6764;
  struct Bigint * D.6765;
  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.6723 = MEM[(union U *)d.22].L[1];
      z.23 = D.6723 & 1048575;
      z = z.23;
      d.22 = &d;
      d.22 = &d;
      D.6723 = MEM[(union U *)d.22].L[1];
      D.6725 = D.6723 & 2147483647;
      MEM[(union U *)d.22].L[1] = D.6725;
      d.22 = &d;
      D.6723 = MEM[(union U *)d.22].L[1];
      D.6726 = D.6723 >> 20;
      de = (int) D.6726;
      if (de != 0) goto <D.6727>; else goto <D.6728>;
      <D.6727>:
      z.24 = z;
      z.25 = z.24 | 1048576;
      z = z.25;
      <D.6728>:
      d.22 = &d;
      y.26 = MEM[(union U *)d.22].L[0];
      y = y.26;
      y.27 = y;
      if (y.27 != 0) goto <D.6733>; else goto <D.6734>;
      <D.6733>:
      k = lo0bits (&y);
      if (k != 0) goto <D.6735>; else goto <D.6736>;
      <D.6735>:
      z.24 = z;
      D.6737 = 32 - k;
      D.6738 = z.24 << D.6737;
      y.27 = y;
      D.6739 = D.6738 | y.27;
      *x = D.6739;
      z.24 = z;
      z.28 = z.24 >> k;
      z = z.28;
      goto <D.6741>;
      <D.6736>:
      y.27 = y;
      *x = y.27;
      <D.6741>:
      D.6743 = x + 4;
      z.24 = z;
      *D.6743 = z.24;
      D.6744 = *D.6743;
      if (D.6744 != 0) goto <D.6745>; else goto <D.6746>;
      <D.6745>:
      iftmp.29 = 2;
      goto <D.6747>;
      <D.6746>:
      iftmp.29 = 1;
      <D.6747>:
      b->wds = iftmp.29;
      i = b->wds;
      goto <D.6748>;
      <D.6734>:
      k = lo0bits (&z);
      z.24 = z;
      *x = z.24;
      b->wds = 1;
      i = b->wds;
      k = k + 32;
      <D.6748>:
      if (de != 0) goto <D.6749>; else goto <D.6750>;
      <D.6749>:
      D.6751 = de + -1075;
      D.6752 = D.6751 + k;
      *e = D.6752;
      D.6753 = 53 - k;
      *bits = D.6753;
      goto <D.6754>;
      <D.6750>:
      D.6755 = de + -1074;
      D.6756 = D.6755 + k;
      *e = D.6756;
      D.6757 = i * 32;
      D.6758 = (long unsigned int) i;
      D.6759 = D.6758 * 4;
      D.6760 = D.6759 + 18446744073709551612;
      D.6761 = x + D.6760;
      D.6762 = *D.6761;
      D.6763 = hi0bits (D.6762);
      D.6764 = D.6757 - D.6763;
      *bits = D.6764;
      <D.6754>:
      D.6765 = b;
      return D.6765;
    }
  finally
    {
      y = {CLOBBER};
      z = {CLOBBER};
    }
}


lo0bits (guint32 * y)
{
  unsigned int D.6768;
  unsigned int D.6771;
  int D.6774;
  unsigned int D.6775;
  unsigned int D.6778;
  unsigned int D.6779;
  unsigned int D.6780;
  unsigned int D.6783;
  unsigned int D.6786;
  unsigned int D.6789;
  register int k;
  register guint32 x;

  x = *y;
  D.6768 = x & 7;
  if (D.6768 != 0) goto <D.6769>; else goto <D.6770>;
  <D.6769>:
  D.6771 = x & 1;
  if (D.6771 != 0) goto <D.6772>; else goto <D.6773>;
  <D.6772>:
  D.6774 = 0;
  return D.6774;
  <D.6773>:
  D.6775 = x & 2;
  if (D.6775 != 0) goto <D.6776>; else goto <D.6777>;
  <D.6776>:
  D.6778 = x >> 1;
  *y = D.6778;
  D.6774 = 1;
  return D.6774;
  <D.6777>:
  D.6779 = x >> 2;
  *y = D.6779;
  D.6774 = 2;
  return D.6774;
  <D.6770>:
  k = 0;
  D.6780 = x & 65535;
  if (D.6780 == 0) goto <D.6781>; else goto <D.6782>;
  <D.6781>:
  k = 16;
  x = x >> 16;
  <D.6782>:
  D.6783 = x & 255;
  if (D.6783 == 0) goto <D.6784>; else goto <D.6785>;
  <D.6784>:
  k = k + 8;
  x = x >> 8;
  <D.6785>:
  D.6786 = x & 15;
  if (D.6786 == 0) goto <D.6787>; else goto <D.6788>;
  <D.6787>:
  k = k + 4;
  x = x >> 4;
  <D.6788>:
  D.6789 = x & 3;
  if (D.6789 == 0) goto <D.6790>; else goto <D.6791>;
  <D.6790>:
  k = k + 2;
  x = x >> 2;
  <D.6791>:
  D.6771 = x & 1;
  if (D.6771 == 0) goto <D.6792>; else goto <D.6793>;
  <D.6792>:
  k = k + 1;
  x = x >> 1;
  if (x == 0) goto <D.6794>; else goto <D.6795>;
  <D.6794>:
  D.6774 = 32;
  return D.6774;
  <D.6795>:
  <D.6793>:
  *y = x;
  D.6774 = k;
  return D.6774;
}


hi0bits (guint32 x)
{
  unsigned int D.6797;
  unsigned int D.6800;
  unsigned int D.6803;
  unsigned int D.6806;
  signed int x.30;
  unsigned int D.6812;
  int D.6815;
  register int k;

  k = 0;
  D.6797 = x & 4294901760;
  if (D.6797 == 0) goto <D.6798>; else goto <D.6799>;
  <D.6798>:
  k = 16;
  x = x << 16;
  <D.6799>:
  D.6800 = x & 4278190080;
  if (D.6800 == 0) goto <D.6801>; else goto <D.6802>;
  <D.6801>:
  k = k + 8;
  x = x << 8;
  <D.6802>:
  D.6803 = x & 4026531840;
  if (D.6803 == 0) goto <D.6804>; else goto <D.6805>;
  <D.6804>:
  k = k + 4;
  x = x << 4;
  <D.6805>:
  D.6806 = x & 3221225472;
  if (D.6806 == 0) goto <D.6807>; else goto <D.6808>;
  <D.6807>:
  k = k + 2;
  x = x << 2;
  <D.6808>:
  x.30 = (signed int) x;
  if (x.30 >= 0) goto <D.6810>; else goto <D.6811>;
  <D.6810>:
  k = k + 1;
  D.6812 = x & 1073741824;
  if (D.6812 == 0) goto <D.6813>; else goto <D.6814>;
  <D.6813>:
  D.6815 = 32;
  return D.6815;
  <D.6814>:
  <D.6811>:
  D.6815 = k;
  return D.6815;
}


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

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


mult (struct Bigint * a, struct Bigint * b)
{
  int D.6820;
  int D.6821;
  int D.6824;
  long unsigned int D.6827;
  long unsigned int D.6828;
  long unsigned int D.6829;
  long unsigned int D.6830;
  long unsigned int D.6831;
  long unsigned int D.6832;
  guint32 * xb.32;
  guint32 * x.33;
  unsigned int D.6837;
  long long unsigned int D.6838;
  long long unsigned int D.6839;
  long long unsigned int D.6840;
  unsigned int D.6841;
  long long unsigned int D.6842;
  long long unsigned int D.6843;
  guint32 * xc.34;
  unsigned int D.6845;
  unsigned int D.6846;
  struct Bigint * D.6848;
  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.6820 = a->wds;
  D.6821 = b->wds;
  if (D.6820 < D.6821) goto <D.6822>; else goto <D.6823>;
  <D.6822>:
  c = a;
  a = b;
  b = c;
  <D.6823>:
  k = a->k;
  wa = a->wds;
  wb = b->wds;
  wc = wa + wb;
  D.6824 = a->maxwds;
  if (D.6824 < wc) goto <D.6825>; else goto <D.6826>;
  <D.6825>:
  k = k + 1;
  <D.6826>:
  c = Balloc (k);
  x = &c->x;
  D.6827 = (long unsigned int) wc;
  D.6828 = D.6827 * 4;
  xa = x + D.6828;
  goto <D.6122>;
  <D.6121>:
  *x = 0;
  x = x + 4;
  <D.6122>:
  if (x < xa) goto <D.6121>; else goto <D.6123>;
  <D.6123>:
  xa = &a->x;
  D.6829 = (long unsigned int) wa;
  D.6830 = D.6829 * 4;
  xae = xa + D.6830;
  xb = &b->x;
  D.6831 = (long unsigned int) wb;
  D.6832 = D.6831 * 4;
  xbe = xb + D.6832;
  xc0 = &c->x;
  goto <D.6127>;
  <D.6126>:
  xb.32 = xb;
  xb = xb.32 + 4;
  y = *xb.32;
  if (y != 0) goto <D.6834>; else goto <D.6835>;
  <D.6834>:
  x = xa;
  xc = xc0;
  carry = 0;
  <D.6124>:
  x.33 = x;
  x = x.33 + 4;
  D.6837 = *x.33;
  D.6838 = (long long unsigned int) D.6837;
  D.6839 = (long long unsigned int) y;
  D.6840 = D.6838 * D.6839;
  D.6841 = *xc;
  D.6842 = (long long unsigned int) D.6841;
  D.6843 = D.6840 + D.6842;
  z = D.6843 + carry;
  carry = z >> 32;
  xc.34 = xc;
  xc = xc.34 + 4;
  D.6845 = (unsigned int) z;
  *xc.34 = D.6845;
  if (x < xae) goto <D.6124>; else goto <D.6125>;
  <D.6125>:
  D.6846 = (unsigned int) carry;
  *xc = D.6846;
  <D.6835>:
  xc0 = xc0 + 4;
  <D.6127>:
  if (xb < xbe) goto <D.6126>; else goto <D.6128>;
  <D.6128>:
  xc0 = &c->x;
  D.6827 = (long unsigned int) wc;
  D.6828 = D.6827 * 4;
  xc = xc0 + D.6828;
  goto <D.6130>;
  <D.6129>:
  wc = wc + -1;
  <D.6130>:
  if (wc > 0) goto <D.6847>; else goto <D.6131>;
  <D.6847>:
  xc = xc + 18446744073709551612;
  D.6841 = *xc;
  if (D.6841 == 0) goto <D.6129>; else goto <D.6131>;
  <D.6131>:
  c->wds = wc;
  D.6848 = c;
  return D.6848;
}


pow5mult (struct Bigint * b, int k)
{
  int D.6852;
  int D.6853;
  struct Bigint * D.6856;
  struct Bigint * p5s.35;
  int D.6862;
  struct Bigint * D.6870;
  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.6850>; else goto <D.6851>;
  <D.6850>:
  D.6852 = i + -1;
  D.6853 = p05[D.6852];
  b = multadd (b, D.6853, 0);
  <D.6851>:
  k = k >> 2;
  if (k == 0) goto <D.6854>; else goto <D.6855>;
  <D.6854>:
  D.6856 = b;
  return D.6856;
  <D.6855>:
  p5 = p5s;
  if (p5 == 0B) goto <D.6857>; else goto <D.6858>;
  <D.6857>:
  p5 = p5s;
  if (p5 == 0B) goto <D.6859>; else goto <D.6860>;
  <D.6859>:
  p5s.35 = i2b (625);
  p5s = p5s.35;
  p5 = p5s;
  p5->next = 0B;
  <D.6860>:
  <D.6858>:
  <D.6143>:
  D.6862 = k & 1;
  if (D.6862 != 0) goto <D.6863>; else goto <D.6864>;
  <D.6863>:
  b1 = mult (b, p5);
  Bfree (b);
  b = b1;
  <D.6864>:
  k = k >> 1;
  if (k == 0) goto <D.6142>; else goto <D.6865>;
  <D.6865>:
  p51 = p5->next;
  if (p51 == 0B) goto <D.6866>; else goto <D.6867>;
  <D.6866>:
  p51 = p5->next;
  if (p51 == 0B) goto <D.6868>; else goto <D.6869>;
  <D.6868>:
  D.6870 = mult (p5, p5);
  p5->next = D.6870;
  p51 = p5->next;
  p51->next = 0B;
  <D.6869>:
  <D.6867>:
  p5 = p51;
  goto <D.6143>;
  <D.6142>:
  D.6856 = b;
  return D.6856;
}


diff (struct Bigint * a, struct Bigint * b)
{
  struct Bigint * D.6874;
  int D.6878;
  long unsigned int D.6879;
  long unsigned int D.6880;
  long unsigned int D.6881;
  long unsigned int D.6882;
  guint32 * xa.36;
  unsigned int D.6884;
  long long unsigned int D.6885;
  guint32 * xb.37;
  unsigned int D.6887;
  long long unsigned int D.6888;
  long long unsigned int D.6889;
  long long unsigned int D.6890;
  guint32 * xc.38;
  unsigned int D.6892;
  guint32 * xa.39;
  unsigned int D.6894;
  long long unsigned int D.6895;
  guint32 * xc.40;
  unsigned int D.6897;
  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.6872>; else goto <D.6873>;
  <D.6872>:
  c = Balloc (0);
  c->wds = 1;
  c->x[0] = 0;
  D.6874 = c;
  return D.6874;
  <D.6873>:
  if (i < 0) goto <D.6875>; else goto <D.6876>;
  <D.6875>:
  c = a;
  a = b;
  b = c;
  i = 1;
  goto <D.6877>;
  <D.6876>:
  i = 0;
  <D.6877>:
  D.6878 = a->k;
  c = Balloc (D.6878);
  c->sign = i;
  wa = a->wds;
  xa = &a->x;
  D.6879 = (long unsigned int) wa;
  D.6880 = D.6879 * 4;
  xae = xa + D.6880;
  wb = b->wds;
  xb = &b->x;
  D.6881 = (long unsigned int) wb;
  D.6882 = D.6881 * 4;
  xbe = xb + D.6882;
  xc = &c->x;
  borrow = 0;
  <D.6194>:
  xa.36 = xa;
  xa = xa.36 + 4;
  D.6884 = *xa.36;
  D.6885 = (long long unsigned int) D.6884;
  xb.37 = xb;
  xb = xb.37 + 4;
  D.6887 = *xb.37;
  D.6888 = (long long unsigned int) D.6887;
  D.6889 = D.6885 - D.6888;
  y = D.6889 - borrow;
  D.6890 = y >> 32;
  borrow = D.6890 & 1;
  xc.38 = xc;
  xc = xc.38 + 4;
  D.6892 = (unsigned int) y;
  *xc.38 = D.6892;
  if (xb < xbe) goto <D.6194>; else goto <D.6195>;
  <D.6195>:
  goto <D.6197>;
  <D.6196>:
  xa.39 = xa;
  xa = xa.39 + 4;
  D.6894 = *xa.39;
  D.6895 = (long long unsigned int) D.6894;
  y = D.6895 - borrow;
  D.6890 = y >> 32;
  borrow = D.6890 & 1;
  xc.40 = xc;
  xc = xc.40 + 4;
  D.6892 = (unsigned int) y;
  *xc.40 = D.6892;
  <D.6197>:
  if (xa < xae) goto <D.6196>; else goto <D.6198>;
  <D.6198>:
  goto <D.6200>;
  <D.6199>:
  wa = wa + -1;
  <D.6200>:
  xc = xc + 18446744073709551612;
  D.6897 = *xc;
  if (D.6897 == 0) goto <D.6199>; else goto <D.6201>;
  <D.6201>:
  c->wds = wa;
  D.6874 = c;
  return D.6874;
}


lshift (struct Bigint * b, int k)
{
  int D.6899;
  int D.6900;
  guint32 * x1.41;
  long unsigned int D.6902;
  long unsigned int D.6903;
  guint32 * x1.42;
  unsigned int D.6907;
  unsigned int D.6908;
  unsigned int D.6909;
  guint32 * x.43;
  unsigned int D.6911;
  unsigned int D.6912;
  guint32 * x1.44;
  guint32 * x.45;
  unsigned int D.6918;
  int D.6919;
  struct Bigint * D.6920;
  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.6899 = b->wds;
  D.6900 = D.6899 + n;
  n1 = D.6900 + 1;
  i = b->maxwds;
  goto <D.6158>;
  <D.6157>:
  k1 = k1 + 1;
  i = i << 1;
  <D.6158>:
  if (n1 > i) goto <D.6157>; else goto <D.6159>;
  <D.6159>:
  b1 = Balloc (k1);
  x1 = &b1->x;
  i = 0;
  goto <D.6161>;
  <D.6160>:
  x1.41 = x1;
  x1 = x1.41 + 4;
  *x1.41 = 0;
  i = i + 1;
  <D.6161>:
  if (i < n) goto <D.6160>; else goto <D.6162>;
  <D.6162>:
  x = &b->x;
  D.6899 = b->wds;
  D.6902 = (long unsigned int) D.6899;
  D.6903 = D.6902 * 4;
  xe = x + D.6903;
  k = k & 31;
  if (k != 0) goto <D.6904>; else goto <D.6905>;
  <D.6904>:
  k1 = 32 - k;
  z = 0;
  <D.6163>:
  x1.42 = x1;
  x1 = x1.42 + 4;
  D.6907 = *x;
  D.6908 = D.6907 << k;
  D.6909 = D.6908 | z;
  *x1.42 = D.6909;
  x.43 = x;
  x = x.43 + 4;
  D.6911 = *x.43;
  z = D.6911 >> k1;
  if (x < xe) goto <D.6163>; else goto <D.6164>;
  <D.6164>:
  *x1 = z;
  D.6912 = *x1;
  if (D.6912 != 0) goto <D.6913>; else goto <D.6914>;
  <D.6913>:
  n1 = n1 + 1;
  <D.6914>:
  goto <D.6915>;
  <D.6905>:
  <D.6165>:
  x1.44 = x1;
  x1 = x1.44 + 4;
  x.45 = x;
  x = x.45 + 4;
  D.6918 = *x.45;
  *x1.44 = D.6918;
  if (x < xe) goto <D.6165>; else goto <D.6166>;
  <D.6166>:
  <D.6915>:
  D.6919 = n1 + -1;
  b1->wds = D.6919;
  Bfree (b);
  D.6920 = b1;
  return D.6920;
}


cmp (struct Bigint * a, struct Bigint * b)
{
  int D.6924;
  long unsigned int D.6925;
  long unsigned int D.6926;
  unsigned int D.6927;
  unsigned int D.6928;
  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.6922>; else goto <D.6923>;
  <D.6922>:
  D.6924 = i;
  return D.6924;
  <D.6923>:
  xa0 = &a->x;
  D.6925 = (long unsigned int) j;
  D.6926 = D.6925 * 4;
  xa = xa0 + D.6926;
  xb0 = &b->x;
  D.6925 = (long unsigned int) j;
  D.6926 = D.6925 * 4;
  xb = xb0 + D.6926;
  <D.6178>:
  xa = xa + 18446744073709551612;
  D.6927 = *xa;
  xb = xb + 18446744073709551612;
  D.6928 = *xb;
  if (D.6927 != D.6928) goto <D.6929>; else goto <D.6930>;
  <D.6929>:
  D.6927 = *xa;
  D.6928 = *xb;
  if (D.6927 < D.6928) goto <D.6932>; else goto <D.6933>;
  <D.6932>:
  iftmp.46 = -1;
  goto <D.6934>;
  <D.6933>:
  iftmp.46 = 1;
  <D.6934>:
  D.6924 = iftmp.46;
  return D.6924;
  <D.6930>:
  if (xa <= xa0) goto <D.6177>; else goto <D.6935>;
  <D.6935>:
  goto <D.6178>;
  <D.6177>:
  D.6924 = 0;
  return D.6924;
}


ratio (struct Bigint * a, struct Bigint * b)
{
  double * da.47;
  double D.6938;
  double * db.48;
  double D.6940;
  int ka.49;
  int kb.50;
  int D.6943;
  int D.6944;
  int D.6945;
  int D.6946;
  int D.6947;
  unsigned int D.6950;
  int D.6951;
  unsigned int D.6952;
  unsigned int D.6953;
  unsigned int D.6955;
  unsigned int D.6956;
  double D.6957;
  double D.6958;
  double D.6959;
  double da;
  double db;
  int k;
  int ka;
  int kb;

  try
    {
      da.47 = &da;
      D.6938 = b2d (a, &ka);
      MEM[(union U *)da.47].d = D.6938;
      db.48 = &db;
      D.6940 = b2d (b, &kb);
      MEM[(union U *)db.48].d = D.6940;
      ka.49 = ka;
      kb.50 = kb;
      D.6943 = ka.49 - kb.50;
      D.6944 = a->wds;
      D.6945 = b->wds;
      D.6946 = D.6944 - D.6945;
      D.6947 = D.6946 * 32;
      k = D.6943 + D.6947;
      if (k > 0) goto <D.6948>; else goto <D.6949>;
      <D.6948>:
      da.47 = &da;
      da.47 = &da;
      D.6950 = MEM[(union U *)da.47].L[1];
      D.6951 = k * 1048576;
      D.6952 = (unsigned int) D.6951;
      D.6953 = D.6950 + D.6952;
      MEM[(union U *)da.47].L[1] = D.6953;
      goto <D.6954>;
      <D.6949>:
      k = -k;
      db.48 = &db;
      db.48 = &db;
      D.6955 = MEM[(union U *)db.48].L[1];
      D.6951 = k * 1048576;
      D.6952 = (unsigned int) D.6951;
      D.6956 = D.6955 + D.6952;
      MEM[(union U *)db.48].L[1] = D.6956;
      <D.6954>:
      da.47 = &da;
      D.6958 = MEM[(union U *)da.47].d;
      db.48 = &db;
      D.6959 = MEM[(union U *)db.48].d;
      D.6957 = D.6958 / D.6959;
      return D.6957;
    }
  finally
    {
      da = {CLOBBER};
      db = {CLOBBER};
      ka = {CLOBBER};
      kb = {CLOBBER};
    }
}


b2d (struct Bigint * a, int * e)
{
  int D.6962;
  long unsigned int D.6963;
  long unsigned int D.6964;
  int D.6965;
  double * d.51;
  int D.6969;
  unsigned int D.6970;
  unsigned int D.6971;
  guint32 iftmp.52;
  int D.6976;
  unsigned int D.6977;
  unsigned int D.6978;
  unsigned int D.6979;
  guint32 iftmp.53;
  unsigned int D.6986;
  unsigned int D.6987;
  unsigned int D.6988;
  unsigned int D.6989;
  guint32 iftmp.54;
  unsigned int D.6994;
  unsigned int D.6995;
  unsigned int D.6996;
  unsigned int D.6998;
  double D.6999;
  guint32 * xa;
  guint32 * xa0;
  guint32 w;
  guint32 y;
  guint32 z;
  int k;
  double d;
  void ret_d = <<< error >>>;

  try
    {
      xa0 = &a->x;
      D.6962 = a->wds;
      D.6963 = (long unsigned int) D.6962;
      D.6964 = D.6963 * 4;
      xa = xa0 + D.6964;
      xa = xa + 18446744073709551612;
      y = *xa;
      k = hi0bits (y);
      D.6965 = 32 - k;
      *e = D.6965;
      if (k <= 10) goto <D.6966>; else goto <D.6967>;
      <D.6966>:
      d.51 = &d;
      D.6969 = 11 - k;
      D.6970 = y >> D.6969;
      D.6971 = D.6970 | 1072693248;
      MEM[(union U *)d.51].L[1] = D.6971;
      if (xa > xa0) goto <D.6973>; else goto <D.6974>;
      <D.6973>:
      xa = xa + 18446744073709551612;
      iftmp.52 = *xa;
      goto <D.6975>;
      <D.6974>:
      iftmp.52 = 0;
      <D.6975>:
      w = iftmp.52;
      d.51 = &d;
      D.6976 = k + 21;
      D.6977 = y << D.6976;
      D.6969 = 11 - k;
      D.6978 = w >> D.6969;
      D.6979 = D.6977 | D.6978;
      MEM[(union U *)d.51].L[0] = D.6979;
      goto ret_d;
      <D.6967>:
      if (xa > xa0) goto <D.6981>; else goto <D.6982>;
      <D.6981>:
      xa = xa + 18446744073709551612;
      iftmp.53 = *xa;
      goto <D.6983>;
      <D.6982>:
      iftmp.53 = 0;
      <D.6983>:
      z = iftmp.53;
      k = k + -11;
      if (k != 0) goto <D.6984>; else goto <D.6985>;
      <D.6984>:
      d.51 = &d;
      D.6986 = y << k;
      D.6965 = 32 - k;
      D.6987 = z >> D.6965;
      D.6988 = D.6986 | D.6987;
      D.6989 = D.6988 | 1072693248;
      MEM[(union U *)d.51].L[1] = D.6989;
      if (xa > xa0) goto <D.6991>; else goto <D.6992>;
      <D.6991>:
      xa = xa + 18446744073709551612;
      iftmp.54 = *xa;
      goto <D.6993>;
      <D.6992>:
      iftmp.54 = 0;
      <D.6993>:
      y = iftmp.54;
      d.51 = &d;
      D.6994 = z << k;
      D.6965 = 32 - k;
      D.6995 = y >> D.6965;
      D.6996 = D.6994 | D.6995;
      MEM[(union U *)d.51].L[0] = D.6996;
      goto <D.6997>;
      <D.6985>:
      d.51 = &d;
      D.6998 = y | 1072693248;
      MEM[(union U *)d.51].L[1] = D.6998;
      d.51 = &d;
      MEM[(union U *)d.51].L[0] = z;
      <D.6997>:
      ret_d:
      d.51 = &d;
      D.6999 = MEM[(union U *)d.51].d;
      return D.6999;
    }
  finally
    {
      d = {CLOBBER};
    }
}


ulp (double x)
{
  double * x.55;
  unsigned int D.7003;
  unsigned int D.7004;
  unsigned int D.7005;
  double * a.56;
  unsigned int L.57;
  double D.7008;
  register gint32 L;
  double a;

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


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


