mono_arch_patch_callsite (guint8 * method_start, guint8 * code_ptr, guint8 * addr)
{
  unsigned int D.24657;
  unsigned int D.24658;
  unsigned int D.24659;
  unsigned int D.24662;
  unsigned int D.24663;
  guint8 * D.24666;
  guint32 * code;

  code = code_ptr;
  code = code + 4294967292;
  D.24657 = *code;
  D.24658 = D.24657 >> 25;
  D.24659 = D.24658 & 7;
  if (D.24659 == 5) goto <D.24660>; else goto <D.24661>;
  <D.24660>:
  arm_patch (code, addr);
  mono_arch_flush_icache (code, 4);
  return;
  <D.24661>:
  D.24657 = *code;
  D.24662 = D.24657 >> 20;
  D.24663 = D.24662 & 255;
  if (D.24663 == 18) goto <D.24664>; else goto <D.24665>;
  <D.24664>:
  arm_patch (code, addr);
  D.24666 = code + 4294967288;
  mono_arch_flush_icache (D.24666, 4);
  return;
  <D.24665>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "tramp-arm.c", 97);
}


mono_arch_patch_plt_entry (guint8 * code, void * * got, mgreg_t * regs, guint8 * addr)
{
  unsigned int D.24668;
  sizetype D.24671;
  guint16 * D.24673;
  short unsigned int D.24674;
  sizetype D.24677;
  guint8 * jump_entry;

  D.24668 = MEM[(guint32 *)code];
  if (D.24668 == 3852451840) goto <D.24669>; else goto <D.24670>;
  <D.24669>:
  {
    guint32 offset;

    offset = MEM[(guint32 *)code + 8B];
    D.24671 = offset + 12;
    jump_entry = code + D.24671;
  }
  goto <D.24672>;
  <D.24670>:
  D.24673 = code + 4294967292;
  D.24674 = *D.24673;
  if (D.24674 == 63711) goto <D.24675>; else goto <D.24676>;
  <D.24675>:
  {
    guint32 offset;

    code = code + 4294967292;
    offset = MEM[(guint32 *)code + 12B];
    D.24677 = offset + 8;
    jump_entry = code + D.24677;
  }
  goto <D.24678>;
  <D.24676>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "tramp-arm.c", 123);
  <D.24678>:
  <D.24672>:
  MEM[(guint8 * *)jump_entry] = addr;
}


mono_arch_nullify_class_init_trampoline (guint8 * code, mgreg_t * regs)
{
  void * D.24679;

  D.24679 = mini_get_nullified_class_init_trampoline ();
  mono_arch_patch_callsite (0B, code, D.24679);
}


mono_arch_nullify_plt_entry (guint8 * code, mgreg_t * regs)
{
  void * D.24680;

  D.24680 = mini_get_nullified_class_init_trampoline ();
  mono_arch_patch_plt_entry (code, 0B, regs, D.24680);
}


mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, struct MonoTrampInfo * * info, gboolean aot)
{
  int D.24681;
  int code.0;
  int buf.1;
  int D.24686;
  struct MonoUnwindOp * D.24687;
  struct MonoUnwindOp * D.24688;
  _Bool D.24689;
  _Bool D.24690;
  _Bool D.24691;
  int D.24701;
  int D.24702;
  int iftmp.2;
  int D.24707;
  int D.24708;
  unsigned int D.24709;
  unsigned int regsave_size.3;
  unsigned int D.24714;
  unsigned int cfa_offset.4;
  unsigned int regsave_size.5;
  unsigned int D.24717;
  unsigned int D.24718;
  struct MonoUnwindOp * D.24719;
  int D.24720;
  int D.24721;
  int iftmp.6;
  int D.24726;
  int D.24727;
  unsigned int D.24728;
  int D.24729;
  int D.24730;
  int iftmp.7;
  int D.24735;
  int D.24736;
  unsigned int D.24737;
  int D.24738;
  int D.24739;
  int iftmp.8;
  int D.24744;
  int D.24745;
  unsigned int D.24746;
  int D.24749;
  int D.24750;
  int iftmp.9;
  int D.24755;
  int D.24756;
  unsigned int D.24757;
  int D.24759;
  int D.24760;
  int iftmp.10;
  int D.24765;
  int D.24766;
  unsigned int D.24767;
  unsigned int cfa_offset.11;
  int D.24769;
  int D.24770;
  int iftmp.12;
  int D.24775;
  int D.24776;
  unsigned int D.24777;
  int D.24778;
  int D.24779;
  int iftmp.13;
  int D.24784;
  int D.24785;
  unsigned int D.24786;
  int D.24790;
  int D.24791;
  int iftmp.14;
  int D.24796;
  int D.24797;
  unsigned int D.24798;
  int D.24799;
  int D.24808;
  int D.24809;
  int iftmp.15;
  int D.24814;
  int D.24815;
  unsigned int D.24816;
  int D.24820;
  int D.24821;
  int iftmp.16;
  int D.24826;
  int D.24827;
  unsigned int D.24828;
  int D.24829;
  unsigned int regsave_size.17;
  unsigned int D.24833;
  unsigned int D.24834;
  unsigned int D.24835;
  int D.24838;
  int D.24839;
  unsigned int D.24840;
  unsigned int D.24841;
  void * * D.24845;
  const void * D.24846;
  int iftmp.18;
  int load_get_lmf_addr.19;
  int D.24851;
  int D.24854;
  int D.24855;
  int D.24857;
  int iftmp.20;
  int D.24862;
  int D.24863;
  unsigned int D.24864;
  int iftmp.21;
  guint8 * D.24866;
  int D.24867;
  int load_trampoline.22;
  int D.24869;
  int D.24872;
  int D.24873;
  int D.24875;
  int iftmp.23;
  int D.24880;
  int D.24881;
  unsigned int D.24882;
  _Bool D.24883;
  long int D.24884;
  long int D.24885;
  unsigned int D.24890;
  struct MonoTrampInfo * D.24891;
  guchar * D.24892;
  char * tramp_name;
  guint8 * buf;
  guint8 * code;
  guint8 * load_get_lmf_addr;
  guint8 * load_trampoline;
  void * * constants;
  int cfa_offset;
  int regsave_size;
  int lr_offset;
  struct GSList * unwind_ops;
  struct MonoJumpInfo * ji;
  int buf_len;

  code = 0B;
  load_get_lmf_addr = 0B;
  load_trampoline = 0B;
  unwind_ops = 0B;
  ji = 0B;
  buf_len = 272;
  D.24681 = mono_arm_is_hard_float ();
  if (D.24681 != 0) goto <D.24682>; else goto <D.24683>;
  <D.24682>:
  buf_len = buf_len + 16;
  <D.24683>:
  buf = mono_global_codeman_reserve (buf_len);
  code = buf;
  regsave_size = 56;
  lr_offset = 52;
  cfa_offset = 56;
  code.0 = (int) code;
  buf.1 = (int) buf;
  D.24686 = code.0 - buf.1;
  D.24687 = mono_create_unwind_op (D.24686, 12, 13, cfa_offset);
  unwind_ops = monoeg_g_slist_append (unwind_ops, D.24687);
  code.0 = (int) code;
  buf.1 = (int) buf;
  D.24686 = code.0 - buf.1;
  D.24688 = mono_create_unwind_op (D.24686, 128, 14, -4);
  unwind_ops = monoeg_g_slist_append (unwind_ops, D.24688);
  D.24689 = aot != 0;
  D.24690 = tramp_type != 3;
  D.24691 = D.24689 & D.24690;
  if (D.24691 != 0) goto <D.24692>; else goto <D.24693>;
  <D.24692>:
  if (aot == 2) goto <D.24694>; else goto <D.24695>;
  <D.24694>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785379841;
    code = __ainstrp + 4;
  }
  goto <D.24696>;
  <D.24695>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3852357632;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3800387588;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3885322254;
    code = __ainstrp + 4;
  }
  <D.24696>:
  goto <D.24697>;
  <D.24693>:
  if (tramp_type != 3) goto <D.24698>; else goto <D.24699>;
  <D.24698>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3852357632;
    code = __ainstrp + 4;
  }
  goto <D.24700>;
  <D.24699>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785379840;
    code = __ainstrp + 4;
  }
  <D.24700>:
  <D.24697>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.24701 = ABS_EXPR <lr_offset>;
    D.24702 = D.24701 | 1925120;
    if (lr_offset >= 0) goto <D.24704>; else goto <D.24705>;
    <D.24704>:
    iftmp.2 = 8388608;
    goto <D.24706>;
    <D.24705>:
    iftmp.2 = 0;
    <D.24706>:
    D.24707 = D.24702 | iftmp.2;
    D.24708 = D.24707 | -452984832;
    D.24709 = (unsigned int) D.24708;
    *__ainstrp = D.24709;
    code = __ainstrp + 4;
  }
  if (aot != 0) goto <D.24710>; else goto <D.24711>;
  <D.24710>:
  code.0 = (int) code;
  buf.1 = (int) buf;
  D.24686 = code.0 - buf.1;
  ji = mono_patch_info_list_prepend (ji, D.24686, 32, "mono_get_lmf_addr");
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3852402688;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3925868544;
    code = __ainstrp + 4;
  }
  MEM[(void * *)code] = 0B;
  code = code + 4;
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3885957120;
    code = __ainstrp + 4;
  }
  goto <D.24712>;
  <D.24711>:
  load_get_lmf_addr = code;
  code = code + 4;
  <D.24712>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785416719;
    code = __ainstrp + 4;
  }
  code = emit_bx (code, 0);
  regsave_size.3 = (unsigned int) regsave_size;
  D.24714 = 208 - regsave_size.3;
  code = mono_arm_emit_load_imm (code, 2, D.24714);
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3763195906;
    code = __ainstrp + 4;
  }
  cfa_offset.4 = (unsigned int) cfa_offset;
  regsave_size.5 = (unsigned int) regsave_size;
  D.24717 = cfa_offset.4 - regsave_size.5;
  D.24718 = D.24717 + 208;
  cfa_offset = (int) D.24718;
  code.0 = (int) code;
  buf.1 = (int) buf;
  D.24686 = code.0 - buf.1;
  D.24719 = mono_create_unwind_op (D.24686, 14, 0, cfa_offset);
  unwind_ops = monoeg_g_slist_append (unwind_ops, D.24719);
  code = mono_arm_emit_load_imm (code, 2, 0);
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3767353346;
    code = __ainstrp + 4;
  }
  {
    int _imm12;

    _imm12 = 4;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.24720 = ABS_EXPR <_imm12>;
      D.24721 = D.24720 | 262144;
      if (_imm12 >= 0) goto <D.24723>; else goto <D.24724>;
      <D.24723>:
      iftmp.6 = 8388608;
      goto <D.24725>;
      <D.24724>:
      iftmp.6 = 0;
      <D.24725>:
      D.24726 = D.24721 | iftmp.6;
      D.24727 = D.24726 | -452984832;
      D.24728 = (unsigned int) D.24727;
      *__ainstrp = D.24728;
      code = __ainstrp + 4;
    }
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3851427840;
    code = __ainstrp + 4;
  }
  {
    int _imm12;

    _imm12 = 0;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.24729 = ABS_EXPR <_imm12>;
      D.24730 = D.24729 | 270336;
      if (_imm12 >= 0) goto <D.24732>; else goto <D.24733>;
      <D.24732>:
      iftmp.7 = 8388608;
      goto <D.24734>;
      <D.24733>:
      iftmp.7 = 0;
      <D.24734>:
      D.24735 = D.24730 | iftmp.7;
      D.24736 = D.24735 | -452984832;
      D.24737 = (unsigned int) D.24736;
      *__ainstrp = D.24737;
      code = __ainstrp + 4;
    }
  }
  {
    int _imm12;

    _imm12 = 0;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.24738 = ABS_EXPR <_imm12>;
      D.24739 = D.24738 | 16384;
      if (_imm12 >= 0) goto <D.24741>; else goto <D.24742>;
      <D.24741>:
      iftmp.8 = 8388608;
      goto <D.24743>;
      <D.24742>:
      iftmp.8 = 0;
      <D.24743>:
      D.24744 = D.24739 | iftmp.8;
      D.24745 = D.24744 | -452984832;
      D.24746 = (unsigned int) D.24745;
      *__ainstrp = D.24746;
      code = __ainstrp + 4;
    }
  }
  if (tramp_type <= 1) goto <D.24747>; else goto <D.24748>;
  <D.24747>:
  {
    int _imm12;

    _imm12 = 8;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.24749 = ABS_EXPR <_imm12>;
      D.24750 = D.24749 | 282624;
      if (_imm12 >= 0) goto <D.24752>; else goto <D.24753>;
      <D.24752>:
      iftmp.9 = 8388608;
      goto <D.24754>;
      <D.24753>:
      iftmp.9 = 0;
      <D.24754>:
      D.24755 = D.24750 | iftmp.9;
      D.24756 = D.24755 | -452984832;
      D.24757 = (unsigned int) D.24756;
      *__ainstrp = D.24757;
      code = __ainstrp + 4;
    }
  }
  goto <D.24758>;
  <D.24748>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3818921984;
    code = __ainstrp + 4;
  }
  {
    int _imm12;

    _imm12 = 8;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.24759 = ABS_EXPR <_imm12>;
      D.24760 = D.24759 | 270336;
      if (_imm12 >= 0) goto <D.24762>; else goto <D.24763>;
      <D.24762>:
      iftmp.10 = 8388608;
      goto <D.24764>;
      <D.24763>:
      iftmp.10 = 0;
      <D.24764>:
      D.24765 = D.24760 | iftmp.10;
      D.24766 = D.24765 | -452984832;
      D.24767 = (unsigned int) D.24766;
      *__ainstrp = D.24767;
      code = __ainstrp + 4;
    }
  }
  <D.24758>:
  cfa_offset.11 = (unsigned int) cfa_offset;
  code = mono_arm_emit_load_imm (code, 2, cfa_offset.11);
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3767345154;
    code = __ainstrp + 4;
  }
  {
    int _imm12;

    _imm12 = 12;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.24769 = ABS_EXPR <_imm12>;
      D.24770 = D.24769 | 270336;
      if (_imm12 >= 0) goto <D.24772>; else goto <D.24773>;
      <D.24772>:
      iftmp.12 = 8388608;
      goto <D.24774>;
      <D.24773>:
      iftmp.12 = 0;
      <D.24774>:
      D.24775 = D.24770 | iftmp.12;
      D.24776 = D.24775 | -452984832;
      D.24777 = (unsigned int) D.24776;
      *__ainstrp = D.24777;
      code = __ainstrp + 4;
    }
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3851690180;
    code = __ainstrp + 4;
  }
  {
    int _imm12;

    _imm12 = 20;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.24778 = ABS_EXPR <_imm12>;
      D.24779 = D.24778 | 270336;
      if (_imm12 >= 0) goto <D.24781>; else goto <D.24782>;
      <D.24781>:
      iftmp.13 = 8388608;
      goto <D.24783>;
      <D.24782>:
      iftmp.13 = 0;
      <D.24783>:
      D.24784 = D.24779 | iftmp.13;
      D.24785 = D.24784 | -452984832;
      D.24786 = (unsigned int) D.24785;
      *__ainstrp = D.24786;
      code = __ainstrp + 4;
    }
  }
  if (tramp_type == 1) goto <D.24787>; else goto <D.24788>;
  <D.24787>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3818921984;
    code = __ainstrp + 4;
  }
  goto <D.24789>;
  <D.24788>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3851690188;
    code = __ainstrp + 4;
  }
  <D.24789>:
  {
    int _imm12;

    _imm12 = 16;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.24790 = ABS_EXPR <_imm12>;
      D.24791 = D.24790 | 270336;
      if (_imm12 >= 0) goto <D.24793>; else goto <D.24794>;
      <D.24793>:
      iftmp.14 = 8388608;
      goto <D.24795>;
      <D.24794>:
      iftmp.14 = 0;
      <D.24795>:
      D.24796 = D.24791 | iftmp.14;
      D.24797 = D.24796 | -452984832;
      D.24798 = (unsigned int) D.24797;
      *__ainstrp = D.24798;
      code = __ainstrp + 4;
    }
  }
  D.24799 = mono_arm_is_hard_float ();
  if (D.24799 != 0) goto <D.24800>; else goto <D.24801>;
  <D.24800>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3800301592;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3967814416;
    code = __ainstrp + 4;
  }
  <D.24801>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3800301720;
    code = __ainstrp + 4;
  }
  if (tramp_type == 1) goto <D.24802>; else goto <D.24803>;
  <D.24802>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3818917888;
    code = __ainstrp + 4;
  }
  goto <D.24804>;
  <D.24803>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785363462;
    code = __ainstrp + 4;
  }
  <D.24804>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785367557;
    code = __ainstrp + 4;
  }
  if (aot != 0) goto <D.24805>; else goto <D.24806>;
  <D.24805>:
  {
    char * icall_name;

    icall_name = monoeg_g_strdup_printf ("trampoline_func_%d", tramp_type);
    code.0 = (int) code;
    buf.1 = (int) buf;
    D.24686 = code.0 - buf.1;
    ji = mono_patch_info_list_prepend (ji, D.24686, 32, icall_name);
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      *__ainstrp = 3852451840;
      code = __ainstrp + 4;
    }
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      *__ainstrp = 3925868544;
      code = __ainstrp + 4;
    }
    MEM[(void * *)code] = 0B;
    code = code + 4;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      *__ainstrp = 3886006284;
      code = __ainstrp + 4;
    }
  }
  goto <D.24807>;
  <D.24806>:
  load_trampoline = code;
  code = code + 4;
  <D.24807>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785416719;
    code = __ainstrp + 4;
  }
  code = emit_bx (code, 12);
  {
    int _imm12;

    _imm12 = 200;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.24808 = ABS_EXPR <_imm12>;
      D.24809 = D.24808 | 262144;
      if (_imm12 >= 0) goto <D.24811>; else goto <D.24812>;
      <D.24811>:
      iftmp.15 = 8388608;
      goto <D.24813>;
      <D.24812>:
      iftmp.15 = 0;
      <D.24813>:
      D.24814 = D.24809 | iftmp.15;
      D.24815 = D.24814 | -452984832;
      D.24816 = (unsigned int) D.24815;
      *__ainstrp = D.24816;
      code = __ainstrp + 4;
    }
  }
  if (aot != 0) goto <D.24817>; else goto <D.24818>;
  <D.24817>:
  code.0 = (int) code;
  buf.1 = (int) buf;
  D.24686 = code.0 - buf.1;
  ji = mono_patch_info_list_prepend (ji, D.24686, 32, "mono_thread_force_interruption_checkpoint");
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3852451840;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3925868544;
    code = __ainstrp + 4;
  }
  MEM[(void * *)code] = 0B;
  code = code + 4;
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3886006284;
    code = __ainstrp + 4;
  }
  goto <D.24819>;
  <D.24818>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3852451840;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3925868544;
    code = __ainstrp + 4;
  }
  MEM[(void * *)code] = mono_thread_force_interruption_checkpoint;
  code = code + 4;
  <D.24819>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785416719;
    code = __ainstrp + 4;
  }
  code = emit_bx (code, 12);
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3851730944;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3851739140;
    code = __ainstrp + 4;
  }
  {
    int _imm12;

    _imm12 = 0;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.24820 = ABS_EXPR <_imm12>;
      D.24821 = D.24820 | 966656;
      if (_imm12 >= 0) goto <D.24823>; else goto <D.24824>;
      <D.24823>:
      iftmp.16 = 8388608;
      goto <D.24825>;
      <D.24824>:
      iftmp.16 = 0;
      <D.24825>:
      D.24826 = D.24821 | iftmp.16;
      D.24827 = D.24826 | -452984832;
      D.24828 = (unsigned int) D.24827;
      *__ainstrp = D.24828;
      code = __ainstrp + 4;
    }
  }
  D.24829 = mono_arm_is_hard_float ();
  if (D.24829 != 0) goto <D.24830>; else goto <D.24831>;
  <D.24830>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3800301592;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3968862992;
    code = __ainstrp + 4;
  }
  <D.24831>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    regsave_size.17 = (unsigned int) regsave_size;
    D.24833 = 208 - regsave_size.17;
    D.24834 = D.24833 & 255;
    D.24835 = D.24834 | 3800944640;
    *__ainstrp = D.24835;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3902627839;
    code = __ainstrp + 4;
  }
  if (tramp_type == 4) goto <D.24836>; else goto <D.24837>;
  <D.24836>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785359372;
    code = __ainstrp + 4;
  }
  <D.24837>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.24838 = regsave_size & 255;
    D.24839 = D.24838 | -494022656;
    D.24840 = (unsigned int) D.24839;
    *__ainstrp = D.24840;
    code = __ainstrp + 4;
  }
  D.24841 = tramp_type + 4294967294;
  if (D.24841 <= 2) goto <D.24842>; else goto <D.24843>;
  <D.24842>:
  code = emit_bx (code, 14);
  goto <D.24844>;
  <D.24843>:
  code = emit_bx (code, 12);
  <D.24844>:
  constants = code;
  *constants = mono_get_lmf_addr;
  D.24845 = constants + 4;
  D.24846 = mono_get_trampoline_func (tramp_type);
  *D.24845 = D.24846;
  if (aot == 0) goto <D.24847>; else goto <D.24848>;
  <D.24847>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = load_get_lmf_addr;
    code.0 = (int) code;
    load_get_lmf_addr.19 = (int) load_get_lmf_addr;
    D.24851 = code.0 - load_get_lmf_addr.19;
    if (D.24851 <= 7) goto <D.24852>; else goto <D.24853>;
    <D.24852>:
    load_get_lmf_addr.19 = (int) load_get_lmf_addr;
    code.0 = (int) code;
    D.24854 = load_get_lmf_addr.19 - code.0;
    D.24855 = D.24854 + 8;
    iftmp.18 = D.24855 | 2031616;
    goto <D.24856>;
    <D.24853>:
    code.0 = (int) code;
    load_get_lmf_addr.19 = (int) load_get_lmf_addr;
    D.24851 = code.0 - load_get_lmf_addr.19;
    D.24857 = D.24851 + -8;
    iftmp.18 = D.24857 | 2031616;
    <D.24856>:
    code.0 = (int) code;
    load_get_lmf_addr.19 = (int) load_get_lmf_addr;
    D.24851 = code.0 - load_get_lmf_addr.19;
    if (D.24851 > 7) goto <D.24859>; else goto <D.24860>;
    <D.24859>:
    iftmp.20 = 8388608;
    goto <D.24861>;
    <D.24860>:
    iftmp.20 = 0;
    <D.24861>:
    D.24862 = iftmp.18 | iftmp.20;
    D.24863 = D.24862 | -452984832;
    D.24864 = (unsigned int) D.24863;
    *__ainstrp = D.24864;
    load_get_lmf_addr = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = load_trampoline;
    D.24866 = code + 4;
    D.24867 = (int) D.24866;
    load_trampoline.22 = (int) load_trampoline;
    D.24869 = D.24867 - load_trampoline.22;
    if (D.24869 <= 7) goto <D.24870>; else goto <D.24871>;
    <D.24870>:
    load_trampoline.22 = (int) load_trampoline;
    D.24866 = code + 4;
    D.24867 = (int) D.24866;
    D.24872 = load_trampoline.22 - D.24867;
    D.24873 = D.24872 + 8;
    iftmp.21 = D.24873 | 2080768;
    goto <D.24874>;
    <D.24871>:
    D.24866 = code + 4;
    D.24867 = (int) D.24866;
    load_trampoline.22 = (int) load_trampoline;
    D.24869 = D.24867 - load_trampoline.22;
    D.24875 = D.24869 + -8;
    iftmp.21 = D.24875 | 2080768;
    <D.24874>:
    D.24866 = code + 4;
    D.24867 = (int) D.24866;
    load_trampoline.22 = (int) load_trampoline;
    D.24869 = D.24867 - load_trampoline.22;
    if (D.24869 > 7) goto <D.24877>; else goto <D.24878>;
    <D.24877>:
    iftmp.23 = 8388608;
    goto <D.24879>;
    <D.24878>:
    iftmp.23 = 0;
    <D.24879>:
    D.24880 = iftmp.21 | iftmp.23;
    D.24881 = D.24880 | -452984832;
    D.24882 = (unsigned int) D.24881;
    *__ainstrp = D.24882;
    load_trampoline = __ainstrp + 4;
  }
  <D.24848>:
  code = code + 8;
  code.0 = (int) code;
  buf.1 = (int) buf;
  D.24686 = code.0 - buf.1;
  mono_arch_flush_icache (buf, D.24686);
  code.0 = (int) code;
  buf.1 = (int) buf;
  D.24686 = code.0 - buf.1;
  D.24883 = D.24686 > buf_len;
  D.24884 = (long int) D.24883;
  D.24885 = __builtin_expect (D.24884, 0);
  if (D.24885 != 0) goto <D.24886>; else goto <D.24887>;
  <D.24886>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 471, "(code - buf) <= buf_len");
  <D.24887>:
  if (info != 0B) goto <D.24888>; else goto <D.24889>;
  <D.24888>:
  tramp_name = mono_get_generic_trampoline_name (tramp_type);
  code.0 = (int) code;
  buf.1 = (int) buf;
  D.24686 = code.0 - buf.1;
  D.24890 = (unsigned int) D.24686;
  D.24891 = mono_tramp_info_create (tramp_name, buf, D.24890, ji, unwind_ops);
  *info = D.24891;
  monoeg_g_free (tramp_name);
  <D.24889>:
  D.24892 = buf;
  return D.24892;
}


emit_bx (guint8 * code, int reg)
{
  int D.24894;
  int D.24897;
  unsigned int D.24898;
  int D.24900;
  unsigned int D.24901;
  guint8 * D.24902;

  D.24894 = mono_arm_thumb_supported ();
  if (D.24894 != 0) goto <D.24895>; else goto <D.24896>;
  <D.24895>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.24897 = reg | -516948208;
    D.24898 = (unsigned int) D.24897;
    *__ainstrp = D.24898;
    code = __ainstrp + 4;
  }
  goto <D.24899>;
  <D.24896>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.24900 = reg | -509546496;
    D.24901 = (unsigned int) D.24900;
    *__ainstrp = D.24901;
    code = __ainstrp + 4;
  }
  <D.24899>:
  D.24902 = code;
  return D.24902;
}


mono_arch_get_nullified_class_init_trampoline (struct MonoTrampInfo * * info)
{
  int code.24;
  int buf.25;
  int D.24906;
  unsigned int D.24909;
  struct MonoTrampInfo * D.24910;
  void * D.24911;
  guint8 * buf;
  guint8 * code;

  buf = mono_global_codeman_reserve (16);
  code = buf;
  code = emit_bx (code, 14);
  code.24 = (int) code;
  buf.25 = (int) buf;
  D.24906 = code.24 - buf.25;
  mono_arch_flush_icache (buf, D.24906);
  if (info != 0B) goto <D.24907>; else goto <D.24908>;
  <D.24907>:
  code.24 = (int) code;
  buf.25 = (int) buf;
  D.24906 = code.24 - buf.25;
  D.24909 = (unsigned int) D.24906;
  D.24910 = mono_tramp_info_create ("nullified_class_init_trampoline", buf, D.24909, 0B, 0B);
  *info = D.24910;
  <D.24908>:
  D.24911 = buf;
  return D.24911;
}


mono_arch_create_specific_trampoline (void * arg1, MonoTrampolineType tramp_type, struct MonoDomain * domain, guint32 * code_len)
{
  union mono_mutex_t * D.24913;
  _Bool D.24916;
  long int D.24917;
  long int D.24918;
  int size.26;
  guint8 * D.24922;
  _Bool D.24927;
  long int D.24928;
  long int D.24929;
  unsigned int D.24934;
  void * D.24935;
  void * * D.24936;
  int code.27;
  int buf.28;
  int D.24940;
  unsigned int D.24941;
  _Bool D.24942;
  long int D.24943;
  long int D.24944;
  void * D.24949;
  guint8 * code;
  guint8 * buf;
  guint8 * tramp;
  void * * constants;
  guint32 short_branch;
  guint32 size;

  size = 24;
  tramp = mono_get_trampoline_code (tramp_type);
  {
    int ret;

    D.24913 = &domain->lock.mutex;
    ret = pthread_mutex_lock (D.24913);
    if (ret != 0) goto <D.24914>; else goto <D.24915>;
    <D.24914>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.24915>:
    D.24916 = ret != 0;
    D.24917 = (long int) D.24916;
    D.24918 = __builtin_expect (D.24917, 0);
    if (D.24918 != 0) goto <D.24919>; else goto <D.24920>;
    <D.24919>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 513, "ret == 0");
    <D.24920>:
  }
  size.26 = (int) size;
  buf = mono_domain_code_reserve_align (domain, size.26, 4);
  code = buf;
  D.24922 = code + 4;
  short_branch = branch_for_target_reachable (D.24922, tramp);
  if (short_branch != 0) goto <D.24923>; else goto <D.24924>;
  <D.24923>:
  size = 12;
  size.26 = (int) size;
  mono_domain_code_commit (domain, code, 24, size.26);
  <D.24924>:
  {
    int ret;

    D.24913 = &domain->lock.mutex;
    ret = pthread_mutex_unlock (D.24913);
    if (ret != 0) goto <D.24925>; else goto <D.24926>;
    <D.24925>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.24926>:
    D.24927 = ret != 0;
    D.24928 = (long int) D.24927;
    D.24929 = __builtin_expect (D.24928, 0);
    if (D.24929 != 0) goto <D.24930>; else goto <D.24931>;
    <D.24930>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 523, "ret == 0");
    <D.24931>:
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3912065023;
    code = __ainstrp + 4;
  }
  if (short_branch != 0) goto <D.24932>; else goto <D.24933>;
  <D.24932>:
  constants = code;
  D.24934 = short_branch | 16777216;
  D.24935 = (void *) D.24934;
  *constants = D.24935;
  D.24936 = constants + 4;
  *D.24936 = arg1;
  code = code + 8;
  goto <D.24937>;
  <D.24933>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3852406792;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785416719;
    code = __ainstrp + 4;
  }
  code = emit_bx (code, 1);
  constants = code;
  *constants = arg1;
  D.24936 = constants + 4;
  *D.24936 = tramp;
  code = code + 8;
  <D.24937>:
  code.27 = (int) code;
  buf.28 = (int) buf;
  D.24940 = code.27 - buf.28;
  mono_arch_flush_icache (buf, D.24940);
  code.27 = (int) code;
  buf.28 = (int) buf;
  D.24940 = code.27 - buf.28;
  D.24941 = (unsigned int) D.24940;
  D.24942 = D.24941 > size;
  D.24943 = (long int) D.24942;
  D.24944 = __builtin_expect (D.24943, 0);
  if (D.24944 != 0) goto <D.24945>; else goto <D.24946>;
  <D.24945>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 576, "(code - buf) <= size");
  <D.24946>:
  if (code_len != 0B) goto <D.24947>; else goto <D.24948>;
  <D.24947>:
  code.27 = (int) code;
  buf.28 = (int) buf;
  D.24940 = code.27 - buf.28;
  D.24941 = (unsigned int) D.24940;
  *code_len = D.24941;
  <D.24948>:
  D.24949 = buf;
  return D.24949;
}


branch_for_target_reachable (guint8 * branch, guint8 * target)
{
  int target.29;
  int branch.30;
  int D.24953;
  int D.24954;
  _Bool D.24955;
  long int D.24956;
  long int D.24957;
  guint32 D.24964;
  int D.24965;
  int D.24966;
  unsigned int D.24970;
  unsigned int D.24971;
  gint diff;

  target.29 = (int) target;
  branch.30 = (int) branch;
  D.24953 = target.29 - branch.30;
  diff = D.24953 + -8;
  D.24954 = diff & 3;
  D.24955 = D.24954 != 0;
  D.24956 = (long int) D.24955;
  D.24957 = __builtin_expect (D.24956, 0);
  if (D.24957 != 0) goto <D.24958>; else goto <D.24959>;
  <D.24958>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 154, "(diff & 3) == 0");
  <D.24959>:
  if (diff >= 0) goto <D.24960>; else goto <D.24961>;
  <D.24960>:
  if (diff <= 33554431) goto <D.24962>; else goto <D.24963>;
  <D.24962>:
  D.24965 = diff >> 2;
  D.24966 = D.24965 | -369098752;
  D.24964 = (guint32) D.24966;
  return D.24964;
  <D.24963>:
  goto <D.24967>;
  <D.24961>:
  if (diff >= -33554432) goto <D.24968>; else goto <D.24969>;
  <D.24968>:
  D.24965 = diff >> 2;
  D.24970 = (unsigned int) D.24965;
  D.24971 = D.24970 & 16777215;
  D.24964 = D.24971 | 3925868544;
  return D.24964;
  <D.24969>:
  <D.24967>:
  D.24964 = 0;
  return D.24964;
}


mono_arch_get_unbox_trampoline (struct MonoMethod * m, void * addr)
{
  int size.31;
  unsigned int addr.32;
  int code.33;
  int start.34;
  int D.24977;
  unsigned int D.24978;
  _Bool D.24979;
  long int D.24980;
  long int D.24981;
  void * D.24984;
  guint8 * code;
  guint8 * start;
  struct MonoDomain * domain;
  guint32 size;

  domain = mono_domain_get ();
  size = 16;
  size.31 = (int) size;
  code = mono_domain_code_reserve (domain, size.31);
  start = code;
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3852451844;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3800039432;
    code = __ainstrp + 4;
  }
  code = emit_bx (code, 12);
  addr.32 = (unsigned int) addr;
  MEM[(guint32 *)code] = addr.32;
  code = code + 4;
  code.33 = (int) code;
  start.34 = (int) start;
  D.24977 = code.33 - start.34;
  mono_arch_flush_icache (start, D.24977);
  code.33 = (int) code;
  start.34 = (int) start;
  D.24977 = code.33 - start.34;
  D.24978 = (unsigned int) D.24977;
  D.24979 = D.24978 > size;
  D.24980 = (long int) D.24979;
  D.24981 = __builtin_expect (D.24980, 0);
  if (D.24981 != 0) goto <D.24982>; else goto <D.24983>;
  <D.24982>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 621, "(code - start) <= size");
  <D.24983>:
  D.24984 = start;
  return D.24984;
}


mono_arch_get_static_rgctx_trampoline (struct MonoMethod * m, struct MonoMethodRuntimeGenericContext * mrgctx, void * addr)
{
  unsigned int mrgctx.35;
  unsigned int addr.36;
  int code.37;
  int start.38;
  int D.24990;
  _Bool D.24991;
  long int D.24992;
  long int D.24993;
  void * D.24996;
  guint8 * code;
  guint8 * start;
  int buf_len;
  struct MonoDomain * domain;

  buf_len = 16;
  domain = mono_domain_get ();
  code = mono_domain_code_reserve (domain, buf_len);
  start = code;
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3852435456;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3852464128;
    code = __ainstrp + 4;
  }
  mrgctx.35 = (unsigned int) mrgctx;
  MEM[(guint32 *)code] = mrgctx.35;
  code = code + 4;
  addr.36 = (unsigned int) addr;
  MEM[(guint32 *)code] = addr.36;
  code = code + 4;
  code.37 = (int) code;
  start.38 = (int) start;
  D.24990 = code.37 - start.38;
  D.24991 = D.24990 > buf_len;
  D.24992 = (long int) D.24991;
  D.24993 = __builtin_expect (D.24992, 0);
  if (D.24993 != 0) goto <D.24994>; else goto <D.24995>;
  <D.24994>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 659, "(code - start) <= buf_len");
  <D.24995>:
  code.37 = (int) code;
  start.38 = (int) start;
  D.24990 = code.37 - start.38;
  mono_arch_flush_icache (start, D.24990);
  D.24996 = start;
  return D.24996;
}


mono_arch_create_rgctx_lazy_fetch_trampoline (guint32 slot, struct MonoTrampInfo * * info, gboolean aot)
{
  signed int slot.39;
  _Bool D.24999;
  int slot.40;
  unsigned int index.41;
  unsigned int D.25004;
  int D.25005;
  int D.25007;
  int D.25008;
  int code.42;
  int buf.43;
  int D.25011;
  struct MonoUnwindOp * D.25012;
  int D.25013;
  unsigned int D.25014;
  unsigned int D.25015;
  int njumps.44;
  unsigned int njumps.45;
  unsigned int D.25025;
  guint8 * * D.25026;
  _Bool D.25027;
  _Bool D.25028;
  _Bool D.25029;
  int njumps.46;
  unsigned int njumps.47;
  unsigned int D.25037;
  guint8 * * D.25038;
  int D.25039;
  unsigned int D.25040;
  unsigned int D.25041;
  int njumps.48;
  unsigned int njumps.49;
  unsigned int D.25044;
  guint8 * * D.25045;
  _Bool D.25046;
  long int D.25047;
  long int D.25048;
  unsigned int i.50;
  unsigned int D.25052;
  guint8 * * D.25053;
  guint8 * D.25054;
  gchar * D.25057;
  void * slot.51;
  struct MonoDomain * D.25060;
  _Bool D.25061;
  long int D.25062;
  long int D.25063;
  unsigned int D.25068;
  struct MonoTrampInfo * D.25069;
  void * D.25070;
  guint8 * tramp;
  guint8 * code;
  guint8 * buf;
  int tramp_size;
  guint32 code_len;
  guint8 * * rgctx_null_jumps;
  int depth;
  int index;
  int i;
  int njumps;
  gboolean mrgctx;
  struct MonoJumpInfo * ji;
  struct GSList * unwind_ops;

  try
    {
      ji = 0B;
      unwind_ops = 0B;
      slot.39 = (signed int) slot;
      D.24999 = slot.39 < 0;
      mrgctx = (gboolean) D.24999;
      slot.40 = (int) slot;
      index = slot.40 & 2147483647;
      if (mrgctx != 0) goto <D.25001>; else goto <D.25002>;
      <D.25001>:
      index.41 = (unsigned int) index;
      D.25004 = index.41 + 2;
      index = (int) D.25004;
      <D.25002>:
      depth = 0;
      <D.24545>:
      {
        int size;

        size = mono_class_rgctx_get_array_size (depth, mrgctx);
        D.25005 = size + -1;
        if (D.25005 > index) goto <D.24544>; else goto <D.25006>;
        <D.25006>:
        D.25007 = 1 - size;
        index = D.25007 + index;
      }
      depth = depth + 1;
      goto <D.24545>;
      <D.24544>:
      D.25008 = depth + 4;
      tramp_size = D.25008 * 16;
      buf = mono_global_codeman_reserve (tramp_size);
      code = buf;
      code.42 = (int) code;
      buf.43 = (int) buf;
      D.25011 = code.42 - buf.43;
      D.25012 = mono_create_unwind_op (D.25011, 12, 13, 0);
      unwind_ops = monoeg_g_slist_append (unwind_ops, D.25012);
      D.25013 = depth + 2;
      D.25014 = (unsigned int) D.25013;
      D.25015 = D.25014 * 4;
      rgctx_null_jumps = monoeg_malloc (D.25015);
      njumps = 0;
      if (0 != 0) goto <D.25016>; else goto <D.25017>;
      <D.25016>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 705, "MONO_ARCH_VTABLE_REG == ARMREG_R0");
      <D.25017>:
      if (mrgctx != 0) goto <D.25018>; else goto <D.25019>;
      <D.25018>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3785363456;
        code = __ainstrp + 4;
      }
      goto <D.25020>;
      <D.25019>:
      if (0 != 0) goto <D.25021>; else goto <D.25022>;
      <D.25021>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 712, "arm_is_imm12 (G_STRUCT_OFFSET (MonoVTable, runtime_generic_context))");
      <D.25022>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3851423772;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3813736448;
        code = __ainstrp + 4;
      }
      njumps.44 = njumps;
      njumps = njumps.44 + 1;
      njumps.45 = (unsigned int) njumps.44;
      D.25025 = njumps.45 * 4;
      D.25026 = rgctx_null_jumps + D.25025;
      *D.25026 = code;
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 167772160;
        code = __ainstrp + 4;
      }
      <D.25020>:
      i = 0;
      goto <D.24555>;
      <D.24554>:
      D.25027 = mrgctx != 0;
      D.25028 = i == 0;
      D.25029 = D.25027 & D.25028;
      if (D.25029 != 0) goto <D.25030>; else goto <D.25031>;
      <D.25030>:
      if (0 != 0) goto <D.25032>; else goto <D.25033>;
      <D.25032>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 724, "arm_is_imm12 (MONO_SIZEOF_METHOD_RUNTIME_GENERIC_CONTEXT)");
      <D.25033>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3851489288;
        code = __ainstrp + 4;
      }
      goto <D.25034>;
      <D.25031>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3851489280;
        code = __ainstrp + 4;
      }
      <D.25034>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3813736448;
        code = __ainstrp + 4;
      }
      njumps.46 = njumps;
      njumps = njumps.46 + 1;
      njumps.47 = (unsigned int) njumps.46;
      D.25037 = njumps.47 * 4;
      D.25038 = rgctx_null_jumps + D.25037;
      *D.25038 = code;
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 167772160;
        code = __ainstrp + 4;
      }
      i = i + 1;
      <D.24555>:
      if (i < depth) goto <D.24554>; else goto <D.24556>;
      <D.24556>:
      D.25039 = index + 1;
      D.25040 = (unsigned int) D.25039;
      D.25041 = D.25040 * 4;
      code = mono_arm_emit_load_imm (code, 2, D.25041);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3885043714;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3813736448;
        code = __ainstrp + 4;
      }
      njumps.48 = njumps;
      njumps = njumps.48 + 1;
      njumps.49 = (unsigned int) njumps.48;
      D.25044 = njumps.49 * 4;
      D.25045 = rgctx_null_jumps + D.25044;
      *D.25045 = code;
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 167772160;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3785359361;
        code = __ainstrp + 4;
      }
      code = emit_bx (code, 14);
      D.25013 = depth + 2;
      D.25046 = D.25013 < njumps;
      D.25047 = (long int) D.25046;
      D.25048 = __builtin_expect (D.25047, 0);
      if (D.25048 != 0) goto <D.25049>; else goto <D.25050>;
      <D.25049>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 748, "njumps <= depth + 2");
      <D.25050>:
      i = 0;
      goto <D.24562>;
      <D.24561>:
      i.50 = (unsigned int) i;
      D.25052 = i.50 * 4;
      D.25053 = rgctx_null_jumps + D.25052;
      D.25054 = *D.25053;
      arm_patch (D.25054, code);
      i = i + 1;
      <D.24562>:
      if (i < njumps) goto <D.24561>; else goto <D.24563>;
      <D.24563>:
      monoeg_g_free (rgctx_null_jumps);
      if (aot != 0) goto <D.25055>; else goto <D.25056>;
      <D.25055>:
      code.42 = (int) code;
      buf.43 = (int) buf;
      D.25011 = code.42 - buf.43;
      D.25057 = monoeg_g_strdup_printf ("specific_trampoline_lazy_fetch_%u", slot);
      ji = mono_patch_info_list_prepend (ji, D.25011, 32, D.25057);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3852406784;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3925868544;
        code = __ainstrp + 4;
      }
      MEM[(void * *)code] = 0B;
      code = code + 4;
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3886018561;
        code = __ainstrp + 4;
      }
      goto <D.25058>;
      <D.25056>:
      slot.51 = (void *) slot;
      D.25060 = mono_get_root_domain ();
      tramp = mono_arch_create_specific_trampoline (slot.51, 4, D.25060, &code_len);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3852406784;
        code = __ainstrp + 4;
      }
      code = emit_bx (code, 1);
      MEM[(void * *)code] = tramp;
      code = code + 4;
      <D.25058>:
      code.42 = (int) code;
      buf.43 = (int) buf;
      D.25011 = code.42 - buf.43;
      mono_arch_flush_icache (buf, D.25011);
      code.42 = (int) code;
      buf.43 = (int) buf;
      D.25011 = code.42 - buf.43;
      D.25061 = D.25011 > tramp_size;
      D.25062 = (long int) D.25061;
      D.25063 = __builtin_expect (D.25062, 0);
      if (D.25063 != 0) goto <D.25064>; else goto <D.25065>;
      <D.25064>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 784, "code - buf <= tramp_size");
      <D.25065>:
      if (info != 0B) goto <D.25066>; else goto <D.25067>;
      <D.25066>:
      {
        char * name;

        slot.40 = (int) slot;
        name = mono_get_rgctx_fetch_trampoline_name (slot.40);
        code.42 = (int) code;
        buf.43 = (int) buf;
        D.25011 = code.42 - buf.43;
        D.25068 = (unsigned int) D.25011;
        D.25069 = mono_tramp_info_create (name, buf, D.25068, ji, unwind_ops);
        *info = D.25069;
        monoeg_g_free (name);
      }
      <D.25067>:
      D.25070 = buf;
      return D.25070;
    }
  finally
    {
      code_len = {CLOBBER};
    }
}


mono_arch_create_general_rgctx_lazy_fetch_trampoline (struct MonoTrampInfo * * info, gboolean aot)
{
  _Bool D.25073;
  long int D.25074;
  long int D.25075;
  int code.52;
  int buf.53;
  int D.25080;
  struct MonoUnwindOp * D.25081;
  _Bool D.25084;
  long int D.25085;
  long int D.25086;
  unsigned int D.25091;
  struct MonoTrampInfo * D.25092;
  void * D.25093;
  guint8 * code;
  guint8 * buf;
  int tramp_size;
  struct MonoJumpInfo * ji;
  struct GSList * unwind_ops;

  ji = 0B;
  unwind_ops = 0B;
  D.25073 = aot == 0;
  D.25074 = (long int) D.25073;
  D.25075 = __builtin_expect (D.25074, 0);
  if (D.25075 != 0) goto <D.25076>; else goto <D.25077>;
  <D.25076>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 803, "aot");
  <D.25077>:
  tramp_size = 32;
  buf = mono_global_codeman_reserve (tramp_size);
  code = buf;
  code.52 = (int) code;
  buf.53 = (int) buf;
  D.25080 = code.52 - buf.53;
  D.25081 = mono_create_unwind_op (D.25080, 12, 13, 0);
  unwind_ops = monoeg_g_slist_append (unwind_ops, D.25081);
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3851948036;
    code = __ainstrp + 4;
  }
  if (0 != 0) goto <D.25082>; else goto <D.25083>;
  <D.25082>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 815, "MONO_ARCH_VTABLE_REG == ARMREG_R0");
  <D.25083>:
  code = emit_bx (code, 1);
  code.52 = (int) code;
  buf.53 = (int) buf;
  D.25080 = code.52 - buf.53;
  mono_arch_flush_icache (buf, D.25080);
  code.52 = (int) code;
  buf.53 = (int) buf;
  D.25080 = code.52 - buf.53;
  D.25084 = D.25080 > tramp_size;
  D.25085 = (long int) D.25084;
  D.25086 = __builtin_expect (D.25085, 0);
  if (D.25086 != 0) goto <D.25087>; else goto <D.25088>;
  <D.25087>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 820, "code - buf <= tramp_size");
  <D.25088>:
  if (info != 0B) goto <D.25089>; else goto <D.25090>;
  <D.25089>:
  code.52 = (int) code;
  buf.53 = (int) buf;
  D.25080 = code.52 - buf.53;
  D.25091 = (unsigned int) D.25080;
  D.25092 = mono_tramp_info_create ("rgctx_fetch_trampoline_general", buf, D.25091, ji, unwind_ops);
  *info = D.25092;
  <D.25090>:
  D.25093 = buf;
  return D.25093;
}


mono_arch_create_generic_class_init_trampoline (struct MonoTrampInfo * * info, gboolean aot)
{
  int byte_offset.54;
  unsigned int byte_offset.55;
  unsigned int D.25099;
  _Bool D.25100;
  long int D.25101;
  long int D.25102;
  int iftmp.56;
  int D.25108;
  int D.25109;
  int D.25111;
  int iftmp.57;
  int D.25115;
  int D.25117;
  int D.25118;
  int D.25119;
  int iftmp.58;
  int D.25124;
  int D.25125;
  unsigned int D.25126;
  unsigned char bitmask.59;
  unsigned int D.25128;
  int D.25129;
  unsigned int D.25132;
  int rot_amount.60;
  int D.25134;
  int D.25135;
  int D.25136;
  unsigned int D.25137;
  unsigned int D.25138;
  unsigned int D.25139;
  int code.61;
  int buf.62;
  int D.25144;
  struct MonoDomain * D.25146;
  _Bool D.25147;
  long int D.25148;
  long int D.25149;
  unsigned int D.25154;
  struct MonoTrampInfo * D.25155;
  void * D.25156;
  guint8 * tramp;
  guint8 * code;
  guint8 * buf;
  static int byte_offset = -1;
  static guint8 bitmask;
  guint8 * jump;
  int tramp_size;
  guint32 code_len;
  guint32 imm8;
  gint rot_amount;
  struct GSList * unwind_ops;
  struct MonoJumpInfo * ji;

  try
    {
      unwind_ops = 0B;
      ji = 0B;
      tramp_size = 64;
      buf = mono_global_codeman_reserve (tramp_size);
      code = buf;
      byte_offset.54 = byte_offset;
      if (byte_offset.54 < 0) goto <D.25096>; else goto <D.25097>;
      <D.25096>:
      {
        struct MonoVTable tmp;

        try
          {
            memset (&tmp, 0, 32);
            tmp.initialized = 1;
            mono_marshal_find_nonzero_bit_offset (&tmp, 32, &byte_offset, &bitmask);
          }
        finally
          {
            tmp = {CLOBBER};
          }
      }
      <D.25097>:
      byte_offset.54 = byte_offset;
      byte_offset.55 = (unsigned int) byte_offset.54;
      D.25099 = byte_offset.55 + 255;
      D.25100 = D.25099 > 510;
      D.25101 = (long int) D.25100;
      D.25102 = __builtin_expect (D.25101, 0);
      if (D.25102 != 0) goto <D.25103>; else goto <D.25104>;
      <D.25103>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 851, "arm_is_imm8 (byte_offset)");
      <D.25104>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        byte_offset.54 = byte_offset;
        if (byte_offset.54 < 0) goto <D.25106>; else goto <D.25107>;
        <D.25106>:
        byte_offset.54 = byte_offset;
        D.25108 = -byte_offset.54;
        D.25109 = D.25108 & 15;
        iftmp.56 = D.25109 | 64;
        goto <D.25110>;
        <D.25107>:
        byte_offset.54 = byte_offset;
        D.25111 = byte_offset.54 & 15;
        iftmp.56 = D.25111 | 64;
        <D.25110>:
        byte_offset.54 = byte_offset;
        if (byte_offset.54 < 0) goto <D.25113>; else goto <D.25114>;
        <D.25113>:
        byte_offset.54 = byte_offset;
        D.25108 = -byte_offset.54;
        D.25115 = D.25108 << 4;
        iftmp.57 = D.25115 & 3840;
        goto <D.25116>;
        <D.25114>:
        byte_offset.54 = byte_offset;
        D.25117 = byte_offset.54 << 4;
        iftmp.57 = D.25117 & 3840;
        <D.25116>:
        D.25118 = iftmp.56 | iftmp.57;
        D.25119 = D.25118 | 5292032;
        byte_offset.54 = byte_offset;
        if (byte_offset.54 >= 0) goto <D.25121>; else goto <D.25122>;
        <D.25121>:
        iftmp.58 = 8388608;
        goto <D.25123>;
        <D.25122>:
        iftmp.58 = 0;
        <D.25123>:
        D.25124 = D.25119 | iftmp.58;
        D.25125 = D.25124 | -520093552;
        D.25126 = (unsigned int) D.25125;
        *__ainstrp = D.25126;
        code = __ainstrp + 4;
      }
      bitmask.59 = bitmask;
      D.25128 = (unsigned int) bitmask.59;
      D.25129 = mono_arm_is_rotated_imm8 (D.25128, &rot_amount);
      imm8 = (guint32) D.25129;
      if (0 != 0) goto <D.25130>; else goto <D.25131>;
      <D.25130>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 854, "imm8 >= 0");
      <D.25131>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.25132 = imm8 & 255;
        rot_amount.60 = rot_amount;
        D.25134 = rot_amount.60 >> 1;
        D.25135 = D.25134 & 15;
        D.25136 = D.25135 << 8;
        D.25137 = (unsigned int) D.25136;
        D.25138 = D.25132 | D.25137;
        D.25139 = D.25138 | 3792486400;
        *__ainstrp = D.25139;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3814457344;
        code = __ainstrp + 4;
      }
      jump = code;
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 167772160;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3785420814;
        code = __ainstrp + 4;
      }
      arm_patch (jump, code);
      if (aot != 0) goto <D.25140>; else goto <D.25141>;
      <D.25140>:
      code.61 = (int) code;
      buf.62 = (int) buf;
      D.25144 = code.61 - buf.62;
      ji = mono_patch_info_list_prepend (ji, D.25144, 32, "specific_trampoline_generic_class_init");
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3852406784;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3925868544;
        code = __ainstrp + 4;
      }
      MEM[(void * *)code] = 0B;
      code = code + 4;
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3886018561;
        code = __ainstrp + 4;
      }
      goto <D.25145>;
      <D.25141>:
      D.25146 = mono_get_root_domain ();
      tramp = mono_arch_create_specific_trampoline (0B, 3, D.25146, &code_len);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3852406784;
        code = __ainstrp + 4;
      }
      code = emit_bx (code, 1);
      MEM[(void * *)code] = tramp;
      code = code + 4;
      <D.25145>:
      code.61 = (int) code;
      buf.62 = (int) buf;
      D.25144 = code.61 - buf.62;
      mono_arch_flush_icache (buf, D.25144);
      code.61 = (int) code;
      buf.62 = (int) buf;
      D.25144 = code.61 - buf.62;
      D.25147 = D.25144 > tramp_size;
      D.25148 = (long int) D.25147;
      D.25149 = __builtin_expect (D.25148, 0);
      if (D.25149 != 0) goto <D.25150>; else goto <D.25151>;
      <D.25150>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 894, "code - buf <= tramp_size");
      <D.25151>:
      if (info != 0B) goto <D.25152>; else goto <D.25153>;
      <D.25152>:
      code.61 = (int) code;
      buf.62 = (int) buf;
      D.25144 = code.61 - buf.62;
      D.25154 = (unsigned int) D.25144;
      D.25155 = mono_tramp_info_create ("generic_class_init_trampoline", buf, D.25154, ji, unwind_ops);
      *info = D.25155;
      <D.25153>:
      D.25156 = buf;
      return D.25156;
    }
  finally
    {
      code_len = {CLOBBER};
      rot_amount = {CLOBBER};
    }
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.25161;
  int D.25166;
  void * D.25168;
  unsigned int D.25169;

  D.25161 = __builtin_constant_p (__len);
  if (D.25161 != 0) goto <D.25162>; else goto <D.25163>;
  <D.25162>:
  if (__len == 0) goto <D.25164>; else goto <D.25165>;
  <D.25164>:
  D.25166 = __builtin_constant_p (__ch);
  if (D.25166 == 0) goto <D.25159>; else goto <D.25167>;
  <D.25167>:
  if (__ch != 0) goto <D.25159>; else goto <D.25160>;
  <D.25159>:
  __warn_memset_zero_len ();
  D.25168 = __dest;
  return D.25168;
  <D.25160>:
  <D.25165>:
  <D.25163>:
  D.25169 = __builtin_object_size (__dest, 0);
  D.25168 = __builtin___memset_chk (__dest, __ch, __len, D.25169);
  return D.25168;
}


mono_arch_get_call_target (guint8 * code)
{
  unsigned int D.25172;
  unsigned int D.25173;
  unsigned int D.25175;
  int ins.63;
  int D.25178;
  sizetype D.25179;
  sizetype D.25180;
  guint8 * D.25181;
  guint32 ins;

  ins = MEM[(guint32 *)code + 4294967292B];
  D.25172 = ins >> 25;
  D.25173 = D.25172 & 7;
  if (D.25173 == 5) goto <D.25174>; else goto <D.25171>;
  <D.25174>:
  D.25175 = ins & 16777216;
  if (D.25175 != 0) goto <D.25176>; else goto <D.25171>;
  <D.25176>:
  {
    gint32 disp;
    guint8 * target;

    ins.63 = (int) ins;
    disp = ins.63 & 16777215;
    D.25178 = disp * 4;
    D.25179 = (sizetype) D.25178;
    D.25180 = D.25179 + 4;
    target = code + D.25180;
    D.25181 = target;
    return D.25181;
  }
  <D.25171>:
  D.25181 = 0B;
  return D.25181;
}


mono_arch_get_plt_info_offset (guint8 * plt_entry, mgreg_t * regs, guint8 * code)
{
  guint32 D.25183;

  D.25183 = MEM[(guint32 *)plt_entry + 12B];
  return D.25183;
}


mono_arm_get_thumb_plt_entry (guint8 * code)
{
  int code.64;
  int D.25186;
  int D.25187;
  short unsigned int D.25188;
  _Bool D.25189;
  long int D.25190;
  long int D.25191;
  short unsigned int D.25194;
  int D.25195;
  int D.25196;
  short unsigned int D.25197;
  int D.25198;
  short unsigned int D.25199;
  int D.25200;
  int D.25201;
  _Bool D.25202;
  _Bool D.25203;
  int D.25204;
  int D.25205;
  int D.25206;
  int D.25207;
  int D.25208;
  int D.25209;
  _Bool D.25210;
  long int D.25211;
  long int D.25212;
  sizetype imm32.65;
  short unsigned int D.25216;
  _Bool D.25217;
  long int D.25218;
  long int D.25219;
  guint16 * D.25222;
  short unsigned int D.25223;
  _Bool D.25224;
  long int D.25225;
  long int D.25226;
  guint8 * D.25229;
  int s;
  int j1;
  int j2;
  int imm10;
  int imm11;
  int i1;
  int i2;
  int imm32;
  guint8 * bl;
  guint8 * base;
  guint16 t1;
  guint16 t2;
  guint8 * target;

  code.64 = (int) code;
  D.25186 = code.64 & -2;
  code = (guint8 *) D.25186;
  code.64 = (int) code;
  D.25187 = code.64 & -4;
  base = (guint8 *) D.25187;
  bl = code + 4294967292;
  t1 = MEM[(guint16 *)bl];
  t2 = MEM[(guint16 *)bl + 2B];
  D.25188 = t1 >> 11;
  D.25189 = D.25188 != 30;
  D.25190 = (long int) D.25189;
  D.25191 = __builtin_expect (D.25190, 0);
  if (D.25191 != 0) goto <D.25192>; else goto <D.25193>;
  <D.25192>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 1001, "(t1 >> 11) == 0x1e");
  <D.25193>:
  D.25194 = t1 >> 10;
  D.25195 = (int) D.25194;
  s = D.25195 & 1;
  D.25196 = (int) t1;
  imm10 = D.25196 & 1023;
  D.25197 = t2 >> 13;
  D.25198 = (int) D.25197;
  j1 = D.25198 & 1;
  D.25199 = t2 >> 11;
  D.25200 = (int) D.25199;
  j2 = D.25200 & 1;
  D.25201 = (int) t2;
  imm11 = D.25201 & 2047;
  D.25202 = s == j1;
  i1 = (int) D.25202;
  D.25203 = s == j2;
  i2 = (int) D.25203;
  D.25204 = imm11 << 1;
  D.25205 = imm10 << 12;
  D.25206 = D.25204 | D.25205;
  D.25207 = i2 << 22;
  D.25208 = D.25206 | D.25207;
  D.25209 = i1 << 23;
  imm32 = D.25208 | D.25209;
  D.25210 = s != 0;
  D.25211 = (long int) D.25210;
  D.25212 = __builtin_expect (D.25211, 0);
  if (D.25212 != 0) goto <D.25213>; else goto <D.25214>;
  <D.25213>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 1014, "s == 0");
  <D.25214>:
  imm32.65 = (sizetype) imm32;
  target = code + imm32.65;
  D.25216 = MEM[(guint16 *)target];
  D.25217 = D.25216 != 63711;
  D.25218 = (long int) D.25217;
  D.25219 = __builtin_expect (D.25218, 0);
  if (D.25219 != 0) goto <D.25220>; else goto <D.25221>;
  <D.25220>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 1020, "((guint16*)target) [0] == 0xf8df");
  <D.25221>:
  D.25222 = target + 2;
  D.25223 = *D.25222;
  D.25224 = D.25223 != 49160;
  D.25225 = (long int) D.25224;
  D.25226 = __builtin_expect (D.25225, 0);
  if (D.25226 != 0) goto <D.25227>; else goto <D.25228>;
  <D.25227>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 1021, "((guint16*)target) [1] == 0xc008");
  <D.25228>:
  target = target + 4;
  D.25229 = target;
  return D.25229;
}


mono_arch_get_gsharedvt_arg_trampoline (struct MonoDomain * domain, void * arg, void * addr)
{
  void * code.66;
  guint8 * code.67;
  guint8 * code.68;
  guint8 * code.69;
  guint8 * code.70;
  guint8 * code.71;
  void * * D.25237;
  guint8 * code.72;
  int code.73;
  guint8 * start.74;
  int start.75;
  int D.25242;
  _Bool D.25243;
  long int D.25244;
  long int D.25245;
  void * D.25248;
  guint8 * code;
  guint8 * start;
  int buf_len;
  void * * constants;

  try
    {
      buf_len = 24;
      code.66 = mono_domain_code_reserve (domain, buf_len);
      code = code.66;
      code.67 = code;
      start = code.67;
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3912056847;
        code.68 = __ainstrp + 4;
        code = code.68;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3852451848;
        code.69 = __ainstrp + 4;
        code = code.69;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3852460032;
        code.70 = __ainstrp + 4;
        code = code.70;
      }
      code.67 = code;
      code.71 = emit_bx (code.67, 12);
      code = code.71;
      constants = code;
      *constants = arg;
      D.25237 = constants + 4;
      *D.25237 = addr;
      code.67 = code;
      code.72 = code.67 + 8;
      code = code.72;
      code.67 = code;
      code.73 = (int) code.67;
      start.74 = start;
      start.75 = (int) start.74;
      D.25242 = code.73 - start.75;
      D.25243 = D.25242 > buf_len;
      D.25244 = (long int) D.25243;
      D.25245 = __builtin_expect (D.25244, 0);
      if (D.25245 != 0) goto <D.25246>; else goto <D.25247>;
      <D.25246>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-arm.c", 1061, "(code - start) <= buf_len");
      <D.25247>:
      nacl_domain_code_validate (domain, &start, buf_len, &code);
      start.74 = start;
      code.67 = code;
      code.73 = (int) code.67;
      start.74 = start;
      start.75 = (int) start.74;
      D.25242 = code.73 - start.75;
      mono_arch_flush_icache (start.74, D.25242);
      D.25248 = start;
      return D.25248;
    }
  finally
    {
      code = {CLOBBER};
      start = {CLOBBER};
    }
}


mono_arm_start_gsharedvt_call (struct GSharedVtCallInfo * info, void * * caller, void * * callee, void * mrgctx_reg)
{
  void * D.25251;

  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "tramp-arm.c", 1089);
  D.25251 = 0B;
  return D.25251;
}


mono_arch_get_gsharedvt_trampoline (struct MonoTrampInfo * * info, gboolean aot)
{
  void * D.25255;

  if (info != 0B) goto <D.25253>; else goto <D.25254>;
  <D.25253>:
  *info = 0B;
  <D.25254>:
  D.25255 = 0B;
  return D.25255;
}


