mono_is_power_of_two (guint32 val)
{
  unsigned int j.0;
  unsigned int D.21638;
  unsigned int k.1;
  unsigned int D.21644;
  int D.21645;
  int i;
  int j;
  int k;

  i = 0;
  j = 1;
  k = -2;
  goto <D.21503>;
  <D.21502>:
  j.0 = (unsigned int) j;
  D.21638 = val & j.0;
  if (D.21638 != 0) goto <D.21501>; else goto <D.21639>;
  <D.21639>:
  i = i + 1;
  j = j << 1;
  k = k << 1;
  <D.21503>:
  if (i <= 31) goto <D.21502>; else goto <D.21501>;
  <D.21501>:
  if (i == 32) goto <D.21640>; else goto <D.21642>;
  <D.21642>:
  k.1 = (unsigned int) k;
  D.21644 = val & k.1;
  if (D.21644 != 0) goto <D.21640>; else goto <D.21641>;
  <D.21640>:
  D.21645 = -1;
  return D.21645;
  <D.21641>:
  D.21645 = i;
  return D.21645;
}


mono_constant_fold_ins (struct MonoCompile * cfg, struct MonoInst * ins, struct MonoInst * arg1, struct MonoInst * arg2, gboolean overwrite)
{
  short unsigned int D.21649;
  int D.21650;
  short unsigned int D.21651;
  short unsigned int D.21654;
  struct MonoMemPool * D.21659;
  int D.21660;
  struct MonoInst * D.21661;
  int D.21662;
  int D.21663;
  const unsigned char * D.21664;
  int D.21665;
  int D.21666;
  int D.21667;
  int D.21668;
  int D.21669;
  int D.21670;
  int D.21671;
  int D.21672;
  int D.21677;
  int D.21682;
  short unsigned int D.21683;
  int D.21684;
  int D.21689;
  int D.21690;
  int D.21691;
  int D.21692;
  int D.21693;
  int D.21694;
  int D.21695;
  int D.21696;
  int D.21697;
  unsigned int D.21698;
  unsigned int D.21699;
  int D.21700;
  int D.21708;
  int D.21709;
  int D.21710;
  unsigned int D.21711;
  int D.21712;
  struct MonoInst * D.21722;
  int D.21725;
  unsigned int D.21726;
  unsigned int D.21727;
  int D.21728;
  int D.21729;
  unsigned int D.21730;
  int D.21731;
  int D.21741;
  unsigned int D.21742;
  unsigned int D.21743;
  int D.21744;
  int D.21745;
  unsigned int D.21746;
  int D.21747;
  int D.21754;
  int D.21755;
  struct MonoInst * D.21775;
  short unsigned int D.21778;
  int D.21779;
  _Bool D.21780;
  _Bool D.21781;
  _Bool D.21782;
  _Bool D.21783;
  _Bool D.21784;
  int D.21788;
  int D.21789;
  int D.21790;
  _Bool D.21794;
  _Bool D.21795;
  _Bool D.21796;
  _Bool D.21797;
  _Bool D.21798;
  unsigned char D.21804;
  unsigned char D.21805;
  unsigned char D.21807;
  struct MonoInst * D.21811;
  void * D.21820;
  struct MonoInst * dest;

  dest = 0B;
  if (overwrite != 0) goto <D.21647>; else goto <D.21648>;
  <D.21647>:
  dest = ins;
  <D.21648>:
  D.21649 = ins->opcode;
  D.21650 = (int) D.21649;
  switch (D.21650) <default: <D.21635>, case 322: <D.21581>, case 323: <D.21583>, case 326: <D.21582>, case 327: <D.21584>, case 424: <D.21578>, case 426: <D.21634>, case 427: <D.21579>, case 439: <D.21533>, case 565: <D.21513>, case 566: <D.21545>, case 567: <D.21512>, case 568: <D.21554>, case 569: <D.21555>, case 570: <D.21556>, case 571: <D.21557>, case 572: <D.21514>, case 573: <D.21515>, case 574: <D.21516>, case 575: <D.21546>, case 576: <D.21547>, case 577: <D.21548>, case 578: <D.21574>, case 579: <D.21573>, case 625: <D.21525>, case 626: <D.21529>, case 627: <D.21524>, case 628: <D.21563>, case 629: <D.21564>, case 630: <D.21565>, case 631: <D.21566>, case 632: <D.21526>, case 633: <D.21527>, case 634: <D.21528>, case 635: <D.21530>, case 636: <D.21531>, case 637: <D.21532>, case 800: <D.21580>>
  <D.21512>:
  <D.21513>:
  <D.21514>:
  <D.21515>:
  <D.21516>:
  D.21651 = arg2->opcode;
  if (D.21651 == 362) goto <D.21652>; else goto <D.21653>;
  <D.21652>:
  D.21654 = arg1->opcode;
  if (D.21654 == 362) goto <D.21655>; else goto <D.21656>;
  <D.21655>:
  if (dest == 0B) goto <D.21657>; else goto <D.21658>;
  <D.21657>:
  D.21659 = cfg->mempool;
  dest = mono_mempool_alloc (D.21659, 56);
  dest->data.op[1].const_val = 0;
  D.21660 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.21660;
  dest->prev = 0B;
  D.21661 = dest->prev;
  dest->next = D.21661;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  D.21664 = cfg->ip;
  dest->cil_code = D.21664;
  D.21665 = ins->dreg;
  dest->dreg = D.21665;
  <D.21658>:
  D.21649 = ins->opcode;
  D.21650 = (int) D.21649;
  switch (D.21650) <default: <D.21673>, case 565: <D.21519>, case 567: <D.21517>, case 572: <D.21520>, case 573: <D.21521>, case 574: <D.21522>>
  <D.21517>:
  D.21666 = arg1->data.op[0].const_val;
  D.21667 = arg2->data.op[0].const_val;
  D.21668 = D.21666 * D.21667;
  dest->data.op[0].const_val = D.21668;
  goto <D.21518>;
  <D.21519>:
  D.21666 = arg1->data.op[0].const_val;
  D.21667 = arg2->data.op[0].const_val;
  D.21669 = D.21666 + D.21667;
  dest->data.op[0].const_val = D.21669;
  goto <D.21518>;
  <D.21520>:
  D.21666 = arg1->data.op[0].const_val;
  D.21667 = arg2->data.op[0].const_val;
  D.21670 = D.21666 & D.21667;
  dest->data.op[0].const_val = D.21670;
  goto <D.21518>;
  <D.21521>:
  D.21666 = arg1->data.op[0].const_val;
  D.21667 = arg2->data.op[0].const_val;
  D.21671 = D.21666 | D.21667;
  dest->data.op[0].const_val = D.21671;
  goto <D.21518>;
  <D.21522>:
  D.21666 = arg1->data.op[0].const_val;
  D.21667 = arg2->data.op[0].const_val;
  D.21672 = D.21666 ^ D.21667;
  dest->data.op[0].const_val = D.21672;
  goto <D.21518>;
  <D.21673>:
  <D.21518>:
  dest->opcode = 362;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  <D.21656>:
  goto <D.21674>;
  <D.21653>:
  D.21654 = arg1->opcode;
  if (D.21654 == 362) goto <D.21675>; else goto <D.21676>;
  <D.21675>:
  D.21649 = ins->opcode;
  D.21650 = (int) D.21649;
  D.21677 = mono_op_to_op_imm (D.21650);
  if (D.21677 != -1) goto <D.21678>; else goto <D.21679>;
  <D.21678>:
  if (dest == 0B) goto <D.21680>; else goto <D.21681>;
  <D.21680>:
  D.21659 = cfg->mempool;
  dest = mono_mempool_alloc (D.21659, 56);
  dest->data.op[1].const_val = 0;
  D.21660 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.21660;
  dest->prev = 0B;
  D.21661 = dest->prev;
  dest->next = D.21661;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  D.21664 = cfg->ip;
  dest->cil_code = D.21664;
  D.21665 = ins->dreg;
  dest->dreg = D.21665;
  <D.21681>:
  D.21649 = ins->opcode;
  D.21650 = (int) D.21649;
  D.21682 = mono_op_to_op_imm (D.21650);
  D.21683 = (short unsigned int) D.21682;
  dest->opcode = D.21683;
  D.21684 = ins->sreg2;
  dest->sreg1 = D.21684;
  dest->sreg2 = -1;
  D.21666 = arg1->data.op[0].const_val;
  dest->data.op[1].const_val = D.21666;
  <D.21679>:
  <D.21676>:
  <D.21674>:
  goto <D.21523>;
  <D.21524>:
  <D.21525>:
  <D.21526>:
  <D.21527>:
  <D.21528>:
  <D.21529>:
  <D.21530>:
  <D.21531>:
  <D.21532>:
  <D.21533>:
  D.21654 = arg1->opcode;
  if (D.21654 == 362) goto <D.21685>; else goto <D.21686>;
  <D.21685>:
  if (dest == 0B) goto <D.21687>; else goto <D.21688>;
  <D.21687>:
  D.21659 = cfg->mempool;
  dest = mono_mempool_alloc (D.21659, 56);
  dest->data.op[1].const_val = 0;
  D.21660 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.21660;
  dest->prev = 0B;
  D.21661 = dest->prev;
  dest->next = D.21661;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  D.21664 = cfg->ip;
  dest->cil_code = D.21664;
  D.21665 = ins->dreg;
  dest->dreg = D.21665;
  <D.21688>:
  D.21649 = ins->opcode;
  D.21650 = (int) D.21649;
  switch (D.21650) <default: <D.21701>, case 439: <D.21544>, case 625: <D.21536>, case 626: <D.21540>, case 627: <D.21534>, case 632: <D.21537>, case 633: <D.21538>, case 634: <D.21539>, case 635: <D.21541>, case 636: <D.21542>, case 637: <D.21543>>
  <D.21534>:
  D.21666 = arg1->data.op[0].const_val;
  D.21689 = ins->data.op[1].const_val;
  D.21690 = D.21666 * D.21689;
  dest->data.op[0].const_val = D.21690;
  goto <D.21535>;
  <D.21536>:
  D.21666 = arg1->data.op[0].const_val;
  D.21689 = ins->data.op[1].const_val;
  D.21691 = D.21666 + D.21689;
  dest->data.op[0].const_val = D.21691;
  goto <D.21535>;
  <D.21537>:
  D.21666 = arg1->data.op[0].const_val;
  D.21689 = ins->data.op[1].const_val;
  D.21692 = D.21666 & D.21689;
  dest->data.op[0].const_val = D.21692;
  goto <D.21535>;
  <D.21538>:
  D.21666 = arg1->data.op[0].const_val;
  D.21689 = ins->data.op[1].const_val;
  D.21693 = D.21666 | D.21689;
  dest->data.op[0].const_val = D.21693;
  goto <D.21535>;
  <D.21539>:
  D.21666 = arg1->data.op[0].const_val;
  D.21689 = ins->data.op[1].const_val;
  D.21694 = D.21666 ^ D.21689;
  dest->data.op[0].const_val = D.21694;
  goto <D.21535>;
  <D.21540>:
  D.21666 = arg1->data.op[0].const_val;
  D.21689 = ins->data.op[1].const_val;
  D.21695 = D.21666 - D.21689;
  dest->data.op[0].const_val = D.21695;
  goto <D.21535>;
  <D.21541>:
  D.21666 = arg1->data.op[0].const_val;
  D.21689 = ins->data.op[1].const_val;
  D.21696 = D.21666 << D.21689;
  dest->data.op[0].const_val = D.21696;
  goto <D.21535>;
  <D.21542>:
  D.21666 = arg1->data.op[0].const_val;
  D.21689 = ins->data.op[1].const_val;
  D.21697 = D.21666 >> D.21689;
  dest->data.op[0].const_val = D.21697;
  goto <D.21535>;
  <D.21543>:
  D.21666 = arg1->data.op[0].const_val;
  D.21698 = (unsigned int) D.21666;
  D.21689 = ins->data.op[1].const_val;
  D.21699 = D.21698 >> D.21689;
  D.21700 = (int) D.21699;
  dest->data.op[0].const_val = D.21700;
  goto <D.21535>;
  <D.21544>:
  D.21666 = arg1->data.op[0].const_val;
  D.21689 = ins->data.op[1].const_val;
  D.21696 = D.21666 << D.21689;
  dest->data.op[0].const_val = D.21696;
  goto <D.21535>;
  <D.21701>:
  <D.21535>:
  dest->opcode = 362;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  <D.21686>:
  goto <D.21523>;
  <D.21545>:
  <D.21546>:
  <D.21547>:
  <D.21548>:
  D.21654 = arg1->opcode;
  if (D.21654 == 362) goto <D.21702>; else goto <D.21703>;
  <D.21702>:
  D.21651 = arg2->opcode;
  if (D.21651 == 362) goto <D.21704>; else goto <D.21705>;
  <D.21704>:
  if (dest == 0B) goto <D.21706>; else goto <D.21707>;
  <D.21706>:
  D.21659 = cfg->mempool;
  dest = mono_mempool_alloc (D.21659, 56);
  dest->data.op[1].const_val = 0;
  D.21660 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.21660;
  dest->prev = 0B;
  D.21661 = dest->prev;
  dest->next = D.21661;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  D.21664 = cfg->ip;
  dest->cil_code = D.21664;
  D.21665 = ins->dreg;
  dest->dreg = D.21665;
  <D.21707>:
  D.21649 = ins->opcode;
  D.21650 = (int) D.21649;
  switch (D.21650) <default: <D.21713>, case 566: <D.21549>, case 575: <D.21551>, case 576: <D.21552>, case 577: <D.21553>>
  <D.21549>:
  D.21666 = arg1->data.op[0].const_val;
  D.21667 = arg2->data.op[0].const_val;
  D.21708 = D.21666 - D.21667;
  dest->data.op[0].const_val = D.21708;
  goto <D.21550>;
  <D.21551>:
  D.21666 = arg1->data.op[0].const_val;
  D.21667 = arg2->data.op[0].const_val;
  D.21709 = D.21666 << D.21667;
  dest->data.op[0].const_val = D.21709;
  goto <D.21550>;
  <D.21552>:
  D.21666 = arg1->data.op[0].const_val;
  D.21667 = arg2->data.op[0].const_val;
  D.21710 = D.21666 >> D.21667;
  dest->data.op[0].const_val = D.21710;
  goto <D.21550>;
  <D.21553>:
  D.21666 = arg1->data.op[0].const_val;
  D.21698 = (unsigned int) D.21666;
  D.21667 = arg2->data.op[0].const_val;
  D.21711 = D.21698 >> D.21667;
  D.21712 = (int) D.21711;
  dest->data.op[0].const_val = D.21712;
  goto <D.21550>;
  <D.21713>:
  <D.21550>:
  dest->opcode = 362;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  <D.21705>:
  <D.21703>:
  goto <D.21523>;
  <D.21554>:
  <D.21555>:
  <D.21556>:
  <D.21557>:
  D.21654 = arg1->opcode;
  if (D.21654 == 362) goto <D.21714>; else goto <D.21715>;
  <D.21714>:
  D.21651 = arg2->opcode;
  if (D.21651 == 362) goto <D.21716>; else goto <D.21717>;
  <D.21716>:
  D.21667 = arg2->data.op[0].const_val;
  if (D.21667 == 0) goto <D.21718>; else goto <D.21720>;
  <D.21720>:
  D.21666 = arg1->data.op[0].const_val;
  if (D.21666 == -2147483648) goto <D.21721>; else goto <D.21719>;
  <D.21721>:
  D.21667 = arg2->data.op[0].const_val;
  if (D.21667 == -1) goto <D.21718>; else goto <D.21719>;
  <D.21718>:
  D.21722 = 0B;
  return D.21722;
  <D.21719>:
  if (dest == 0B) goto <D.21723>; else goto <D.21724>;
  <D.21723>:
  D.21659 = cfg->mempool;
  dest = mono_mempool_alloc (D.21659, 56);
  dest->data.op[1].const_val = 0;
  D.21660 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.21660;
  dest->prev = 0B;
  D.21661 = dest->prev;
  dest->next = D.21661;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  D.21664 = cfg->ip;
  dest->cil_code = D.21664;
  D.21665 = ins->dreg;
  dest->dreg = D.21665;
  <D.21724>:
  D.21649 = ins->opcode;
  D.21650 = (int) D.21649;
  switch (D.21650) <default: <D.21732>, case 568: <D.21558>, case 569: <D.21560>, case 570: <D.21561>, case 571: <D.21562>>
  <D.21558>:
  D.21666 = arg1->data.op[0].const_val;
  D.21667 = arg2->data.op[0].const_val;
  D.21725 = D.21666 / D.21667;
  dest->data.op[0].const_val = D.21725;
  goto <D.21559>;
  <D.21560>:
  D.21666 = arg1->data.op[0].const_val;
  D.21698 = (unsigned int) D.21666;
  D.21667 = arg2->data.op[0].const_val;
  D.21726 = (unsigned int) D.21667;
  D.21727 = D.21698 / D.21726;
  D.21728 = (int) D.21727;
  dest->data.op[0].const_val = D.21728;
  goto <D.21559>;
  <D.21561>:
  D.21666 = arg1->data.op[0].const_val;
  D.21667 = arg2->data.op[0].const_val;
  D.21729 = D.21666 % D.21667;
  dest->data.op[0].const_val = D.21729;
  goto <D.21559>;
  <D.21562>:
  D.21666 = arg1->data.op[0].const_val;
  D.21698 = (unsigned int) D.21666;
  D.21667 = arg2->data.op[0].const_val;
  D.21726 = (unsigned int) D.21667;
  D.21730 = D.21698 % D.21726;
  D.21731 = (int) D.21730;
  dest->data.op[0].const_val = D.21731;
  goto <D.21559>;
  <D.21732>:
  <D.21559>:
  dest->opcode = 362;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  <D.21717>:
  <D.21715>:
  goto <D.21523>;
  <D.21563>:
  <D.21564>:
  <D.21565>:
  <D.21566>:
  D.21654 = arg1->opcode;
  if (D.21654 == 362) goto <D.21733>; else goto <D.21734>;
  <D.21733>:
  D.21689 = ins->data.op[1].const_val;
  if (D.21689 == 0) goto <D.21735>; else goto <D.21737>;
  <D.21737>:
  D.21666 = arg1->data.op[0].const_val;
  if (D.21666 == -2147483648) goto <D.21738>; else goto <D.21736>;
  <D.21738>:
  D.21689 = ins->data.op[1].const_val;
  if (D.21689 == -1) goto <D.21735>; else goto <D.21736>;
  <D.21735>:
  D.21722 = 0B;
  return D.21722;
  <D.21736>:
  if (dest == 0B) goto <D.21739>; else goto <D.21740>;
  <D.21739>:
  D.21659 = cfg->mempool;
  dest = mono_mempool_alloc (D.21659, 56);
  dest->data.op[1].const_val = 0;
  D.21660 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.21660;
  dest->prev = 0B;
  D.21661 = dest->prev;
  dest->next = D.21661;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  D.21664 = cfg->ip;
  dest->cil_code = D.21664;
  D.21665 = ins->dreg;
  dest->dreg = D.21665;
  <D.21740>:
  D.21649 = ins->opcode;
  D.21650 = (int) D.21649;
  switch (D.21650) <default: <D.21572>, case 628: <D.21567>, case 629: <D.21569>, case 630: <D.21570>, case 631: <D.21571>>
  <D.21567>:
  D.21666 = arg1->data.op[0].const_val;
  D.21689 = ins->data.op[1].const_val;
  D.21741 = D.21666 / D.21689;
  dest->data.op[0].const_val = D.21741;
  goto <D.21568>;
  <D.21569>:
  D.21666 = arg1->data.op[0].const_val;
  D.21698 = (unsigned int) D.21666;
  D.21689 = ins->data.op[1].const_val;
  D.21742 = (unsigned int) D.21689;
  D.21743 = D.21698 / D.21742;
  D.21744 = (int) D.21743;
  dest->data.op[0].const_val = D.21744;
  goto <D.21568>;
  <D.21570>:
  D.21666 = arg1->data.op[0].const_val;
  D.21689 = ins->data.op[1].const_val;
  D.21745 = D.21666 % D.21689;
  dest->data.op[0].const_val = D.21745;
  goto <D.21568>;
  <D.21571>:
  D.21666 = arg1->data.op[0].const_val;
  D.21698 = (unsigned int) D.21666;
  D.21689 = ins->data.op[1].const_val;
  D.21742 = (unsigned int) D.21689;
  D.21746 = D.21698 % D.21742;
  D.21747 = (int) D.21746;
  dest->data.op[0].const_val = D.21747;
  goto <D.21568>;
  <D.21572>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "cfold.c", 199);
  <D.21568>:
  dest->opcode = 362;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  <D.21734>:
  goto <D.21523>;
  <D.21573>:
  <D.21574>:
  D.21654 = arg1->opcode;
  if (D.21654 == 362) goto <D.21748>; else goto <D.21749>;
  <D.21748>:
  D.21649 = ins->opcode;
  if (D.21649 == 578) goto <D.21750>; else goto <D.21751>;
  <D.21750>:
  D.21722 = 0B;
  return D.21722;
  <D.21751>:
  if (dest == 0B) goto <D.21752>; else goto <D.21753>;
  <D.21752>:
  D.21659 = cfg->mempool;
  dest = mono_mempool_alloc (D.21659, 56);
  dest->data.op[1].const_val = 0;
  D.21660 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.21660;
  dest->prev = 0B;
  D.21661 = dest->prev;
  dest->next = D.21661;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  D.21664 = cfg->ip;
  dest->cil_code = D.21664;
  D.21665 = ins->dreg;
  dest->dreg = D.21665;
  <D.21753>:
  D.21649 = ins->opcode;
  D.21650 = (int) D.21649;
  switch (D.21650) <default: <D.21756>, case 578: <D.21575>, case 579: <D.21577>>
  <D.21575>:
  D.21666 = arg1->data.op[0].const_val;
  D.21754 = -D.21666;
  dest->data.op[0].const_val = D.21754;
  goto <D.21576>;
  <D.21577>:
  D.21666 = arg1->data.op[0].const_val;
  D.21755 = ~D.21666;
  dest->data.op[0].const_val = D.21755;
  goto <D.21576>;
  <D.21756>:
  <D.21576>:
  dest->opcode = 362;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  <D.21749>:
  goto <D.21523>;
  <D.21578>:
  D.21654 = arg1->opcode;
  if (D.21654 == 362) goto <D.21757>; else goto <D.21758>;
  <D.21757>:
  if (dest == 0B) goto <D.21759>; else goto <D.21760>;
  <D.21759>:
  D.21659 = cfg->mempool;
  dest = mono_mempool_alloc (D.21659, 56);
  dest->data.op[1].const_val = 0;
  D.21660 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.21660;
  dest->prev = 0B;
  D.21661 = dest->prev;
  dest->next = D.21661;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  D.21664 = cfg->ip;
  dest->cil_code = D.21664;
  D.21665 = ins->dreg;
  dest->dreg = D.21665;
  <D.21760>:
  D.21654 = arg1->opcode;
  dest->opcode = D.21654;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  D.21666 = arg1->data.op[0].const_val;
  dest->data.op[0].const_val = D.21666;
  <D.21758>:
  goto <D.21523>;
  <D.21579>:
  D.21654 = arg1->opcode;
  if (D.21654 == 428) goto <D.21761>; else goto <D.21762>;
  <D.21761>:
  if (dest == 0B) goto <D.21763>; else goto <D.21764>;
  <D.21763>:
  D.21659 = cfg->mempool;
  dest = mono_mempool_alloc (D.21659, 56);
  dest->data.op[1].const_val = 0;
  D.21660 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.21660;
  dest->prev = 0B;
  D.21661 = dest->prev;
  dest->next = D.21661;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  D.21664 = cfg->ip;
  dest->cil_code = D.21664;
  D.21665 = ins->dreg;
  dest->dreg = D.21665;
  <D.21764>:
  dest->opcode = 428;
  dest->sreg1 = -1;
  <D.21762>:
  goto <D.21523>;
  <D.21580>:
  D.21654 = arg1->opcode;
  if (D.21654 == 801) goto <D.21765>; else goto <D.21766>;
  <D.21765>:
  if (dest == 0B) goto <D.21767>; else goto <D.21768>;
  <D.21767>:
  D.21659 = cfg->mempool;
  dest = mono_mempool_alloc (D.21659, 56);
  dest->data.op[1].const_val = 0;
  D.21660 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.21660;
  dest->prev = 0B;
  D.21661 = dest->prev;
  dest->next = D.21661;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  D.21664 = cfg->ip;
  dest->cil_code = D.21664;
  D.21665 = ins->dreg;
  dest->dreg = D.21665;
  <D.21768>:
  dest->opcode = 801;
  dest->sreg1 = -1;
  <D.21766>:
  goto <D.21523>;
  <D.21581>:
  <D.21582>:
  <D.21583>:
  <D.21584>:
  {
    struct MonoInst dummy_arg2;

    try
      {
        D.21684 = ins->sreg2;
        if (D.21684 == -1) goto <D.21769>; else goto <D.21770>;
        <D.21769>:
        arg2 = &dummy_arg2;
        arg2->opcode = 362;
        D.21689 = ins->data.op[1].const_val;
        arg2->data.op[0].const_val = D.21689;
        <D.21770>:
        D.21654 = arg1->opcode;
        if (D.21654 == 362) goto <D.21771>; else goto <D.21772>;
        <D.21771>:
        D.21651 = arg2->opcode;
        if (D.21651 == 362) goto <D.21773>; else goto <D.21774>;
        <D.21773>:
        D.21775 = ins->next;
        if (D.21775 != 0B) goto <D.21776>; else goto <D.21777>;
        <D.21776>:
        {
          struct MonoInst * next;
          gboolean res;

          next = ins->next;
          res = 0;
          D.21778 = next->opcode;
          D.21779 = (int) D.21778;
          switch (D.21779) <default: <D.21633>, case 316: <D.21631>, case 442: <D.21632>, case 446: <D.21588>, case 447: <D.21590>, case 448: <D.21592>, case 449: <D.21594>, case 450: <D.21596>, case 638: <D.21589>, case 639: <D.21591>, case 640: <D.21593>, case 641: <D.21595>, case 642: <D.21597>, case 648: <D.21610>, case 649: <D.21614>, case 650: <D.21612>, case 651: <D.21618>, case 652: <D.21616>, case 653: <D.21611>, case 654: <D.21615>, case 655: <D.21613>, case 656: <D.21619>, case 657: <D.21617>>
          <D.21588>:
          <D.21589>:
          <D.21590>:
          <D.21591>:
          <D.21592>:
          <D.21593>:
          <D.21594>:
          <D.21595>:
          <D.21596>:
          <D.21597>:
          D.21778 = next->opcode;
          D.21779 = (int) D.21778;
          switch (D.21779) <default: <D.21785>, case 446: <D.21598>, case 447: <D.21601>, case 448: <D.21603>, case 449: <D.21605>, case 450: <D.21607>, case 638: <D.21600>, case 639: <D.21602>, case 640: <D.21604>, case 641: <D.21606>, case 642: <D.21608>>
          <D.21598>:
          D.21666 = arg1->data.op[0].const_val;
          D.21667 = arg2->data.op[0].const_val;
          D.21780 = D.21666 == D.21667;
          res = (gboolean) D.21780;
          goto <D.21599>;
          <D.21600>:
          D.21666 = arg1->data.op[0].const_val;
          D.21667 = arg2->data.op[0].const_val;
          D.21780 = D.21666 == D.21667;
          res = (gboolean) D.21780;
          goto <D.21599>;
          <D.21601>:
          D.21666 = arg1->data.op[0].const_val;
          D.21667 = arg2->data.op[0].const_val;
          D.21781 = D.21666 > D.21667;
          res = (gboolean) D.21781;
          goto <D.21599>;
          <D.21602>:
          D.21666 = arg1->data.op[0].const_val;
          D.21667 = arg2->data.op[0].const_val;
          D.21781 = D.21666 > D.21667;
          res = (gboolean) D.21781;
          goto <D.21599>;
          <D.21603>:
          D.21666 = arg1->data.op[0].const_val;
          D.21698 = (unsigned int) D.21666;
          D.21667 = arg2->data.op[0].const_val;
          D.21726 = (unsigned int) D.21667;
          D.21782 = D.21698 > D.21726;
          res = (gboolean) D.21782;
          goto <D.21599>;
          <D.21604>:
          D.21666 = arg1->data.op[0].const_val;
          D.21698 = (unsigned int) D.21666;
          D.21667 = arg2->data.op[0].const_val;
          D.21726 = (unsigned int) D.21667;
          D.21782 = D.21698 > D.21726;
          res = (gboolean) D.21782;
          goto <D.21599>;
          <D.21605>:
          D.21666 = arg1->data.op[0].const_val;
          D.21667 = arg2->data.op[0].const_val;
          D.21783 = D.21666 < D.21667;
          res = (gboolean) D.21783;
          goto <D.21599>;
          <D.21606>:
          D.21666 = arg1->data.op[0].const_val;
          D.21667 = arg2->data.op[0].const_val;
          D.21783 = D.21666 < D.21667;
          res = (gboolean) D.21783;
          goto <D.21599>;
          <D.21607>:
          D.21666 = arg1->data.op[0].const_val;
          D.21698 = (unsigned int) D.21666;
          D.21667 = arg2->data.op[0].const_val;
          D.21726 = (unsigned int) D.21667;
          D.21784 = D.21698 < D.21726;
          res = (gboolean) D.21784;
          goto <D.21599>;
          <D.21608>:
          D.21666 = arg1->data.op[0].const_val;
          D.21698 = (unsigned int) D.21666;
          D.21667 = arg2->data.op[0].const_val;
          D.21726 = (unsigned int) D.21667;
          D.21784 = D.21698 < D.21726;
          res = (gboolean) D.21784;
          goto <D.21599>;
          <D.21785>:
          <D.21599>:
          if (overwrite != 0) goto <D.21786>; else goto <D.21787>;
          <D.21786>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.21788 = ins->sreg3;
          ins->sreg2 = D.21788;
          D.21684 = ins->sreg2;
          ins->sreg1 = D.21684;
          next->opcode = 362;
          next->data.op[0].const_val = res;
          next->sreg3 = -1;
          D.21789 = next->sreg3;
          next->sreg2 = D.21789;
          D.21790 = next->sreg2;
          next->sreg1 = D.21790;
          goto <D.21791>;
          <D.21787>:
          if (dest == 0B) goto <D.21792>; else goto <D.21793>;
          <D.21792>:
          D.21659 = cfg->mempool;
          dest = mono_mempool_alloc (D.21659, 56);
          dest->data.op[1].const_val = 0;
          D.21660 = dest->data.op[1].const_val;
          dest->data.op[0].const_val = D.21660;
          dest->prev = 0B;
          D.21661 = dest->prev;
          dest->next = D.21661;
          dest->opcode = 65535;
          dest->flags = 0;
          dest->type = 0;
          dest->dreg = -1;
          dest->sreg3 = -1;
          D.21662 = dest->sreg3;
          dest->sreg2 = D.21662;
          D.21663 = dest->sreg2;
          dest->sreg1 = D.21663;
          D.21664 = cfg->ip;
          dest->cil_code = D.21664;
          D.21665 = ins->dreg;
          dest->dreg = D.21665;
          <D.21793>:
          dest->opcode = 362;
          dest->data.op[0].const_val = res;
          <D.21791>:
          goto <D.21609>;
          <D.21610>:
          <D.21611>:
          <D.21612>:
          <D.21613>:
          <D.21614>:
          <D.21615>:
          <D.21616>:
          <D.21617>:
          <D.21618>:
          <D.21619>:
          D.21778 = next->opcode;
          D.21779 = (int) D.21778;
          switch (D.21779) <default: <D.21799>, case 648: <D.21620>, case 649: <D.21625>, case 650: <D.21623>, case 651: <D.21629>, case 652: <D.21627>, case 653: <D.21622>, case 654: <D.21626>, case 655: <D.21624>, case 656: <D.21630>, case 657: <D.21628>>
          <D.21620>:
          D.21666 = arg1->data.op[0].const_val;
          D.21667 = arg2->data.op[0].const_val;
          D.21780 = D.21666 == D.21667;
          res = (gboolean) D.21780;
          goto <D.21621>;
          <D.21622>:
          D.21666 = arg1->data.op[0].const_val;
          D.21667 = arg2->data.op[0].const_val;
          D.21794 = D.21666 != D.21667;
          res = (gboolean) D.21794;
          goto <D.21621>;
          <D.21623>:
          D.21666 = arg1->data.op[0].const_val;
          D.21667 = arg2->data.op[0].const_val;
          D.21781 = D.21666 > D.21667;
          res = (gboolean) D.21781;
          goto <D.21621>;
          <D.21624>:
          D.21666 = arg1->data.op[0].const_val;
          D.21698 = (unsigned int) D.21666;
          D.21667 = arg2->data.op[0].const_val;
          D.21726 = (unsigned int) D.21667;
          D.21782 = D.21698 > D.21726;
          res = (gboolean) D.21782;
          goto <D.21621>;
          <D.21625>:
          D.21666 = arg1->data.op[0].const_val;
          D.21667 = arg2->data.op[0].const_val;
          D.21795 = D.21666 >= D.21667;
          res = (gboolean) D.21795;
          goto <D.21621>;
          <D.21626>:
          D.21666 = arg1->data.op[0].const_val;
          D.21698 = (unsigned int) D.21666;
          D.21667 = arg2->data.op[0].const_val;
          D.21726 = (unsigned int) D.21667;
          D.21796 = D.21698 >= D.21726;
          res = (gboolean) D.21796;
          goto <D.21621>;
          <D.21627>:
          D.21666 = arg1->data.op[0].const_val;
          D.21667 = arg2->data.op[0].const_val;
          D.21783 = D.21666 < D.21667;
          res = (gboolean) D.21783;
          goto <D.21621>;
          <D.21628>:
          D.21666 = arg1->data.op[0].const_val;
          D.21698 = (unsigned int) D.21666;
          D.21667 = arg2->data.op[0].const_val;
          D.21726 = (unsigned int) D.21667;
          D.21784 = D.21698 < D.21726;
          res = (gboolean) D.21784;
          goto <D.21621>;
          <D.21629>:
          D.21666 = arg1->data.op[0].const_val;
          D.21667 = arg2->data.op[0].const_val;
          D.21797 = D.21666 <= D.21667;
          res = (gboolean) D.21797;
          goto <D.21621>;
          <D.21630>:
          D.21666 = arg1->data.op[0].const_val;
          D.21698 = (unsigned int) D.21666;
          D.21667 = arg2->data.op[0].const_val;
          D.21726 = (unsigned int) D.21667;
          D.21798 = D.21698 <= D.21726;
          res = (gboolean) D.21798;
          goto <D.21621>;
          <D.21799>:
          <D.21621>:
          if (overwrite != 0) goto <D.21800>; else goto <D.21801>;
          <D.21800>:
          if (res != 0) goto <D.21802>; else goto <D.21803>;
          <D.21802>:
          D.21804 = next->flags;
          D.21805 = D.21804 | 8;
          next->flags = D.21805;
          goto <D.21806>;
          <D.21803>:
          D.21804 = next->flags;
          D.21807 = D.21804 | 16;
          next->flags = D.21807;
          <D.21806>:
          goto <D.21808>;
          <D.21801>:
          if (dest == 0B) goto <D.21809>; else goto <D.21810>;
          <D.21809>:
          D.21659 = cfg->mempool;
          dest = mono_mempool_alloc (D.21659, 56);
          dest->data.op[1].const_val = 0;
          D.21660 = dest->data.op[1].const_val;
          dest->data.op[0].const_val = D.21660;
          dest->prev = 0B;
          D.21661 = dest->prev;
          dest->next = D.21661;
          dest->opcode = 65535;
          dest->flags = 0;
          dest->type = 0;
          dest->dreg = -1;
          dest->sreg3 = -1;
          D.21662 = dest->sreg3;
          dest->sreg2 = D.21662;
          D.21663 = dest->sreg2;
          dest->sreg1 = D.21663;
          D.21664 = cfg->ip;
          dest->cil_code = D.21664;
          D.21665 = ins->dreg;
          dest->dreg = D.21665;
          <D.21810>:
          dest->opcode = 362;
          dest->data.op[0].const_val = res;
          <D.21808>:
          goto <D.21609>;
          <D.21631>:
          <D.21632>:
          D.21811 = next->next;
          if (D.21811 == 0B) goto <D.21812>; else goto <D.21813>;
          <D.21812>:
          if (overwrite != 0) goto <D.21814>; else goto <D.21815>;
          <D.21814>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.21788 = ins->sreg3;
          ins->sreg2 = D.21788;
          D.21684 = ins->sreg2;
          ins->sreg1 = D.21684;
          <D.21815>:
          <D.21813>:
          goto <D.21609>;
          <D.21633>:
          D.21722 = 0B;
          return D.21722;
          <D.21609>:
        }
        <D.21777>:
        <D.21774>:
        <D.21772>:
        goto <D.21523>;
      }
    finally
      {
        dummy_arg2 = {CLOBBER};
      }
  }
  <D.21634>:
  D.21654 = arg1->opcode;
  if (D.21654 == 365) goto <D.21816>; else goto <D.21817>;
  <D.21816>:
  if (dest == 0B) goto <D.21818>; else goto <D.21819>;
  <D.21818>:
  D.21659 = cfg->mempool;
  dest = mono_mempool_alloc (D.21659, 56);
  dest->data.op[1].const_val = 0;
  D.21660 = dest->data.op[1].const_val;
  dest->data.op[0].const_val = D.21660;
  dest->prev = 0B;
  D.21661 = dest->prev;
  dest->next = D.21661;
  dest->opcode = 65535;
  dest->flags = 0;
  dest->type = 0;
  dest->dreg = -1;
  dest->sreg3 = -1;
  D.21662 = dest->sreg3;
  dest->sreg2 = D.21662;
  D.21663 = dest->sreg2;
  dest->sreg1 = D.21663;
  D.21664 = cfg->ip;
  dest->cil_code = D.21664;
  D.21665 = ins->dreg;
  dest->dreg = D.21665;
  <D.21819>:
  dest->opcode = 365;
  dest->sreg1 = -1;
  D.21820 = arg1->data.op[0].p;
  dest->data.op[0].p = D.21820;
  <D.21817>:
  goto <D.21523>;
  <D.21635>:
  D.21722 = 0B;
  return D.21722;
  <D.21523>:
  D.21722 = dest;
  return D.21722;
}


