mono_is_power_of_two (guint32 val)
{
  unsigned int j.0;
  unsigned int D.24473;
  unsigned int k.1;
  unsigned int D.24479;
  int D.24480;
  int i;
  int j;
  int k;

  i = 0;
  j = 1;
  k = -2;
  goto <D.24336>;
  <D.24335>:
  j.0 = (unsigned int) j;
  D.24473 = val & j.0;
  if (D.24473 != 0) goto <D.24334>; else goto <D.24474>;
  <D.24474>:
  i = i + 1;
  j = j << 1;
  k = k << 1;
  <D.24336>:
  if (i <= 31) goto <D.24335>; else goto <D.24334>;
  <D.24334>:
  if (i == 32) goto <D.24475>; else goto <D.24477>;
  <D.24477>:
  k.1 = (unsigned int) k;
  D.24479 = val & k.1;
  if (D.24479 != 0) goto <D.24475>; else goto <D.24476>;
  <D.24475>:
  D.24480 = -1;
  return D.24480;
  <D.24476>:
  D.24480 = i;
  return D.24480;
}


mono_constant_fold_ins (struct MonoCompile * cfg, struct MonoInst * ins, struct MonoInst * arg1, struct MonoInst * arg2, gboolean overwrite)
{
  short unsigned int D.24484;
  int D.24485;
  short unsigned int D.24486;
  short unsigned int D.24489;
  struct MonoMemPool * D.24494;
  int D.24495;
  struct MonoInst * D.24496;
  int D.24497;
  int D.24498;
  const unsigned char * D.24499;
  int D.24500;
  int D.24501;
  int D.24502;
  int D.24503;
  int D.24504;
  int D.24505;
  int D.24506;
  int D.24507;
  int D.24512;
  int D.24517;
  short unsigned int D.24518;
  int D.24519;
  int D.24524;
  int D.24525;
  int D.24526;
  int D.24527;
  int D.24528;
  int D.24529;
  int D.24530;
  int D.24531;
  int D.24532;
  unsigned int D.24533;
  unsigned int D.24534;
  int D.24535;
  int D.24543;
  int D.24544;
  int D.24545;
  unsigned int D.24546;
  int D.24547;
  struct MonoInst * D.24557;
  int D.24560;
  unsigned int D.24561;
  unsigned int D.24562;
  int D.24563;
  int D.24564;
  unsigned int D.24565;
  int D.24566;
  int D.24576;
  unsigned int D.24577;
  unsigned int D.24578;
  int D.24579;
  int D.24580;
  unsigned int D.24581;
  int D.24582;
  int D.24589;
  int D.24590;
  struct MonoInst * D.24610;
  short unsigned int D.24613;
  int D.24614;
  _Bool D.24615;
  _Bool D.24616;
  _Bool D.24617;
  _Bool D.24618;
  _Bool D.24619;
  int D.24623;
  int D.24624;
  int D.24625;
  _Bool D.24629;
  _Bool D.24630;
  _Bool D.24631;
  _Bool D.24632;
  _Bool D.24633;
  unsigned char D.24639;
  unsigned char D.24640;
  unsigned char D.24642;
  struct MonoInst * D.24646;
  void * D.24655;
  struct MonoInst * dest;

  dest = 0B;
  if (overwrite != 0) goto <D.24482>; else goto <D.24483>;
  <D.24482>:
  dest = ins;
  <D.24483>:
  D.24484 = ins->opcode;
  D.24485 = (int) D.24484;
  switch (D.24485) <default: <D.24468>, case 322: <D.24414>, case 323: <D.24416>, case 326: <D.24415>, case 327: <D.24417>, case 424: <D.24411>, case 426: <D.24467>, case 427: <D.24412>, case 439: <D.24366>, case 565: <D.24346>, case 566: <D.24378>, case 567: <D.24345>, case 568: <D.24387>, case 569: <D.24388>, case 570: <D.24389>, case 571: <D.24390>, case 572: <D.24347>, case 573: <D.24348>, case 574: <D.24349>, case 575: <D.24379>, case 576: <D.24380>, case 577: <D.24381>, case 578: <D.24407>, case 579: <D.24406>, case 625: <D.24358>, case 626: <D.24362>, case 627: <D.24357>, case 628: <D.24396>, case 629: <D.24397>, case 630: <D.24398>, case 631: <D.24399>, case 632: <D.24359>, case 633: <D.24360>, case 634: <D.24361>, case 635: <D.24363>, case 636: <D.24364>, case 637: <D.24365>, case 800: <D.24413>>
  <D.24345>:
  <D.24346>:
  <D.24347>:
  <D.24348>:
  <D.24349>:
  D.24486 = arg2->opcode;
  if (D.24486 == 362) goto <D.24487>; else goto <D.24488>;
  <D.24487>:
  D.24489 = arg1->opcode;
  if (D.24489 == 362) goto <D.24490>; else goto <D.24491>;
  <D.24490>:
  if (dest == 0B) goto <D.24492>; else goto <D.24493>;
  <D.24492>:
  D.24494 = cfg->mempool;
  dest = mono_mempool_alloc (D.24494, 56);
  dest->data.op[1].const_val = 0;
  D.24495 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.24495;
  dest->prev = 0B;
  D.24496 = dest->prev;
  dest->next = D.24496;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  D.24499 = cfg->ip;
  dest->cil_code = D.24499;
  D.24500 = ins->dreg;
  dest->dreg = D.24500;
  <D.24493>:
  D.24484 = ins->opcode;
  D.24485 = (int) D.24484;
  switch (D.24485) <default: <D.24508>, case 565: <D.24352>, case 567: <D.24350>, case 572: <D.24353>, case 573: <D.24354>, case 574: <D.24355>>
  <D.24350>:
  D.24501 = arg1->data.op[0].const_val;
  D.24502 = arg2->data.op[0].const_val;
  D.24503 = D.24501 * D.24502;
  dest->data.op[0].const_val = D.24503;
  goto <D.24351>;
  <D.24352>:
  D.24501 = arg1->data.op[0].const_val;
  D.24502 = arg2->data.op[0].const_val;
  D.24504 = D.24501 + D.24502;
  dest->data.op[0].const_val = D.24504;
  goto <D.24351>;
  <D.24353>:
  D.24501 = arg1->data.op[0].const_val;
  D.24502 = arg2->data.op[0].const_val;
  D.24505 = D.24501 & D.24502;
  dest->data.op[0].const_val = D.24505;
  goto <D.24351>;
  <D.24354>:
  D.24501 = arg1->data.op[0].const_val;
  D.24502 = arg2->data.op[0].const_val;
  D.24506 = D.24501 | D.24502;
  dest->data.op[0].const_val = D.24506;
  goto <D.24351>;
  <D.24355>:
  D.24501 = arg1->data.op[0].const_val;
  D.24502 = arg2->data.op[0].const_val;
  D.24507 = D.24501 ^ D.24502;
  dest->data.op[0].const_val = D.24507;
  goto <D.24351>;
  <D.24508>:
  <D.24351>:
  dest->opcode = 362;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  <D.24491>:
  goto <D.24509>;
  <D.24488>:
  D.24489 = arg1->opcode;
  if (D.24489 == 362) goto <D.24510>; else goto <D.24511>;
  <D.24510>:
  D.24484 = ins->opcode;
  D.24485 = (int) D.24484;
  D.24512 = mono_op_to_op_imm (D.24485);
  if (D.24512 != -1) goto <D.24513>; else goto <D.24514>;
  <D.24513>:
  if (dest == 0B) goto <D.24515>; else goto <D.24516>;
  <D.24515>:
  D.24494 = cfg->mempool;
  dest = mono_mempool_alloc (D.24494, 56);
  dest->data.op[1].const_val = 0;
  D.24495 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.24495;
  dest->prev = 0B;
  D.24496 = dest->prev;
  dest->next = D.24496;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  D.24499 = cfg->ip;
  dest->cil_code = D.24499;
  D.24500 = ins->dreg;
  dest->dreg = D.24500;
  <D.24516>:
  D.24484 = ins->opcode;
  D.24485 = (int) D.24484;
  D.24517 = mono_op_to_op_imm (D.24485);
  D.24518 = (short unsigned int) D.24517;
  dest->opcode = D.24518;
  D.24519 = ins->sreg2;
  dest->sreg1 = D.24519;
  dest->sreg2 = -1;
  D.24501 = arg1->data.op[0].const_val;
  dest->data.op[1].const_val = D.24501;
  <D.24514>:
  <D.24511>:
  <D.24509>:
  goto <D.24356>;
  <D.24357>:
  <D.24358>:
  <D.24359>:
  <D.24360>:
  <D.24361>:
  <D.24362>:
  <D.24363>:
  <D.24364>:
  <D.24365>:
  <D.24366>:
  D.24489 = arg1->opcode;
  if (D.24489 == 362) goto <D.24520>; else goto <D.24521>;
  <D.24520>:
  if (dest == 0B) goto <D.24522>; else goto <D.24523>;
  <D.24522>:
  D.24494 = cfg->mempool;
  dest = mono_mempool_alloc (D.24494, 56);
  dest->data.op[1].const_val = 0;
  D.24495 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.24495;
  dest->prev = 0B;
  D.24496 = dest->prev;
  dest->next = D.24496;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  D.24499 = cfg->ip;
  dest->cil_code = D.24499;
  D.24500 = ins->dreg;
  dest->dreg = D.24500;
  <D.24523>:
  D.24484 = ins->opcode;
  D.24485 = (int) D.24484;
  switch (D.24485) <default: <D.24536>, case 439: <D.24377>, case 625: <D.24369>, case 626: <D.24373>, case 627: <D.24367>, case 632: <D.24370>, case 633: <D.24371>, case 634: <D.24372>, case 635: <D.24374>, case 636: <D.24375>, case 637: <D.24376>>
  <D.24367>:
  D.24501 = arg1->data.op[0].const_val;
  D.24524 = ins->data.op[1].const_val;
  D.24525 = D.24501 * D.24524;
  dest->data.op[0].const_val = D.24525;
  goto <D.24368>;
  <D.24369>:
  D.24501 = arg1->data.op[0].const_val;
  D.24524 = ins->data.op[1].const_val;
  D.24526 = D.24501 + D.24524;
  dest->data.op[0].const_val = D.24526;
  goto <D.24368>;
  <D.24370>:
  D.24501 = arg1->data.op[0].const_val;
  D.24524 = ins->data.op[1].const_val;
  D.24527 = D.24501 & D.24524;
  dest->data.op[0].const_val = D.24527;
  goto <D.24368>;
  <D.24371>:
  D.24501 = arg1->data.op[0].const_val;
  D.24524 = ins->data.op[1].const_val;
  D.24528 = D.24501 | D.24524;
  dest->data.op[0].const_val = D.24528;
  goto <D.24368>;
  <D.24372>:
  D.24501 = arg1->data.op[0].const_val;
  D.24524 = ins->data.op[1].const_val;
  D.24529 = D.24501 ^ D.24524;
  dest->data.op[0].const_val = D.24529;
  goto <D.24368>;
  <D.24373>:
  D.24501 = arg1->data.op[0].const_val;
  D.24524 = ins->data.op[1].const_val;
  D.24530 = D.24501 - D.24524;
  dest->data.op[0].const_val = D.24530;
  goto <D.24368>;
  <D.24374>:
  D.24501 = arg1->data.op[0].const_val;
  D.24524 = ins->data.op[1].const_val;
  D.24531 = D.24501 << D.24524;
  dest->data.op[0].const_val = D.24531;
  goto <D.24368>;
  <D.24375>:
  D.24501 = arg1->data.op[0].const_val;
  D.24524 = ins->data.op[1].const_val;
  D.24532 = D.24501 >> D.24524;
  dest->data.op[0].const_val = D.24532;
  goto <D.24368>;
  <D.24376>:
  D.24501 = arg1->data.op[0].const_val;
  D.24533 = (unsigned int) D.24501;
  D.24524 = ins->data.op[1].const_val;
  D.24534 = D.24533 >> D.24524;
  D.24535 = (int) D.24534;
  dest->data.op[0].const_val = D.24535;
  goto <D.24368>;
  <D.24377>:
  D.24501 = arg1->data.op[0].const_val;
  D.24524 = ins->data.op[1].const_val;
  D.24531 = D.24501 << D.24524;
  dest->data.op[0].const_val = D.24531;
  goto <D.24368>;
  <D.24536>:
  <D.24368>:
  dest->opcode = 362;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  <D.24521>:
  goto <D.24356>;
  <D.24378>:
  <D.24379>:
  <D.24380>:
  <D.24381>:
  D.24489 = arg1->opcode;
  if (D.24489 == 362) goto <D.24537>; else goto <D.24538>;
  <D.24537>:
  D.24486 = arg2->opcode;
  if (D.24486 == 362) goto <D.24539>; else goto <D.24540>;
  <D.24539>:
  if (dest == 0B) goto <D.24541>; else goto <D.24542>;
  <D.24541>:
  D.24494 = cfg->mempool;
  dest = mono_mempool_alloc (D.24494, 56);
  dest->data.op[1].const_val = 0;
  D.24495 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.24495;
  dest->prev = 0B;
  D.24496 = dest->prev;
  dest->next = D.24496;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  D.24499 = cfg->ip;
  dest->cil_code = D.24499;
  D.24500 = ins->dreg;
  dest->dreg = D.24500;
  <D.24542>:
  D.24484 = ins->opcode;
  D.24485 = (int) D.24484;
  switch (D.24485) <default: <D.24548>, case 566: <D.24382>, case 575: <D.24384>, case 576: <D.24385>, case 577: <D.24386>>
  <D.24382>:
  D.24501 = arg1->data.op[0].const_val;
  D.24502 = arg2->data.op[0].const_val;
  D.24543 = D.24501 - D.24502;
  dest->data.op[0].const_val = D.24543;
  goto <D.24383>;
  <D.24384>:
  D.24501 = arg1->data.op[0].const_val;
  D.24502 = arg2->data.op[0].const_val;
  D.24544 = D.24501 << D.24502;
  dest->data.op[0].const_val = D.24544;
  goto <D.24383>;
  <D.24385>:
  D.24501 = arg1->data.op[0].const_val;
  D.24502 = arg2->data.op[0].const_val;
  D.24545 = D.24501 >> D.24502;
  dest->data.op[0].const_val = D.24545;
  goto <D.24383>;
  <D.24386>:
  D.24501 = arg1->data.op[0].const_val;
  D.24533 = (unsigned int) D.24501;
  D.24502 = arg2->data.op[0].const_val;
  D.24546 = D.24533 >> D.24502;
  D.24547 = (int) D.24546;
  dest->data.op[0].const_val = D.24547;
  goto <D.24383>;
  <D.24548>:
  <D.24383>:
  dest->opcode = 362;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  <D.24540>:
  <D.24538>:
  goto <D.24356>;
  <D.24387>:
  <D.24388>:
  <D.24389>:
  <D.24390>:
  D.24489 = arg1->opcode;
  if (D.24489 == 362) goto <D.24549>; else goto <D.24550>;
  <D.24549>:
  D.24486 = arg2->opcode;
  if (D.24486 == 362) goto <D.24551>; else goto <D.24552>;
  <D.24551>:
  D.24502 = arg2->data.op[0].const_val;
  if (D.24502 == 0) goto <D.24553>; else goto <D.24555>;
  <D.24555>:
  D.24501 = arg1->data.op[0].const_val;
  if (D.24501 == -2147483648) goto <D.24556>; else goto <D.24554>;
  <D.24556>:
  D.24502 = arg2->data.op[0].const_val;
  if (D.24502 == -1) goto <D.24553>; else goto <D.24554>;
  <D.24553>:
  D.24557 = 0B;
  return D.24557;
  <D.24554>:
  if (dest == 0B) goto <D.24558>; else goto <D.24559>;
  <D.24558>:
  D.24494 = cfg->mempool;
  dest = mono_mempool_alloc (D.24494, 56);
  dest->data.op[1].const_val = 0;
  D.24495 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.24495;
  dest->prev = 0B;
  D.24496 = dest->prev;
  dest->next = D.24496;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  D.24499 = cfg->ip;
  dest->cil_code = D.24499;
  D.24500 = ins->dreg;
  dest->dreg = D.24500;
  <D.24559>:
  D.24484 = ins->opcode;
  D.24485 = (int) D.24484;
  switch (D.24485) <default: <D.24567>, case 568: <D.24391>, case 569: <D.24393>, case 570: <D.24394>, case 571: <D.24395>>
  <D.24391>:
  D.24501 = arg1->data.op[0].const_val;
  D.24502 = arg2->data.op[0].const_val;
  D.24560 = D.24501 / D.24502;
  dest->data.op[0].const_val = D.24560;
  goto <D.24392>;
  <D.24393>:
  D.24501 = arg1->data.op[0].const_val;
  D.24533 = (unsigned int) D.24501;
  D.24502 = arg2->data.op[0].const_val;
  D.24561 = (unsigned int) D.24502;
  D.24562 = D.24533 / D.24561;
  D.24563 = (int) D.24562;
  dest->data.op[0].const_val = D.24563;
  goto <D.24392>;
  <D.24394>:
  D.24501 = arg1->data.op[0].const_val;
  D.24502 = arg2->data.op[0].const_val;
  D.24564 = D.24501 % D.24502;
  dest->data.op[0].const_val = D.24564;
  goto <D.24392>;
  <D.24395>:
  D.24501 = arg1->data.op[0].const_val;
  D.24533 = (unsigned int) D.24501;
  D.24502 = arg2->data.op[0].const_val;
  D.24561 = (unsigned int) D.24502;
  D.24565 = D.24533 % D.24561;
  D.24566 = (int) D.24565;
  dest->data.op[0].const_val = D.24566;
  goto <D.24392>;
  <D.24567>:
  <D.24392>:
  dest->opcode = 362;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  <D.24552>:
  <D.24550>:
  goto <D.24356>;
  <D.24396>:
  <D.24397>:
  <D.24398>:
  <D.24399>:
  D.24489 = arg1->opcode;
  if (D.24489 == 362) goto <D.24568>; else goto <D.24569>;
  <D.24568>:
  D.24524 = ins->data.op[1].const_val;
  if (D.24524 == 0) goto <D.24570>; else goto <D.24572>;
  <D.24572>:
  D.24501 = arg1->data.op[0].const_val;
  if (D.24501 == -2147483648) goto <D.24573>; else goto <D.24571>;
  <D.24573>:
  D.24524 = ins->data.op[1].const_val;
  if (D.24524 == -1) goto <D.24570>; else goto <D.24571>;
  <D.24570>:
  D.24557 = 0B;
  return D.24557;
  <D.24571>:
  if (dest == 0B) goto <D.24574>; else goto <D.24575>;
  <D.24574>:
  D.24494 = cfg->mempool;
  dest = mono_mempool_alloc (D.24494, 56);
  dest->data.op[1].const_val = 0;
  D.24495 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.24495;
  dest->prev = 0B;
  D.24496 = dest->prev;
  dest->next = D.24496;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  D.24499 = cfg->ip;
  dest->cil_code = D.24499;
  D.24500 = ins->dreg;
  dest->dreg = D.24500;
  <D.24575>:
  D.24484 = ins->opcode;
  D.24485 = (int) D.24484;
  switch (D.24485) <default: <D.24405>, case 628: <D.24400>, case 629: <D.24402>, case 630: <D.24403>, case 631: <D.24404>>
  <D.24400>:
  D.24501 = arg1->data.op[0].const_val;
  D.24524 = ins->data.op[1].const_val;
  D.24576 = D.24501 / D.24524;
  dest->data.op[0].const_val = D.24576;
  goto <D.24401>;
  <D.24402>:
  D.24501 = arg1->data.op[0].const_val;
  D.24533 = (unsigned int) D.24501;
  D.24524 = ins->data.op[1].const_val;
  D.24577 = (unsigned int) D.24524;
  D.24578 = D.24533 / D.24577;
  D.24579 = (int) D.24578;
  dest->data.op[0].const_val = D.24579;
  goto <D.24401>;
  <D.24403>:
  D.24501 = arg1->data.op[0].const_val;
  D.24524 = ins->data.op[1].const_val;
  D.24580 = D.24501 % D.24524;
  dest->data.op[0].const_val = D.24580;
  goto <D.24401>;
  <D.24404>:
  D.24501 = arg1->data.op[0].const_val;
  D.24533 = (unsigned int) D.24501;
  D.24524 = ins->data.op[1].const_val;
  D.24577 = (unsigned int) D.24524;
  D.24581 = D.24533 % D.24577;
  D.24582 = (int) D.24581;
  dest->data.op[0].const_val = D.24582;
  goto <D.24401>;
  <D.24405>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "cfold.c", 199);
  <D.24401>:
  dest->opcode = 362;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  <D.24569>:
  goto <D.24356>;
  <D.24406>:
  <D.24407>:
  D.24489 = arg1->opcode;
  if (D.24489 == 362) goto <D.24583>; else goto <D.24584>;
  <D.24583>:
  D.24484 = ins->opcode;
  if (D.24484 == 578) goto <D.24585>; else goto <D.24586>;
  <D.24585>:
  D.24557 = 0B;
  return D.24557;
  <D.24586>:
  if (dest == 0B) goto <D.24587>; else goto <D.24588>;
  <D.24587>:
  D.24494 = cfg->mempool;
  dest = mono_mempool_alloc (D.24494, 56);
  dest->data.op[1].const_val = 0;
  D.24495 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.24495;
  dest->prev = 0B;
  D.24496 = dest->prev;
  dest->next = D.24496;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  D.24499 = cfg->ip;
  dest->cil_code = D.24499;
  D.24500 = ins->dreg;
  dest->dreg = D.24500;
  <D.24588>:
  D.24484 = ins->opcode;
  D.24485 = (int) D.24484;
  switch (D.24485) <default: <D.24591>, case 578: <D.24408>, case 579: <D.24410>>
  <D.24408>:
  D.24501 = arg1->data.op[0].const_val;
  D.24589 = -D.24501;
  dest->data.op[0].const_val = D.24589;
  goto <D.24409>;
  <D.24410>:
  D.24501 = arg1->data.op[0].const_val;
  D.24590 = ~D.24501;
  dest->data.op[0].const_val = D.24590;
  goto <D.24409>;
  <D.24591>:
  <D.24409>:
  dest->opcode = 362;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  <D.24584>:
  goto <D.24356>;
  <D.24411>:
  D.24489 = arg1->opcode;
  if (D.24489 == 362) goto <D.24592>; else goto <D.24593>;
  <D.24592>:
  if (dest == 0B) goto <D.24594>; else goto <D.24595>;
  <D.24594>:
  D.24494 = cfg->mempool;
  dest = mono_mempool_alloc (D.24494, 56);
  dest->data.op[1].const_val = 0;
  D.24495 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.24495;
  dest->prev = 0B;
  D.24496 = dest->prev;
  dest->next = D.24496;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  D.24499 = cfg->ip;
  dest->cil_code = D.24499;
  D.24500 = ins->dreg;
  dest->dreg = D.24500;
  <D.24595>:
  D.24489 = arg1->opcode;
  dest->opcode = D.24489;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  D.24501 = arg1->data.op[0].const_val;
  dest->data.op[0].const_val = D.24501;
  <D.24593>:
  goto <D.24356>;
  <D.24412>:
  D.24489 = arg1->opcode;
  if (D.24489 == 428) goto <D.24596>; else goto <D.24597>;
  <D.24596>:
  if (dest == 0B) goto <D.24598>; else goto <D.24599>;
  <D.24598>:
  D.24494 = cfg->mempool;
  dest = mono_mempool_alloc (D.24494, 56);
  dest->data.op[1].const_val = 0;
  D.24495 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.24495;
  dest->prev = 0B;
  D.24496 = dest->prev;
  dest->next = D.24496;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  D.24499 = cfg->ip;
  dest->cil_code = D.24499;
  D.24500 = ins->dreg;
  dest->dreg = D.24500;
  <D.24599>:
  dest->opcode = 428;
  dest->sreg1 = -1;
  <D.24597>:
  goto <D.24356>;
  <D.24413>:
  D.24489 = arg1->opcode;
  if (D.24489 == 801) goto <D.24600>; else goto <D.24601>;
  <D.24600>:
  if (dest == 0B) goto <D.24602>; else goto <D.24603>;
  <D.24602>:
  D.24494 = cfg->mempool;
  dest = mono_mempool_alloc (D.24494, 56);
  dest->data.op[1].const_val = 0;
  D.24495 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.24495;
  dest->prev = 0B;
  D.24496 = dest->prev;
  dest->next = D.24496;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  D.24499 = cfg->ip;
  dest->cil_code = D.24499;
  D.24500 = ins->dreg;
  dest->dreg = D.24500;
  <D.24603>:
  dest->opcode = 801;
  dest->sreg1 = -1;
  <D.24601>:
  goto <D.24356>;
  <D.24414>:
  <D.24415>:
  <D.24416>:
  <D.24417>:
  {
    struct MonoInst dummy_arg2;

    try
      {
        D.24519 = ins->sreg2;
        if (D.24519 == -1) goto <D.24604>; else goto <D.24605>;
        <D.24604>:
        arg2 = &dummy_arg2;
        arg2->opcode = 362;
        D.24524 = ins->data.op[1].const_val;
        arg2->data.op[0].const_val = D.24524;
        <D.24605>:
        D.24489 = arg1->opcode;
        if (D.24489 == 362) goto <D.24606>; else goto <D.24607>;
        <D.24606>:
        D.24486 = arg2->opcode;
        if (D.24486 == 362) goto <D.24608>; else goto <D.24609>;
        <D.24608>:
        D.24610 = ins->next;
        if (D.24610 != 0B) goto <D.24611>; else goto <D.24612>;
        <D.24611>:
        {
          struct MonoInst * next;
          gboolean res;

          next = ins->next;
          res = 0;
          D.24613 = next->opcode;
          D.24614 = (int) D.24613;
          switch (D.24614) <default: <D.24466>, case 316: <D.24464>, case 442: <D.24465>, case 446: <D.24421>, case 447: <D.24423>, case 448: <D.24425>, case 449: <D.24427>, case 450: <D.24429>, case 638: <D.24422>, case 639: <D.24424>, case 640: <D.24426>, case 641: <D.24428>, case 642: <D.24430>, case 648: <D.24443>, case 649: <D.24447>, case 650: <D.24445>, case 651: <D.24451>, case 652: <D.24449>, case 653: <D.24444>, case 654: <D.24448>, case 655: <D.24446>, case 656: <D.24452>, case 657: <D.24450>>
          <D.24421>:
          <D.24422>:
          <D.24423>:
          <D.24424>:
          <D.24425>:
          <D.24426>:
          <D.24427>:
          <D.24428>:
          <D.24429>:
          <D.24430>:
          D.24613 = next->opcode;
          D.24614 = (int) D.24613;
          switch (D.24614) <default: <D.24620>, case 446: <D.24431>, case 447: <D.24434>, case 448: <D.24436>, case 449: <D.24438>, case 450: <D.24440>, case 638: <D.24433>, case 639: <D.24435>, case 640: <D.24437>, case 641: <D.24439>, case 642: <D.24441>>
          <D.24431>:
          D.24501 = arg1->data.op[0].const_val;
          D.24502 = arg2->data.op[0].const_val;
          D.24615 = D.24501 == D.24502;
          res = (gboolean) D.24615;
          goto <D.24432>;
          <D.24433>:
          D.24501 = arg1->data.op[0].const_val;
          D.24502 = arg2->data.op[0].const_val;
          D.24615 = D.24501 == D.24502;
          res = (gboolean) D.24615;
          goto <D.24432>;
          <D.24434>:
          D.24501 = arg1->data.op[0].const_val;
          D.24502 = arg2->data.op[0].const_val;
          D.24616 = D.24501 > D.24502;
          res = (gboolean) D.24616;
          goto <D.24432>;
          <D.24435>:
          D.24501 = arg1->data.op[0].const_val;
          D.24502 = arg2->data.op[0].const_val;
          D.24616 = D.24501 > D.24502;
          res = (gboolean) D.24616;
          goto <D.24432>;
          <D.24436>:
          D.24501 = arg1->data.op[0].const_val;
          D.24533 = (unsigned int) D.24501;
          D.24502 = arg2->data.op[0].const_val;
          D.24561 = (unsigned int) D.24502;
          D.24617 = D.24533 > D.24561;
          res = (gboolean) D.24617;
          goto <D.24432>;
          <D.24437>:
          D.24501 = arg1->data.op[0].const_val;
          D.24533 = (unsigned int) D.24501;
          D.24502 = arg2->data.op[0].const_val;
          D.24561 = (unsigned int) D.24502;
          D.24617 = D.24533 > D.24561;
          res = (gboolean) D.24617;
          goto <D.24432>;
          <D.24438>:
          D.24501 = arg1->data.op[0].const_val;
          D.24502 = arg2->data.op[0].const_val;
          D.24618 = D.24501 < D.24502;
          res = (gboolean) D.24618;
          goto <D.24432>;
          <D.24439>:
          D.24501 = arg1->data.op[0].const_val;
          D.24502 = arg2->data.op[0].const_val;
          D.24618 = D.24501 < D.24502;
          res = (gboolean) D.24618;
          goto <D.24432>;
          <D.24440>:
          D.24501 = arg1->data.op[0].const_val;
          D.24533 = (unsigned int) D.24501;
          D.24502 = arg2->data.op[0].const_val;
          D.24561 = (unsigned int) D.24502;
          D.24619 = D.24533 < D.24561;
          res = (gboolean) D.24619;
          goto <D.24432>;
          <D.24441>:
          D.24501 = arg1->data.op[0].const_val;
          D.24533 = (unsigned int) D.24501;
          D.24502 = arg2->data.op[0].const_val;
          D.24561 = (unsigned int) D.24502;
          D.24619 = D.24533 < D.24561;
          res = (gboolean) D.24619;
          goto <D.24432>;
          <D.24620>:
          <D.24432>:
          if (overwrite != 0) goto <D.24621>; else goto <D.24622>;
          <D.24621>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.24623 = ins->sreg3;
          ins->sreg2 = D.24623;
          D.24519 = ins->sreg2;
          ins->sreg1 = D.24519;
          next->opcode = 362;
          next->data.op[0].const_val = res;
          next->sreg3 = -1;
          D.24624 = next->sreg3;
          next->sreg2 = D.24624;
          D.24625 = next->sreg2;
          next->sreg1 = D.24625;
          goto <D.24626>;
          <D.24622>:
          if (dest == 0B) goto <D.24627>; else goto <D.24628>;
          <D.24627>:
          D.24494 = cfg->mempool;
          dest = mono_mempool_alloc (D.24494, 56);
          dest->data.op[1].const_val = 0;
          D.24495 = dest->data.op[1].const_val;
          dest->data.op[0].const_val = D.24495;
          dest->prev = 0B;
          D.24496 = dest->prev;
          dest->next = D.24496;
          dest->opcode = 65535;
          dest->flags = 0;
          dest->type = 0;
          dest->dreg = -1;
          dest->sreg3 = -1;
          D.24497 = dest->sreg3;
          dest->sreg2 = D.24497;
          D.24498 = dest->sreg2;
          dest->sreg1 = D.24498;
          D.24499 = cfg->ip;
          dest->cil_code = D.24499;
          D.24500 = ins->dreg;
          dest->dreg = D.24500;
          <D.24628>:
          dest->opcode = 362;
          dest->data.op[0].const_val = res;
          <D.24626>:
          goto <D.24442>;
          <D.24443>:
          <D.24444>:
          <D.24445>:
          <D.24446>:
          <D.24447>:
          <D.24448>:
          <D.24449>:
          <D.24450>:
          <D.24451>:
          <D.24452>:
          D.24613 = next->opcode;
          D.24614 = (int) D.24613;
          switch (D.24614) <default: <D.24634>, case 648: <D.24453>, case 649: <D.24458>, case 650: <D.24456>, case 651: <D.24462>, case 652: <D.24460>, case 653: <D.24455>, case 654: <D.24459>, case 655: <D.24457>, case 656: <D.24463>, case 657: <D.24461>>
          <D.24453>:
          D.24501 = arg1->data.op[0].const_val;
          D.24502 = arg2->data.op[0].const_val;
          D.24615 = D.24501 == D.24502;
          res = (gboolean) D.24615;
          goto <D.24454>;
          <D.24455>:
          D.24501 = arg1->data.op[0].const_val;
          D.24502 = arg2->data.op[0].const_val;
          D.24629 = D.24501 != D.24502;
          res = (gboolean) D.24629;
          goto <D.24454>;
          <D.24456>:
          D.24501 = arg1->data.op[0].const_val;
          D.24502 = arg2->data.op[0].const_val;
          D.24616 = D.24501 > D.24502;
          res = (gboolean) D.24616;
          goto <D.24454>;
          <D.24457>:
          D.24501 = arg1->data.op[0].const_val;
          D.24533 = (unsigned int) D.24501;
          D.24502 = arg2->data.op[0].const_val;
          D.24561 = (unsigned int) D.24502;
          D.24617 = D.24533 > D.24561;
          res = (gboolean) D.24617;
          goto <D.24454>;
          <D.24458>:
          D.24501 = arg1->data.op[0].const_val;
          D.24502 = arg2->data.op[0].const_val;
          D.24630 = D.24501 >= D.24502;
          res = (gboolean) D.24630;
          goto <D.24454>;
          <D.24459>:
          D.24501 = arg1->data.op[0].const_val;
          D.24533 = (unsigned int) D.24501;
          D.24502 = arg2->data.op[0].const_val;
          D.24561 = (unsigned int) D.24502;
          D.24631 = D.24533 >= D.24561;
          res = (gboolean) D.24631;
          goto <D.24454>;
          <D.24460>:
          D.24501 = arg1->data.op[0].const_val;
          D.24502 = arg2->data.op[0].const_val;
          D.24618 = D.24501 < D.24502;
          res = (gboolean) D.24618;
          goto <D.24454>;
          <D.24461>:
          D.24501 = arg1->data.op[0].const_val;
          D.24533 = (unsigned int) D.24501;
          D.24502 = arg2->data.op[0].const_val;
          D.24561 = (unsigned int) D.24502;
          D.24619 = D.24533 < D.24561;
          res = (gboolean) D.24619;
          goto <D.24454>;
          <D.24462>:
          D.24501 = arg1->data.op[0].const_val;
          D.24502 = arg2->data.op[0].const_val;
          D.24632 = D.24501 <= D.24502;
          res = (gboolean) D.24632;
          goto <D.24454>;
          <D.24463>:
          D.24501 = arg1->data.op[0].const_val;
          D.24533 = (unsigned int) D.24501;
          D.24502 = arg2->data.op[0].const_val;
          D.24561 = (unsigned int) D.24502;
          D.24633 = D.24533 <= D.24561;
          res = (gboolean) D.24633;
          goto <D.24454>;
          <D.24634>:
          <D.24454>:
          if (overwrite != 0) goto <D.24635>; else goto <D.24636>;
          <D.24635>:
          if (res != 0) goto <D.24637>; else goto <D.24638>;
          <D.24637>:
          D.24639 = next->flags;
          D.24640 = D.24639 | 8;
          next->flags = D.24640;
          goto <D.24641>;
          <D.24638>:
          D.24639 = next->flags;
          D.24642 = D.24639 | 16;
          next->flags = D.24642;
          <D.24641>:
          goto <D.24643>;
          <D.24636>:
          if (dest == 0B) goto <D.24644>; else goto <D.24645>;
          <D.24644>:
          D.24494 = cfg->mempool;
          dest = mono_mempool_alloc (D.24494, 56);
          dest->data.op[1].const_val = 0;
          D.24495 = dest->data.op[1].const_val;
          dest->data.op[0].const_val = D.24495;
          dest->prev = 0B;
          D.24496 = dest->prev;
          dest->next = D.24496;
          dest->opcode = 65535;
          dest->flags = 0;
          dest->type = 0;
          dest->dreg = -1;
          dest->sreg3 = -1;
          D.24497 = dest->sreg3;
          dest->sreg2 = D.24497;
          D.24498 = dest->sreg2;
          dest->sreg1 = D.24498;
          D.24499 = cfg->ip;
          dest->cil_code = D.24499;
          D.24500 = ins->dreg;
          dest->dreg = D.24500;
          <D.24645>:
          dest->opcode = 362;
          dest->data.op[0].const_val = res;
          <D.24643>:
          goto <D.24442>;
          <D.24464>:
          <D.24465>:
          D.24646 = next->next;
          if (D.24646 == 0B) goto <D.24647>; else goto <D.24648>;
          <D.24647>:
          if (overwrite != 0) goto <D.24649>; else goto <D.24650>;
          <D.24649>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.24623 = ins->sreg3;
          ins->sreg2 = D.24623;
          D.24519 = ins->sreg2;
          ins->sreg1 = D.24519;
          <D.24650>:
          <D.24648>:
          goto <D.24442>;
          <D.24466>:
          D.24557 = 0B;
          return D.24557;
          <D.24442>:
        }
        <D.24612>:
        <D.24609>:
        <D.24607>:
        goto <D.24356>;
      }
    finally
      {
        dummy_arg2 = {CLOBBER};
      }
  }
  <D.24467>:
  D.24489 = arg1->opcode;
  if (D.24489 == 365) goto <D.24651>; else goto <D.24652>;
  <D.24651>:
  if (dest == 0B) goto <D.24653>; else goto <D.24654>;
  <D.24653>:
  D.24494 = cfg->mempool;
  dest = mono_mempool_alloc (D.24494, 56);
  dest->data.op[1].const_val = 0;
  D.24495 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.24495;
  dest->prev = 0B;
  D.24496 = dest->prev;
  dest->next = D.24496;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.24497 = dest->sreg3;
  dest->sreg2 = D.24497;
  D.24498 = dest->sreg2;
  dest->sreg1 = D.24498;
  D.24499 = cfg->ip;
  dest->cil_code = D.24499;
  D.24500 = ins->dreg;
  dest->dreg = D.24500;
  <D.24654>:
  dest->opcode = 365;
  dest->sreg1 = -1;
  D.24655 = arg1->data.op[0].p;
  dest->data.op[0].p = D.24655;
  <D.24652>:
  goto <D.24356>;
  <D.24468>:
  D.24557 = 0B;
  return D.24557;
  <D.24356>:
  D.24557 = dest;
  return D.24557;
}


