mono_arch_regname (int reg)
{
  unsigned int reg.0;
  const char * D.26834;
  static const char * rnames[16] = {(const char *) "arm_r0", (const char *) "arm_r1", (const char *) "arm_r2", (const char *) "arm_r3", (const char *) "arm_v1", (const char *) "arm_v2", (const char *) "arm_v3", (const char *) "arm_v4", (const char *) "arm_v5", (const char *) "arm_v6", (const char *) "arm_v7", (const char *) "arm_fp", (const char *) "arm_ip", (const char *) "arm_sp", (const char *) "arm_lr", (const char *) "arm_pc"};

  reg.0 = (unsigned int) reg;
  if (reg.0 <= 15) goto <D.26832>; else goto <D.26833>;
  <D.26832>:
  D.26834 = rnames[reg];
  return D.26834;
  <D.26833>:
  D.26834 = "unknown";
  return D.26834;
}


mono_arch_fregname (int reg)
{
  unsigned int reg.1;
  const char * D.26839;
  static const char * rnames[32] = {(const char *) "arm_f0", (const char *) "arm_f1", (const char *) "arm_f2", (const char *) "arm_f3", (const char *) "arm_f4", (const char *) "arm_f5", (const char *) "arm_f6", (const char *) "arm_f7", (const char *) "arm_f8", (const char *) "arm_f9", (const char *) "arm_f10", (const char *) "arm_f11", (const char *) "arm_f12", (const char *) "arm_f13", (const char *) "arm_f14", (const char *) "arm_f15", (const char *) "arm_f16", (const char *) "arm_f17", (const char *) "arm_f18", (const char *) "arm_f19", (const char *) "arm_f20", (const char *) "arm_f21", (const char *) "arm_f22", (const char *) "arm_f23", (const char *) "arm_f24", (const char *) "arm_f25", (const char *) "arm_f26", (const char *) "arm_f27", (const char *) "arm_f28", (const char *) "arm_f29", (const char *) "arm_f30", (const char *) "arm_f31"};

  reg.1 = (unsigned int) reg;
  if (reg.1 <= 31) goto <D.26837>; else goto <D.26838>;
  <D.26837>:
  D.26839 = rnames[reg];
  return D.26839;
  <D.26838>:
  D.26839 = "unknown";
  return D.26839;
}


mono_arm_patchable_b (guint8 * code, int cond)
{
  int D.26841;
  int D.26842;
  unsigned int D.26843;
  guint8 * D.26844;

  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.26841 = cond << 28;
    D.26842 = D.26841 | 167772160;
    D.26843 = (unsigned int) D.26842;
    *__ainstrp = D.26843;
    code = __ainstrp + 4;
  }
  D.26844 = code;
  return D.26844;
}


mono_arm_patchable_bl (guint8 * code, int cond)
{
  int D.26846;
  int D.26847;
  unsigned int D.26848;
  guint8 * D.26849;

  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.26846 = cond << 28;
    D.26847 = D.26846 | 184549376;
    D.26848 = (unsigned int) D.26847;
    *__ainstrp = D.26848;
    code = __ainstrp + 4;
  }
  D.26849 = code;
  return D.26849;
}


mono_arch_get_argument_info (struct MonoGenericSharingContext * gsctx, struct MonoMethodSignature * csig, int param_count, struct MonoJitArgumentInfo * arg_info)
{
  struct MonoType * D.26851;
  int D.26852;
  unsigned int frame_size.2;
  unsigned int D.26856;
  short unsigned int D.26857;
  unsigned char D.26858;
  unsigned char D.26859;
  short unsigned int D.26862;
  struct MonoType * D.26863;
  <unnamed-unsigned:1> D.26864;
  int D.26865;
  int D.26866;
  unsigned int align.3;
  unsigned int D.26868;
  unsigned int frame_size.4;
  unsigned int D.26870;
  unsigned int D.26871;
  unsigned int pad.5;
  unsigned int D.26873;
  unsigned int k.6;
  unsigned int D.26875;
  struct MonoJitArgumentInfo * D.26876;
  unsigned char D.26877;
  unsigned int D.26878;
  sizetype k.7;
  sizetype D.26880;
  sizetype D.26881;
  struct MonoJitArgumentInfo * D.26882;
  short unsigned int D.26883;
  unsigned int offset.8;
  unsigned int D.26885;
  unsigned int D.26886;
  unsigned int pad.9;
  unsigned int D.26888;
  int D.26889;
  int k;
  int frame_size;
  guint32 size;
  guint32 align;
  guint32 pad;
  int offset;
  struct MonoType * t;

  try
    {
      frame_size = 0;
      offset = 8;
      D.26851 = csig->ret;
      t = mini_type_get_underlying_type (gsctx, D.26851);
      D.26852 = mono_type_is_struct (t);
      if (D.26852 != 0) goto <D.26853>; else goto <D.26854>;
      <D.26853>:
      frame_size.2 = (unsigned int) frame_size;
      D.26856 = frame_size.2 + 4;
      frame_size = (int) D.26856;
      offset = offset + 4;
      <D.26854>:
      D.26857 = (short unsigned int) offset;
      arg_info->offset = D.26857;
      D.26858 = BIT_FIELD_REF <*csig, 8, 80>;
      D.26859 = D.26858 & 64;
      if (D.26859 != 0) goto <D.26860>; else goto <D.26861>;
      <D.26860>:
      frame_size.2 = (unsigned int) frame_size;
      D.26856 = frame_size.2 + 4;
      frame_size = (int) D.26856;
      offset = offset + 4;
      <D.26861>:
      D.26862 = (short unsigned int) frame_size;
      arg_info->size = D.26862;
      k = 0;
      goto <D.24784>;
      <D.24783>:
      D.26863 = csig->params[k];
      D.26864 = csig->pinvoke;
      D.26865 = (int) D.26864;
      D.26866 = mini_type_stack_size_full (0B, D.26863, &align, D.26865);
      size = (guint32) D.26866;
      align = 1;
      align.3 = align;
      align.3 = align;
      D.26868 = align.3 + 4294967295;
      frame_size.4 = (unsigned int) frame_size;
      D.26870 = D.26868 & frame_size.4;
      D.26871 = align.3 - D.26870;
      align.3 = align;
      D.26868 = align.3 + 4294967295;
      pad = D.26871 & D.26868;
      pad.5 = pad;
      frame_size.4 = (unsigned int) frame_size;
      D.26873 = pad.5 + frame_size.4;
      frame_size = (int) D.26873;
      k.6 = (unsigned int) k;
      D.26875 = k.6 * 6;
      D.26876 = arg_info + D.26875;
      D.26877 = (unsigned char) pad;
      D.26876->pad = D.26877;
      frame_size.4 = (unsigned int) frame_size;
      D.26878 = frame_size.4 + size;
      frame_size = (int) D.26878;
      k.7 = (sizetype) k;
      D.26880 = k.7 + 1;
      D.26881 = D.26880 * 6;
      D.26882 = arg_info + D.26881;
      D.26882->pad = 0;
      k.7 = (sizetype) k;
      D.26880 = k.7 + 1;
      D.26881 = D.26880 * 6;
      D.26882 = arg_info + D.26881;
      D.26883 = (short unsigned int) size;
      D.26882->size = D.26883;
      offset.8 = (unsigned int) offset;
      D.26885 = offset.8 + pad;
      offset = (int) D.26885;
      k.7 = (sizetype) k;
      D.26880 = k.7 + 1;
      D.26881 = D.26880 * 6;
      D.26882 = arg_info + D.26881;
      D.26857 = (short unsigned int) offset;
      D.26882->offset = D.26857;
      offset.8 = (unsigned int) offset;
      D.26886 = offset.8 + size;
      offset = (int) D.26886;
      k = k + 1;
      <D.24784>:
      if (k < param_count) goto <D.24783>; else goto <D.24785>;
      <D.24785>:
      align = 8;
      align.3 = align;
      align.3 = align;
      D.26868 = align.3 + 4294967295;
      frame_size.4 = (unsigned int) frame_size;
      D.26870 = D.26868 & frame_size.4;
      D.26871 = align.3 - D.26870;
      align.3 = align;
      D.26868 = align.3 + 4294967295;
      pad = D.26871 & D.26868;
      pad.9 = pad;
      frame_size.4 = (unsigned int) frame_size;
      D.26888 = pad.9 + frame_size.4;
      frame_size = (int) D.26888;
      k.6 = (unsigned int) k;
      D.26875 = k.6 * 6;
      D.26876 = arg_info + D.26875;
      D.26877 = (unsigned char) pad;
      D.26876->pad = D.26877;
      D.26889 = frame_size;
      return D.26889;
    }
  finally
    {
      align = {CLOBBER};
    }
}


mono_arch_get_delegate_invoke_impls ()
{
  unsigned int code_len.10;
  struct MonoTrampInfo * D.26893;
  struct MonoTrampInfo * D.26894;
  struct GSList * D.26895;
  struct GSList * res;
  guint8 * code;
  guint32 code_len;
  int i;
  char * tramp_name;

  try
    {
      res = 0B;
      code = get_delegate_invoke_impl (1, 0, &code_len);
      code_len.10 = code_len;
      D.26893 = mono_tramp_info_create ("delegate_invoke_impl_has_target", code, code_len.10, 0B, 0B);
      res = monoeg_g_slist_prepend (res, D.26893);
      i = 0;
      goto <D.24813>;
      <D.24812>:
      code = get_delegate_invoke_impl (0, i, &code_len);
      tramp_name = monoeg_g_strdup_printf ("delegate_invoke_impl_target_%d", i);
      code_len.10 = code_len;
      D.26894 = mono_tramp_info_create (tramp_name, code, code_len.10, 0B, 0B);
      res = monoeg_g_slist_prepend (res, D.26894);
      monoeg_g_free (tramp_name);
      i = i + 1;
      <D.24813>:
      if (i <= 3) goto <D.24812>; else goto <D.24814>;
      <D.24814>:
      D.26895 = res;
      return D.26895;
    }
  finally
    {
      code_len = {CLOBBER};
    }
}


get_delegate_invoke_impl (gboolean has_target, gboolean param_count, guint32 * code_size)
{
  int code.11;
  int start.12;
  int D.26902;
  _Bool D.26903;
  long int D.26904;
  long int D.26905;
  int D.26909;
  int D.26910;
  int D.26911;
  int D.26912;
  int D.26913;
  unsigned int D.26914;
  _Bool D.26915;
  long int D.26916;
  long int D.26917;
  unsigned int D.26922;
  void * D.26923;
  guint8 * code;
  guint8 * start;

  if (has_target != 0) goto <D.26898>; else goto <D.26899>;
  <D.26898>:
  code = mono_global_codeman_reserve (12);
  start = code;
  {
    arminstr_t * __ainstrp;

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

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

    __ainstrp = code;
    *__ainstrp = 3785420812;
    code = __ainstrp + 4;
  }
  code.11 = (int) code;
  start.12 = (int) start;
  D.26902 = code.11 - start.12;
  D.26903 = D.26902 > 12;
  D.26904 = (long int) D.26903;
  D.26905 = __builtin_expect (D.26904, 0);
  if (D.26905 != 0) goto <D.26906>; else goto <D.26907>;
  <D.26906>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 692, "(code - start) <= 12");
  <D.26907>:
  mono_arch_flush_icache (start, 12);
  goto <D.26908>;
  <D.26899>:
  {
    int size;
    int i;

    D.26909 = param_count + 2;
    size = D.26909 * 4;
    code = mono_global_codeman_reserve (size);
    start = code;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      *__ainstrp = 3851468808;
      code = __ainstrp + 4;
    }
    i = 0;
    goto <D.24801>;
    <D.24800>:
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.26910 = i + 1;
      D.26911 = i << 12;
      D.26912 = D.26910 | D.26911;
      D.26913 = D.26912 | -509607936;
      D.26914 = (unsigned int) D.26913;
      *__ainstrp = D.26914;
      code = __ainstrp + 4;
    }
    i = i + 1;
    <D.24801>:
    if (i < param_count) goto <D.24800>; else goto <D.24802>;
    <D.24802>:
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      *__ainstrp = 3785420812;
      code = __ainstrp + 4;
    }
    code.11 = (int) code;
    start.12 = (int) start;
    D.26902 = code.11 - start.12;
    D.26915 = D.26902 > size;
    D.26916 = (long int) D.26915;
    D.26917 = __builtin_expect (D.26916, 0);
    if (D.26917 != 0) goto <D.26918>; else goto <D.26919>;
    <D.26918>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 708, "(code - start) <= size");
    <D.26919>:
    mono_arch_flush_icache (start, size);
  }
  <D.26908>:
  if (code_size != 0B) goto <D.26920>; else goto <D.26921>;
  <D.26920>:
  code.11 = (int) code;
  start.12 = (int) start;
  D.26902 = code.11 - start.12;
  D.26922 = (unsigned int) D.26902;
  *code_size = D.26922;
  <D.26921>:
  D.26923 = start;
  return D.26923;
}


mono_arch_get_delegate_invoke_impl (struct MonoMethodSignature * sig, gboolean has_target)
{
  struct MonoType * D.26925;
  int D.26926;
  void * D.26929;
  _Bool D.26934;
  long int D.26935;
  long int D.26936;
  guint8 * cached.13;
  _Bool D.26944;
  long int D.26945;
  long int D.26946;
  int mono_aot_only.14;
  _Bool D.26955;
  long int D.26956;
  long int D.26957;
  short unsigned int D.26960;
  struct MonoType * D.26963;
  int D.26964;
  int D.26967;
  _Bool D.26970;
  long int D.26971;
  long int D.26972;
  _Bool D.26979;
  long int D.26980;
  long int D.26981;
  int D.26987;
  _Bool D.26990;
  long int D.26991;
  long int D.26992;
  guint8 * code;
  guint8 * start;

  D.26925 = sig->ret;
  D.26926 = mono_type_is_struct (D.26925);
  if (D.26926 != 0) goto <D.26927>; else goto <D.26928>;
  <D.26927>:
  D.26929 = 0B;
  return D.26929;
  <D.26928>:
  if (has_target != 0) goto <D.26930>; else goto <D.26931>;
  <D.26930>:
  {
    static guint8 * cached = 0B;

    {
      int ret;

      ret = pthread_mutex_lock (&mini_arch_mutex.mutex);
      if (ret != 0) goto <D.26932>; else goto <D.26933>;
      <D.26932>:
      monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
      <D.26933>:
      D.26934 = ret != 0;
      D.26935 = (long int) D.26934;
      D.26936 = __builtin_expect (D.26935, 0);
      if (D.26936 != 0) goto <D.26937>; else goto <D.26938>;
      <D.26937>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 758, "ret == 0");
      <D.26938>:
    }
    cached.13 = cached;
    if (cached.13 != 0B) goto <D.26940>; else goto <D.26941>;
    <D.26940>:
    {
      int ret;

      ret = pthread_mutex_unlock (&mini_arch_mutex.mutex);
      if (ret != 0) goto <D.26942>; else goto <D.26943>;
      <D.26942>:
      monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
      <D.26943>:
      D.26944 = ret != 0;
      D.26945 = (long int) D.26944;
      D.26946 = __builtin_expect (D.26945, 0);
      if (D.26946 != 0) goto <D.26947>; else goto <D.26948>;
      <D.26947>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 760, "ret == 0");
      <D.26948>:
    }
    D.26929 = cached;
    return D.26929;
    <D.26941>:
    mono_aot_only.14 = mono_aot_only;
    if (mono_aot_only.14 != 0) goto <D.26950>; else goto <D.26951>;
    <D.26950>:
    start = mono_aot_get_trampoline ("delegate_invoke_impl_has_target");
    goto <D.26952>;
    <D.26951>:
    start = get_delegate_invoke_impl (1, 0, 0B);
    <D.26952>:
    cached = start;
    {
      int ret;

      ret = pthread_mutex_unlock (&mini_arch_mutex.mutex);
      if (ret != 0) goto <D.26953>; else goto <D.26954>;
      <D.26953>:
      monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
      <D.26954>:
      D.26955 = ret != 0;
      D.26956 = (long int) D.26955;
      D.26957 = __builtin_expect (D.26956, 0);
      if (D.26957 != 0) goto <D.26958>; else goto <D.26959>;
      <D.26958>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 769, "ret == 0");
      <D.26959>:
    }
    D.26929 = cached;
    return D.26929;
  }
  <D.26931>:
  {
    static guint8 * cache[4] = {0B};
    int i;

    D.26960 = sig->param_count;
    if (D.26960 > 3) goto <D.26961>; else goto <D.26962>;
    <D.26961>:
    D.26929 = 0B;
    return D.26929;
    <D.26962>:
    i = 0;
    goto <D.24828>;
    <D.24827>:
    D.26963 = sig->params[i];
    D.26964 = mono_is_regsize_var (D.26963);
    if (D.26964 == 0) goto <D.26965>; else goto <D.26966>;
    <D.26965>:
    D.26929 = 0B;
    return D.26929;
    <D.26966>:
    i = i + 1;
    <D.24828>:
    D.26960 = sig->param_count;
    D.26967 = (int) D.26960;
    if (D.26967 > i) goto <D.24827>; else goto <D.24829>;
    <D.24829>:
    {
      int ret;

      ret = pthread_mutex_lock (&mini_arch_mutex.mutex);
      if (ret != 0) goto <D.26968>; else goto <D.26969>;
      <D.26968>:
      monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
      <D.26969>:
      D.26970 = ret != 0;
      D.26971 = (long int) D.26970;
      D.26972 = __builtin_expect (D.26971, 0);
      if (D.26972 != 0) goto <D.26973>; else goto <D.26974>;
      <D.26973>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 781, "ret == 0");
      <D.26974>:
    }
    D.26960 = sig->param_count;
    D.26967 = (int) D.26960;
    code = cache[D.26967];
    if (code != 0B) goto <D.26975>; else goto <D.26976>;
    <D.26975>:
    {
      int ret;

      ret = pthread_mutex_unlock (&mini_arch_mutex.mutex);
      if (ret != 0) goto <D.26977>; else goto <D.26978>;
      <D.26977>:
      monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
      <D.26978>:
      D.26979 = ret != 0;
      D.26980 = (long int) D.26979;
      D.26981 = __builtin_expect (D.26980, 0);
      if (D.26981 != 0) goto <D.26982>; else goto <D.26983>;
      <D.26982>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 784, "ret == 0");
      <D.26983>:
    }
    D.26929 = code;
    return D.26929;
    <D.26976>:
    mono_aot_only.14 = mono_aot_only;
    if (mono_aot_only.14 != 0) goto <D.26984>; else goto <D.26985>;
    <D.26984>:
    {
      char * name;

      D.26960 = sig->param_count;
      D.26967 = (int) D.26960;
      name = monoeg_g_strdup_printf ("delegate_invoke_impl_target_%d", D.26967);
      start = mono_aot_get_trampoline (name);
      monoeg_g_free (name);
    }
    goto <D.26986>;
    <D.26985>:
    D.26960 = sig->param_count;
    D.26987 = (int) D.26960;
    start = get_delegate_invoke_impl (0, D.26987, 0B);
    <D.26986>:
    D.26960 = sig->param_count;
    D.26967 = (int) D.26960;
    cache[D.26967] = start;
    {
      int ret;

      ret = pthread_mutex_unlock (&mini_arch_mutex.mutex);
      if (ret != 0) goto <D.26988>; else goto <D.26989>;
      <D.26988>:
      monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
      <D.26989>:
      D.26990 = ret != 0;
      D.26991 = (long int) D.26990;
      D.26992 = __builtin_expect (D.26991, 0);
      if (D.26992 != 0) goto <D.26993>; else goto <D.26994>;
      <D.26993>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 796, "ret == 0");
      <D.26994>:
    }
    D.26929 = start;
    return D.26929;
  }
  D.26929 = 0B;
  return D.26929;
}


mono_arch_get_this_arg_from_call (mgreg_t * regs, guint8 * code)
{
  void * D.26996;
  int D.26997;

  D.26997 = *regs;
  D.26996 = (void *) D.26997;
  return D.26996;
}


mono_arch_cpu_init ()
{
  i8_align = 8;
}


mono_arch_init ()
{
  struct MonoDebugOptions * D.26999;
  int D.27000;
  void * single_step_func_wrapper.15;
  void * breakpoint_func_wrapper.16;
  int D.27006;
  unsigned int D.27007;
  void * ss_trigger_page.17;
  int D.27009;
  unsigned int D.27010;
  void * bp_trigger_page.18;
  void * bp_trigger_page.19;
  int D.27013;
  unsigned int D.27014;
  int mono_hwcap_arm_is_v5.20;
  int mono_hwcap_arm_is_v6.21;
  int mono_hwcap_arm_is_v7.22;
  int mono_hwcap_arm_is_v7s.23;
  int mono_hwcap_arm_has_thumb.24;
  int mono_hwcap_arm_has_thumb2.25;
  int D.27023;
  const char * D.27026;
  char D.27027;
  _Bool D.27028;
  int v5_supported.26;
  _Bool D.27030;
  int v6_supported.27;
  _Bool D.27032;
  int v7_supported.28;
  int D.27034;
  _Bool D.27035;
  int v7s_supported.29;
  char * D.27037;
  _Bool D.27038;
  int thumb_supported.30;
  char * D.27040;
  _Bool D.27041;
  int thumb2_supported.31;
  const char * cpu_arch;

  InitializeCriticalSection (&mini_arch_mutex);
  D.26999 = mini_get_debug_options ();
  D.27000 = D.26999->soft_breakpoints;
  if (D.27000 != 0) goto <D.27001>; else goto <D.27002>;
  <D.27001>:
  single_step_func_wrapper.15 = create_function_wrapper (debugger_agent_single_step_from_context);
  single_step_func_wrapper = single_step_func_wrapper.15;
  breakpoint_func_wrapper.16 = create_function_wrapper (debugger_agent_breakpoint_from_context);
  breakpoint_func_wrapper = breakpoint_func_wrapper.16;
  goto <D.27005>;
  <D.27002>:
  D.27006 = mono_pagesize ();
  D.27007 = (unsigned int) D.27006;
  ss_trigger_page.17 = mono_valloc (0B, D.27007, 257);
  ss_trigger_page = ss_trigger_page.17;
  D.27009 = mono_pagesize ();
  D.27010 = (unsigned int) D.27009;
  bp_trigger_page.18 = mono_valloc (0B, D.27010, 257);
  bp_trigger_page = bp_trigger_page.18;
  bp_trigger_page.19 = bp_trigger_page;
  D.27013 = mono_pagesize ();
  D.27014 = (unsigned int) D.27013;
  mono_mprotect (bp_trigger_page.19, D.27014, 0);
  <D.27005>:
  mono_aot_register_jit_icall ("mono_arm_throw_exception", mono_arm_throw_exception);
  mono_aot_register_jit_icall ("mono_arm_throw_exception_by_token", mono_arm_throw_exception_by_token);
  mono_aot_register_jit_icall ("mono_arm_resume_unwind", mono_arm_resume_unwind);
  eabi_supported = 1;
  arm_fpu = 2;
  mono_hwcap_arm_is_v5.20 = mono_hwcap_arm_is_v5;
  v5_supported = mono_hwcap_arm_is_v5.20;
  mono_hwcap_arm_is_v6.21 = mono_hwcap_arm_is_v6;
  v6_supported = mono_hwcap_arm_is_v6.21;
  mono_hwcap_arm_is_v7.22 = mono_hwcap_arm_is_v7;
  v7_supported = mono_hwcap_arm_is_v7.22;
  mono_hwcap_arm_is_v7s.23 = mono_hwcap_arm_is_v7s;
  v7s_supported = mono_hwcap_arm_is_v7s.23;
  mono_hwcap_arm_has_thumb.24 = mono_hwcap_arm_has_thumb;
  thumb_supported = mono_hwcap_arm_has_thumb.24;
  mono_hwcap_arm_has_thumb2.25 = mono_hwcap_arm_has_thumb2;
  thumb2_supported = mono_hwcap_arm_has_thumb2.25;
  cpu_arch = monoeg_g_getenv ("MONO_CPU_ARCH");
  if (cpu_arch != 0B) goto <D.27021>; else goto <D.27022>;
  <D.27021>:
  D.27023 = strncmp (cpu_arch, "armv", 4);
  if (D.27023 == 0) goto <D.27024>; else goto <D.27025>;
  <D.27024>:
  D.27026 = cpu_arch + 4;
  D.27027 = *D.27026;
  D.27028 = D.27027 > 52;
  v5_supported.26 = (int) D.27028;
  v5_supported = v5_supported.26;
  D.27026 = cpu_arch + 4;
  D.27027 = *D.27026;
  D.27030 = D.27027 > 53;
  v6_supported.27 = (int) D.27030;
  v6_supported = v6_supported.27;
  D.27026 = cpu_arch + 4;
  D.27027 = *D.27026;
  D.27032 = D.27027 > 54;
  v7_supported.28 = (int) D.27032;
  v7_supported = v7_supported.28;
  D.27034 = strncmp (cpu_arch, "armv7s", 6);
  D.27035 = D.27034 == 0;
  v7s_supported.29 = (int) D.27035;
  v7s_supported = v7s_supported.29;
  <D.27025>:
  D.27037 = strstr (cpu_arch, "thumb");
  D.27038 = D.27037 != 0B;
  thumb_supported.30 = (int) D.27038;
  thumb_supported = thumb_supported.30;
  D.27040 = strstr (cpu_arch, "thumb2");
  D.27041 = D.27040 != 0B;
  thumb2_supported.31 = (int) D.27041;
  thumb2_supported = thumb2_supported.31;
  <D.27022>:
}


create_function_wrapper (void * function)
{
  int D.27043;
  int D.27044;
  int iftmp.32;
  int D.27049;
  int D.27050;
  unsigned int D.27051;
  int D.27052;
  int D.27053;
  int iftmp.33;
  int D.27058;
  int D.27059;
  unsigned int D.27060;
  int D.27061;
  int D.27062;
  int iftmp.34;
  int D.27067;
  int D.27068;
  unsigned int D.27069;
  int D.27070;
  int D.27071;
  int iftmp.35;
  int D.27076;
  int D.27077;
  unsigned int D.27078;
  int D.27079;
  int D.27080;
  int iftmp.36;
  int D.27085;
  int D.27086;
  unsigned int D.27087;
  int D.27088;
  int D.27089;
  int iftmp.37;
  int D.27094;
  int D.27095;
  unsigned int D.27096;
  int D.27097;
  int D.27098;
  int iftmp.38;
  int D.27103;
  int D.27104;
  unsigned int D.27105;
  int D.27106;
  int D.27107;
  int iftmp.39;
  int D.27112;
  int D.27113;
  unsigned int D.27114;
  int code.40;
  int start.41;
  int D.27117;
  void * D.27118;
  guint8 * start;
  guint8 * code;

  code = mono_global_codeman_reserve (96);
  start = code;
  {
    arminstr_t * __ainstrp;

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

    _imm12 = 52;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.27043 = ABS_EXPR <_imm12>;
      D.27044 = D.27043 | 901120;
      if (_imm12 >= 0) goto <D.27046>; else goto <D.27047>;
      <D.27046>:
      iftmp.32 = 8388608;
      goto <D.27048>;
      <D.27047>:
      iftmp.32 = 0;
      <D.27048>:
      D.27049 = D.27044 | iftmp.32;
      D.27050 = D.27049 | -452984832;
      D.27051 = (unsigned int) D.27050;
      *__ainstrp = D.27051;
      code = __ainstrp + 4;
    }
  }
  {
    int _imm12;

    _imm12 = 60;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.27052 = ABS_EXPR <_imm12>;
      D.27053 = D.27052 | 909312;
      if (_imm12 >= 0) goto <D.27055>; else goto <D.27056>;
      <D.27055>:
      iftmp.33 = 8388608;
      goto <D.27057>;
      <D.27056>:
      iftmp.33 = 0;
      <D.27057>:
      D.27058 = D.27053 | iftmp.33;
      D.27059 = D.27058 | -452984832;
      D.27060 = (unsigned int) D.27059;
      *__ainstrp = D.27060;
      code = __ainstrp + 4;
    }
  }
  {
    int _imm12;

    _imm12 = 64;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.27061 = ABS_EXPR <_imm12>;
      D.27062 = D.27061 | 909312;
      if (_imm12 >= 0) goto <D.27064>; else goto <D.27065>;
      <D.27064>:
      iftmp.34 = 8388608;
      goto <D.27066>;
      <D.27065>:
      iftmp.34 = 0;
      <D.27066>:
      D.27067 = D.27062 | iftmp.34;
      D.27068 = D.27067 | -452984832;
      D.27069 = (unsigned int) D.27068;
      *__ainstrp = D.27069;
      code = __ainstrp + 4;
    }
  }
  {
    arminstr_t * __ainstrp;

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

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

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

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

    _imm12 = 52;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.27070 = ABS_EXPR <_imm12>;
      D.27071 = D.27070 | 786432;
      if (_imm12 >= 0) goto <D.27073>; else goto <D.27074>;
      <D.27073>:
      iftmp.35 = 8388608;
      goto <D.27075>;
      <D.27074>:
      iftmp.35 = 0;
      <D.27075>:
      D.27076 = D.27071 | iftmp.35;
      D.27077 = D.27076 | -452984832;
      D.27078 = (unsigned int) D.27077;
      *__ainstrp = D.27078;
      code = __ainstrp + 4;
    }
  }
  {
    int _imm12;

    _imm12 = 56;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.27079 = ABS_EXPR <_imm12>;
      D.27080 = D.27079 | 720896;
      if (_imm12 >= 0) goto <D.27082>; else goto <D.27083>;
      <D.27082>:
      iftmp.36 = 8388608;
      goto <D.27084>;
      <D.27083>:
      iftmp.36 = 0;
      <D.27084>:
      D.27085 = D.27080 | iftmp.36;
      D.27086 = D.27085 | -452984832;
      D.27087 = (unsigned int) D.27086;
      *__ainstrp = D.27087;
      code = __ainstrp + 4;
    }
  }
  {
    arminstr_t * __ainstrp;

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

    _imm12 = 0;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.27088 = ABS_EXPR <_imm12>;
      D.27089 = D.27088 | 909312;
      if (_imm12 >= 0) goto <D.27091>; else goto <D.27092>;
      <D.27091>:
      iftmp.37 = 8388608;
      goto <D.27093>;
      <D.27092>:
      iftmp.37 = 0;
      <D.27093>:
      D.27094 = D.27089 | iftmp.37;
      D.27095 = D.27094 | -452984832;
      D.27096 = (unsigned int) D.27095;
      *__ainstrp = D.27096;
      code = __ainstrp + 4;
    }
  }
  {
    arminstr_t * __ainstrp;

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

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

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

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

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

    _imm12 = 60;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.27097 = ABS_EXPR <_imm12>;
      D.27098 = D.27097 | 720896;
      if (_imm12 >= 0) goto <D.27100>; else goto <D.27101>;
      <D.27100>:
      iftmp.38 = 8388608;
      goto <D.27102>;
      <D.27101>:
      iftmp.38 = 0;
      <D.27102>:
      D.27103 = D.27098 | iftmp.38;
      D.27104 = D.27103 | -452984832;
      D.27105 = (unsigned int) D.27104;
      *__ainstrp = D.27105;
      code = __ainstrp + 4;
    }
  }
  {
    int _imm12;

    _imm12 = 64;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.27106 = ABS_EXPR <_imm12>;
      D.27107 = D.27106 | 720896;
      if (_imm12 >= 0) goto <D.27109>; else goto <D.27110>;
      <D.27109>:
      iftmp.39 = 8388608;
      goto <D.27111>;
      <D.27110>:
      iftmp.39 = 0;
      <D.27111>:
      D.27112 = D.27107 | iftmp.39;
      D.27113 = D.27112 | -452984832;
      D.27114 = (unsigned int) D.27113;
      *__ainstrp = D.27114;
      code = __ainstrp + 4;
    }
  }
  {
    arminstr_t * __ainstrp;

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

    __ainstrp = code;
    *__ainstrp = 3902603263;
    code = __ainstrp + 4;
  }
  code.40 = (int) code;
  start.41 = (int) start;
  D.27117 = code.40 - start.41;
  mono_arch_flush_icache (start, D.27117);
  D.27118 = start;
  return D.27118;
}


mono_arch_cleanup ()
{

}


mono_arch_cpu_optimizations (guint32 * exclude_mask)
{
  guint32 D.27120;

  *exclude_mask = 0;
  D.27120 = 0;
  return D.27120;
}


mono_arch_cpu_enumerate_simd_versions ()
{
  guint32 D.27122;

  D.27122 = 0;
  return D.27122;
}


mono_arch_opcode_needs_emulation (struct MonoCompile * cfg, int opcode)
{
  int v7s_supported.42;
  gboolean D.27127;

  v7s_supported.42 = v7s_supported;
  if (v7s_supported.42 != 0) goto <D.27125>; else goto <D.27126>;
  <D.27125>:
  switch (opcode) <default: <D.24914>, case 568: <D.24910>, case 569: <D.24912>, case 570: <D.24911>, case 571: <D.24913>>
  <D.24910>:
  <D.24911>:
  <D.24912>:
  <D.24913>:
  D.27127 = 0;
  return D.27127;
  <D.24914>:
  goto <D.24915>;
  <D.24915>:
  <D.27126>:
  D.27127 = 1;
  return D.27127;
}


mono_arm_is_hard_float ()
{
  gboolean D.27130;
  <unnamed type> arm_fpu.43;
  _Bool D.27132;

  arm_fpu.43 = arm_fpu;
  D.27132 = arm_fpu.43 == 2;
  D.27130 = (gboolean) D.27132;
  return D.27130;
}


mono_arch_get_allocatable_int_vars (struct MonoCompile * cfg)
{
  struct MonoInst * * D.27134;
  unsigned int i.44;
  unsigned int D.27136;
  struct MonoInst * * D.27137;
  struct MonoMethodVar * D.27138;
  unsigned int D.27139;
  unsigned int D.27140;
  unsigned int D.27141;
  unsigned char D.27146;
  int D.27147;
  int D.27148;
  short unsigned int D.27150;
  short unsigned int D.27151;
  struct MonoGenericSharingContext * D.27152;
  struct MonoType * D.27153;
  int D.27154;
  struct MonoMethodVar * D.27157;
  int D.27158;
  _Bool D.27159;
  long int D.27160;
  long int D.27161;
  unsigned int i.45;
  unsigned int D.27165;
  _Bool D.27166;
  long int D.27167;
  long int D.27168;
  unsigned int D.27171;
  struct GList * D.27172;
  struct GList * vars;
  int i;

  vars = 0B;
  i = 0;
  goto <D.24945>;
  <D.24944>:
  {
    struct MonoInst * ins;
    struct MonoMethodVar * vmv;

    D.27134 = cfg->varinfo;
    i.44 = (unsigned int) i;
    D.27136 = i.44 * 4;
    D.27137 = D.27134 + D.27136;
    ins = *D.27137;
    D.27138 = cfg->vars;
    i.44 = (unsigned int) i;
    D.27139 = i.44 * 56;
    vmv = D.27138 + D.27139;
    D.27140 = vmv->range.first_use.abs_pos;
    D.27141 = vmv->range.last_use.abs_pos;
    if (D.27140 >= D.27141) goto <D.27142>; else goto <D.27143>;
    <D.27142>:
    // predicted unlikely by continue predictor.
    goto <D.24943>;
    <D.27143>:
    D.27146 = ins->flags;
    D.27147 = (int) D.27146;
    D.27148 = D.27147 & 20;
    if (D.27148 != 0) goto <D.27144>; else goto <D.27149>;
    <D.27149>:
    D.27150 = ins->opcode;
    D.27151 = D.27150 + 65207;
    if (D.27151 > 1) goto <D.27144>; else goto <D.27145>;
    <D.27144>:
    // predicted unlikely by continue predictor.
    goto <D.24943>;
    <D.27145>:
    D.27152 = cfg->generic_sharing_context;
    D.27153 = ins->data.op[1].vtype;
    D.27154 = is_regsize_var (D.27152, D.27153);
    if (D.27154 != 0) goto <D.27155>; else goto <D.27156>;
    <D.27155>:
    D.27138 = cfg->vars;
    i.44 = (unsigned int) i;
    D.27139 = i.44 * 56;
    D.27157 = D.27138 + D.27139;
    D.27158 = D.27157->reg;
    D.27159 = D.27158 != -1;
    D.27160 = (long int) D.27159;
    D.27161 = __builtin_expect (D.27160, 0);
    if (D.27161 != 0) goto <D.27162>; else goto <D.27163>;
    <D.27162>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 1082, "MONO_VARINFO (cfg, i)->reg == -1");
    <D.27163>:
    i.45 = (unsigned int) i;
    D.27165 = vmv->idx;
    D.27166 = i.45 != D.27165;
    D.27167 = (long int) D.27166;
    D.27168 = __builtin_expect (D.27167, 0);
    if (D.27168 != 0) goto <D.27169>; else goto <D.27170>;
    <D.27169>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 1083, "i == vmv->idx");
    <D.27170>:
    vars = mono_varlist_insert_sorted (cfg, vars, vmv, 0);
    <D.27156>:
  }
  <D.24943>:
  i = i + 1;
  <D.24945>:
  i.45 = (unsigned int) i;
  D.27171 = cfg->num_varinfo;
  if (i.45 < D.27171) goto <D.24944>; else goto <D.24946>;
  <D.24946>:
  D.27172 = vars;
  return D.27172;
}


is_regsize_var (struct MonoGenericSharingContext * gsctx, struct MonoType * t)
{
  unsigned char D.27174;
  unsigned char D.27175;
  gboolean D.27178;
  unsigned char D.27179;
  int D.27180;
  int D.27181;

  D.27174 = BIT_FIELD_REF <*t, 8, 56>;
  D.27175 = D.27174 & 64;
  if (D.27175 != 0) goto <D.27176>; else goto <D.27177>;
  <D.27176>:
  D.27178 = 1;
  return D.27178;
  <D.27177>:
  t = mini_type_get_underlying_type (gsctx, t);
  D.27179 = t->type;
  D.27180 = (int) D.27179;
  switch (D.27180) <default: <D.27184>, case 8: <D.24923>, case 9: <D.24924>, case 14: <D.24930>, case 15: <D.24927>, case 17: <D.24935>, case 18: <D.24931>, case 20: <D.24933>, case 21: <D.24934>, case 24: <D.24925>, case 25: <D.24926>, case 27: <D.24928>, case 28: <D.24929>, case 29: <D.24932>>
  <D.24923>:
  <D.24924>:
  <D.24925>:
  <D.24926>:
  <D.24927>:
  <D.24928>:
  D.27178 = 1;
  return D.27178;
  <D.24929>:
  <D.24930>:
  <D.24931>:
  <D.24932>:
  <D.24933>:
  D.27178 = 1;
  return D.27178;
  <D.24934>:
  D.27181 = mono_type_generic_inst_is_valuetype (t);
  if (D.27181 == 0) goto <D.27182>; else goto <D.27183>;
  <D.27182>:
  D.27178 = 1;
  return D.27178;
  <D.27183>:
  D.27178 = 0;
  return D.27178;
  <D.24935>:
  D.27178 = 0;
  return D.27178;
  <D.27184>:
  D.27178 = 0;
  return D.27178;
}


mono_arch_get_global_int_regs (struct MonoCompile * cfg)
{
  unsigned int D.27186;
  unsigned int D.27187;
  int D.27190;
  int iphone_abi.46;
  unsigned char D.27197;
  unsigned char D.27198;
  unsigned char D.27201;
  unsigned char D.27202;
  struct GList * D.27205;
  struct GList * regs;

  regs = 0B;
  mono_arch_compute_omit_fp (cfg);
  D.27186 = cfg->flags;
  D.27187 = D.27186 & 2;
  if (D.27187 != 0) goto <D.27188>; else goto <D.27189>;
  <D.27188>:
  cfg->uses_rgctx_reg = 1;
  <D.27189>:
  D.27190 = cfg->arch.omit_fp;
  if (D.27190 != 0) goto <D.27191>; else goto <D.27192>;
  <D.27191>:
  regs = monoeg_g_list_prepend (regs, 11B);
  <D.27192>:
  regs = monoeg_g_list_prepend (regs, 4B);
  regs = monoeg_g_list_prepend (regs, 5B);
  regs = monoeg_g_list_prepend (regs, 6B);
  iphone_abi.46 = iphone_abi;
  if (iphone_abi.46 != 0) goto <D.27194>; else goto <D.27195>;
  <D.27194>:
  regs = monoeg_g_list_prepend (regs, 10B);
  goto <D.27196>;
  <D.27195>:
  regs = monoeg_g_list_prepend (regs, 7B);
  <D.27196>:
  D.27197 = BIT_FIELD_REF <*cfg, 8, 3392>;
  D.27198 = D.27197 & 64;
  if (D.27198 == 0) goto <D.27199>; else goto <D.27200>;
  <D.27199>:
  D.27201 = BIT_FIELD_REF <*cfg, 8, 3424>;
  D.27202 = D.27201 & 2;
  if (D.27202 == 0) goto <D.27203>; else goto <D.27204>;
  <D.27203>:
  regs = monoeg_g_list_prepend (regs, 8B);
  <D.27204>:
  <D.27200>:
  D.27205 = regs;
  return D.27205;
}


mono_arch_compute_omit_fp (struct MonoCompile * cfg)
{
  int D.27207;
  struct MonoMethod * D.27210;
  void * D.27211;
  struct MonoGenericSharingContext * D.27214;
  struct MonoMemPool * D.27215;
  struct CallInfo * D.27216;
  unsigned char D.27217;
  unsigned char D.27218;
  int D.27221;
  unsigned int D.27224;
  unsigned int D.27225;
  short unsigned int D.27228;
  short unsigned int D.27229;
  unsigned int D.27232;
  short unsigned int D.27235;
  short unsigned int D.27236;
  struct MonoTraceSpec * mono_jit_trace_calls.47;
  int D.27244;
  unsigned int D.27245;
  unsigned int D.27246;
  <unnamed type> D.27247;
  unsigned int D.27248;
  _Bool D.27249;
  _Bool D.27250;
  _Bool D.27251;
  short unsigned int D.27254;
  int D.27255;
  <unnamed-unsigned:1> D.27256;
  int D.27257;
  int D.27258;
  unsigned int D.27259;
  struct MonoInst * * D.27260;
  unsigned int i.48;
  unsigned int D.27262;
  struct MonoInst * * D.27263;
  struct MonoType * D.27264;
  int D.27265;
  unsigned int i.49;
  unsigned int D.27267;
  struct MonoMethodSignature * sig;
  struct MonoMethodHeader * header;
  int i;
  int locals_size;
  struct CallInfo * cinfo;

  D.27207 = cfg->arch.omit_fp_computed;
  if (D.27207 != 0) goto <D.27208>; else goto <D.27209>;
  <D.27208>:
  return;
  <D.27209>:
  header = cfg->header;
  D.27210 = cfg->method;
  sig = mono_method_signature (D.27210);
  D.27211 = cfg->arch.cinfo;
  if (D.27211 == 0B) goto <D.27212>; else goto <D.27213>;
  <D.27212>:
  D.27214 = cfg->generic_sharing_context;
  D.27215 = cfg->mempool;
  D.27216 = get_call_info (D.27214, D.27215, sig);
  cfg->arch.cinfo = D.27216;
  <D.27213>:
  cinfo = cfg->arch.cinfo;
  cfg->arch.omit_fp = 1;
  cfg->arch.omit_fp_computed = 1;
  D.27217 = BIT_FIELD_REF <*cfg, 8, 3408>;
  D.27218 = D.27217 & 32;
  if (D.27218 != 0) goto <D.27219>; else goto <D.27220>;
  <D.27219>:
  cfg->arch.omit_fp = 0;
  <D.27220>:
  D.27221 = debug_omit_fp ();
  if (D.27221 == 0) goto <D.27222>; else goto <D.27223>;
  <D.27222>:
  cfg->arch.omit_fp = 0;
  <D.27223>:
  D.27224 = cfg->flags;
  D.27225 = D.27224 & 1;
  if (D.27225 != 0) goto <D.27226>; else goto <D.27227>;
  <D.27226>:
  cfg->arch.omit_fp = 0;
  <D.27227>:
  D.27228 = BIT_FIELD_REF <*header, 16, 80>;
  D.27229 = D.27228 & 32767;
  if (D.27229 != 0) goto <D.27230>; else goto <D.27231>;
  <D.27230>:
  cfg->arch.omit_fp = 0;
  <D.27231>:
  D.27232 = cfg->param_area;
  if (D.27232 != 0) goto <D.27233>; else goto <D.27234>;
  <D.27233>:
  cfg->arch.omit_fp = 0;
  <D.27234>:
  D.27235 = BIT_FIELD_REF <*sig, 16, 80>;
  D.27236 = D.27235 & 319;
  if (D.27236 == 5) goto <D.27237>; else goto <D.27238>;
  <D.27237>:
  cfg->arch.omit_fp = 0;
  <D.27238>:
  mono_jit_trace_calls.47 = mono_jit_trace_calls;
  if (mono_jit_trace_calls.47 != 0B) goto <D.27243>; else goto <D.27239>;
  <D.27243>:
  D.27210 = cfg->method;
  D.27244 = mono_trace_eval (D.27210);
  if (D.27244 != 0) goto <D.27240>; else goto <D.27239>;
  <D.27239>:
  D.27245 = cfg->prof_options;
  D.27246 = D.27245 & 4096;
  if (D.27246 != 0) goto <D.27240>; else goto <D.27241>;
  <D.27240>:
  cfg->arch.omit_fp = 0;
  <D.27241>:
  i = 0;
  goto <D.25112>;
  <D.25111>:
  {
    struct ArgInfo * ainfo;

    ainfo = &cinfo->args[i];
    D.27247 = ainfo->storage;
    D.27248 = D.27247 + 4294967293;
    D.27249 = D.27248 <= 1;
    D.27250 = D.27247 == 6;
    D.27251 = D.27249 | D.27250;
    if (D.27251 != 0) goto <D.27252>; else goto <D.27253>;
    <D.27252>:
    cfg->arch.omit_fp = 0;
    <D.27253>:
  }
  i = i + 1;
  <D.25112>:
  D.27254 = sig->param_count;
  D.27255 = (int) D.27254;
  D.27256 = sig->hasthis;
  D.27257 = (int) D.27256;
  D.27258 = D.27255 + D.27257;
  if (D.27258 > i) goto <D.25111>; else goto <D.25113>;
  <D.25113>:
  locals_size = 0;
  D.27259 = cfg->locals_start;
  i = (int) D.27259;
  goto <D.25117>;
  <D.25116>:
  {
    struct MonoInst * ins;
    int ialign;

    try
      {
        D.27260 = cfg->varinfo;
        i.48 = (unsigned int) i;
        D.27262 = i.48 * 4;
        D.27263 = D.27260 + D.27262;
        ins = *D.27263;
        D.27264 = ins->data.op[1].vtype;
        D.27265 = mono_type_size (D.27264, &ialign);
        locals_size = D.27265 + locals_size;
      }
    finally
      {
        ialign = {CLOBBER};
      }
  }
  i = i + 1;
  <D.25117>:
  i.49 = (unsigned int) i;
  D.27267 = cfg->num_varinfo;
  if (i.49 < D.27267) goto <D.25116>; else goto <D.25118>;
  <D.25118>:
}


get_call_info (struct MonoGenericSharingContext * gsctx, struct MonoMemPool * mp, struct MonoMethodSignature * sig)
{
  <unnamed-unsigned:1> D.27269;
  int D.27270;
  short unsigned int D.27271;
  int D.27272;
  <unnamed-unsigned:1> D.27273;
  unsigned int n.50;
  unsigned int D.27277;
  unsigned int D.27278;
  struct MonoType * D.27280;
  int D.27281;
  struct MonoClass * D.27287;
  int D.27288;
  unsigned int D.27289;
  unsigned char D.27294;
  int D.27296;
  int D.27297;
  int D.27303;
  unsigned char D.27306;
  unsigned char D.27307;
  struct MonoType * D.27310;
  struct MonoType * D.27311;
  int D.27312;
  struct ArgInfo[1] * D.27315;
  struct ArgInfo * D.27317;
  struct ArgInfo * D.27318;
  unsigned char D.27323;
  short int D.27326;
  unsigned int D.27327;
  struct ArgInfo * D.27330;
  struct MonoType * D.27331;
  unsigned char D.27332;
  unsigned char D.27333;
  unsigned char D.27336;
  int D.27337;
  int D.27338;
  int D.27341;
  int D.27344;
  _Bool D.27345;
  long int D.27346;
  long int D.27347;
  <unnamed type> D.27350;
  unsigned int align_size.51;
  unsigned int D.27358;
  unsigned int D.27359;
  int eabi_supported.52;
  unsigned int align.53;
  unsigned int gr.54;
  unsigned int D.27367;
  unsigned int gr.55;
  short unsigned int D.27373;
  unsigned int D.27375;
  unsigned char D.27376;
  <unnamed-unsigned:4> D.27377;
  short unsigned int D.27378;
  short unsigned int D.27379;
  unsigned char D.27380;
  unsigned int n_in_regs.56;
  unsigned int gr.57;
  unsigned int stack_size.58;
  int stack_size.59;
  unsigned int nwords.60;
  unsigned int D.27386;
  unsigned int stack_size.61;
  int D.27394;
  _Bool D.27395;
  long int D.27396;
  long int D.27397;
  unsigned char D.27400;
  int D.27401;
  unsigned int D.27402;
  int D.27410;
  int D.27413;
  _Bool D.27416;
  long int D.27417;
  long int D.27418;
  <unnamed type> D.27421;
  int D.27424;
  _Bool D.27425;
  long int D.27426;
  long int D.27427;
  unsigned char D.27432;
  int D.27433;
  unsigned int D.27434;
  unsigned int stack_size.62;
  struct CallInfo * D.27436;
  guint i;
  guint gr;
  guint fpr;
  guint pstart;
  gint float_spare;
  int n;
  struct MonoType * simpletype;
  guint32 stack_size;
  struct CallInfo * cinfo;
  gboolean is_pinvoke;
  struct MonoType * t;

  try
    {
      D.27269 = sig->hasthis;
      D.27270 = (int) D.27269;
      D.27271 = sig->param_count;
      D.27272 = (int) D.27271;
      n = D.27270 + D.27272;
      stack_size = 0;
      D.27273 = sig->pinvoke;
      is_pinvoke = (gboolean) D.27273;
      if (mp != 0B) goto <D.27274>; else goto <D.27275>;
      <D.27274>:
      n.50 = (unsigned int) n;
      D.27277 = n.50 * 20;
      D.27278 = D.27277 + 76;
      cinfo = mono_mempool_alloc0 (mp, D.27278);
      goto <D.27279>;
      <D.27275>:
      n.50 = (unsigned int) n;
      D.27277 = n.50 * 20;
      D.27278 = D.27277 + 76;
      cinfo = monoeg_malloc0 (D.27278);
      <D.27279>:
      cinfo->nargs = n;
      gr = 0;
      fpr = 0;
      float_spare = -1;
      D.27280 = sig->ret;
      t = mini_type_get_underlying_type (gsctx, D.27280);
      D.27281 = mono_type_is_struct (t);
      if (D.27281 != 0) goto <D.27282>; else goto <D.27283>;
      <D.27282>:
      {
        guint32 align;

        try
          {
            if (is_pinvoke != 0) goto <D.27286>; else goto <D.27284>;
            <D.27286>:
            D.27287 = mono_class_from_mono_type (t);
            D.27288 = mono_class_native_size (D.27287, &align);
            D.27289 = (unsigned int) D.27288;
            if (D.27289 <= 4) goto <D.27290>; else goto <D.27284>;
            <D.27290>:
            cinfo->ret.storage = 6;
            goto <D.27285>;
            <D.27284>:
            cinfo->vtype_retaddr = 1;
            <D.27285>:
          }
        finally
          {
            align = {CLOBBER};
          }
      }
      goto <D.27291>;
      <D.27283>:
      D.27294 = t->type;
      if (D.27294 != 21) goto <D.27292>; else goto <D.27295>;
      <D.27295>:
      D.27296 = mono_type_generic_inst_is_valuetype (t);
      if (D.27296 != 0) goto <D.27292>; else goto <D.27293>;
      <D.27292>:
      D.27297 = mini_is_gsharedvt_type_gsctx (gsctx, t);
      if (D.27297 != 0) goto <D.27298>; else goto <D.27299>;
      <D.27298>:
      cinfo->vtype_retaddr = 1;
      <D.27299>:
      <D.27293>:
      <D.27291>:
      pstart = 0;
      n = 0;
      D.27303 = cinfo->vtype_retaddr;
      if (D.27303 != 0) goto <D.27304>; else goto <D.27300>;
      <D.27304>:
      if (is_pinvoke == 0) goto <D.27305>; else goto <D.27300>;
      <D.27305>:
      D.27306 = BIT_FIELD_REF <*sig, 8, 80>;
      D.27307 = D.27306 & 64;
      if (D.27307 != 0) goto <D.27301>; else goto <D.27308>;
      <D.27308>:
      D.27271 = sig->param_count;
      if (D.27271 != 0) goto <D.27309>; else goto <D.27300>;
      <D.27309>:
      D.27310 = sig->params[0];
      D.27311 = mini_type_get_underlying_type (gsctx, D.27310);
      D.27312 = mono_type_is_reference (D.27311);
      if (D.27312 != 0) goto <D.27301>; else goto <D.27300>;
      <D.27301>:
      D.27306 = BIT_FIELD_REF <*sig, 8, 80>;
      D.27307 = D.27306 & 64;
      if (D.27307 != 0) goto <D.27313>; else goto <D.27314>;
      <D.27313>:
      D.27315 = &cinfo->args;
      add_general (&gr, &stack_size, D.27315, 1);
      goto <D.27316>;
      <D.27314>:
      D.27269 = sig->hasthis;
      D.27270 = (int) D.27269;
      D.27317 = &cinfo->args[D.27270];
      add_general (&gr, &stack_size, D.27317, 1);
      pstart = 1;
      <D.27316>:
      n = n + 1;
      D.27318 = &cinfo->ret;
      add_general (&gr, &stack_size, D.27318, 1);
      cinfo->vret_arg_index = 1;
      goto <D.27302>;
      <D.27300>:
      D.27306 = BIT_FIELD_REF <*sig, 8, 80>;
      D.27307 = D.27306 & 64;
      if (D.27307 != 0) goto <D.27319>; else goto <D.27320>;
      <D.27319>:
      D.27315 = &cinfo->args;
      add_general (&gr, &stack_size, D.27315, 1);
      n = n + 1;
      <D.27320>:
      D.27303 = cinfo->vtype_retaddr;
      if (D.27303 != 0) goto <D.27321>; else goto <D.27322>;
      <D.27321>:
      D.27318 = &cinfo->ret;
      add_general (&gr, &stack_size, D.27318, 1);
      <D.27322>:
      <D.27302>:
      i = pstart;
      goto <D.25067>;
      <D.25066>:
      {
        struct ArgInfo * ainfo;

        ainfo = &cinfo->args[n];
        D.27306 = BIT_FIELD_REF <*sig, 8, 80>;
        D.27323 = D.27306 & 63;
        if (D.27323 == 5) goto <D.27324>; else goto <D.27325>;
        <D.27324>:
        D.27326 = sig->sentinelpos;
        D.27327 = (unsigned int) D.27326;
        if (D.27327 == i) goto <D.27328>; else goto <D.27329>;
        <D.27328>:
        gr = 4;
        fpr = 16;
        D.27330 = &cinfo->sig_cookie;
        add_general (&gr, &stack_size, D.27330, 1);
        <D.27329>:
        <D.27325>:
        D.27331 = sig->params[i];
        D.27332 = BIT_FIELD_REF <*D.27331, 8, 56>;
        D.27333 = D.27332 & 64;
        if (D.27333 != 0) goto <D.27334>; else goto <D.27335>;
        <D.27334>:
        add_general (&gr, &stack_size, ainfo, 1);
        n = n + 1;
        // predicted unlikely by continue predictor.
        goto <D.25021>;
        <D.27335>:
        D.27331 = sig->params[i];
        simpletype = mini_type_get_underlying_type (gsctx, D.27331);
        D.27336 = simpletype->type;
        D.27337 = (int) D.27336;
        switch (D.27337) <default: <D.25064>, case 2: <D.25022>, case 3: <D.25026>, case 4: <D.25023>, case 5: <D.25024>, case 6: <D.25027>, case 7: <D.25028>, case 8: <D.25029>, case 9: <D.25030>, case 10: <D.25055>, case 11: <D.25054>, case 12: <D.25056>, case 13: <D.25057>, case 14: <D.25037>, case 15: <D.25033>, case 17: <D.25046>, case 18: <D.25035>, case 19: <D.25058>, case 20: <D.25039>, case 21: <D.25040>, case 22: <D.25045>, case 24: <D.25031>, case 25: <D.25032>, case 27: <D.25034>, case 28: <D.25036>, case 29: <D.25038>, case 30: <D.25059>>
        <D.25022>:
        <D.25023>:
        <D.25024>:
        cinfo->args[n].size = 1;
        add_general (&gr, &stack_size, ainfo, 1);
        n = n + 1;
        goto <D.25025>;
        <D.25026>:
        <D.25027>:
        <D.25028>:
        cinfo->args[n].size = 2;
        add_general (&gr, &stack_size, ainfo, 1);
        n = n + 1;
        goto <D.25025>;
        <D.25029>:
        <D.25030>:
        cinfo->args[n].size = 4;
        add_general (&gr, &stack_size, ainfo, 1);
        n = n + 1;
        goto <D.25025>;
        <D.25031>:
        <D.25032>:
        <D.25033>:
        <D.25034>:
        <D.25035>:
        <D.25036>:
        <D.25037>:
        <D.25038>:
        <D.25039>:
        cinfo->args[n].size = 4;
        add_general (&gr, &stack_size, ainfo, 1);
        n = n + 1;
        goto <D.25025>;
        <D.25040>:
        D.27338 = mono_type_generic_inst_is_valuetype (simpletype);
        if (D.27338 == 0) goto <D.27339>; else goto <D.27340>;
        <D.27339>:
        cinfo->args[n].size = 4;
        add_general (&gr, &stack_size, ainfo, 1);
        n = n + 1;
        goto <D.25025>;
        <D.27340>:
        D.27341 = mini_is_gsharedvt_type_gsctx (gsctx, simpletype);
        if (D.27341 != 0) goto <D.27342>; else goto <D.27343>;
        <D.27342>:
        D.27344 = mini_is_gsharedvt_type_gsctx (gsctx, simpletype);
        D.27345 = D.27344 == 0;
        D.27346 = (long int) D.27345;
        D.27347 = __builtin_expect (D.27346, 0);
        if (D.27347 != 0) goto <D.27348>; else goto <D.27349>;
        <D.27348>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 1496, "mini_is_gsharedvt_type_gsctx (gsctx, simpletype)");
        <D.27349>:
        add_general (&gr, &stack_size, ainfo, 1);
        D.27350 = ainfo->storage;
        switch (D.27350) <default: <D.25044>, case 1: <D.25041>, case 3: <D.25043>>
        <D.25041>:
        ainfo->storage = 8;
        goto <D.25042>;
        <D.25043>:
        ainfo->storage = 9;
        goto <D.25042>;
        <D.25044>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 1506);
        <D.25042>:
        n = n + 1;
        goto <D.25025>;
        <D.27343>:
        <D.25045>:
        <D.25046>:
        {
          gint size;
          int align_size;
          int nwords;
          guint32 align;

          try
            {
              D.27336 = simpletype->type;
              if (D.27336 == 22) goto <D.27351>; else goto <D.27352>;
              <D.27351>:
              size = 12;
              align = 4;
              goto <D.27353>;
              <D.27352>:
              {
                struct MonoClass * klass;

                D.27331 = sig->params[i];
                klass = mono_class_from_mono_type (D.27331);
                if (is_pinvoke != 0) goto <D.27354>; else goto <D.27355>;
                <D.27354>:
                size = mono_class_native_size (klass, &align);
                goto <D.27356>;
                <D.27355>:
                size = mini_type_stack_size_full (gsctx, simpletype, &align, 0);
                <D.27356>:
              }
              <D.27353>:
              align_size = size;
              nwords = 0;
              align_size.51 = (unsigned int) align_size;
              D.27358 = align_size.51 + 3;
              align_size = (int) D.27358;
              align_size = align_size & -4;
              align_size.51 = (unsigned int) align_size;
              D.27358 = align_size.51 + 3;
              D.27359 = D.27358 / 4;
              nwords = (int) D.27359;
              ainfo->storage = 6;
              ainfo->struct_size = size;
              eabi_supported.52 = eabi_supported;
              if (eabi_supported.52 != 0) goto <D.27361>; else goto <D.27362>;
              <D.27361>:
              align.53 = align;
              if (align.53 > 7) goto <D.27364>; else goto <D.27365>;
              <D.27364>:
              gr.54 = gr;
              D.27367 = gr.54 & 1;
              if (D.27367 != 0) goto <D.27368>; else goto <D.27369>;
              <D.27368>:
              gr.54 = gr;
              gr.55 = gr.54 + 1;
              gr = gr.55;
              <D.27369>:
              <D.27365>:
              <D.27362>:
              gr.54 = gr;
              if (gr.54 > 3) goto <D.27371>; else goto <D.27372>;
              <D.27371>:
              ainfo->size = 0;
              D.27373 = (short unsigned int) nwords;
              ainfo->vtsize = D.27373;
              goto <D.27374>;
              <D.27372>:
              {
                int rest;
                int n_in_regs;

                gr.54 = gr;
                D.27375 = 4 - gr.54;
                rest = (int) D.27375;
                n_in_regs = MIN_EXPR <nwords, rest>;
                D.27376 = (unsigned char) n_in_regs;
                D.27377 = (<unnamed-unsigned:4>) D.27376;
                ainfo->size = D.27377;
                D.27373 = (short unsigned int) nwords;
                D.27378 = (short unsigned int) n_in_regs;
                D.27379 = D.27373 - D.27378;
                ainfo->vtsize = D.27379;
                gr.54 = gr;
                D.27380 = (unsigned char) gr.54;
                ainfo->reg = D.27380;
                gr.54 = gr;
                n_in_regs.56 = (unsigned int) n_in_regs;
                gr.57 = gr.54 + n_in_regs.56;
                gr = gr.57;
                nwords = nwords - n_in_regs;
              }
              <D.27374>:
              stack_size.58 = stack_size;
              stack_size.59 = (int) stack_size.58;
              ainfo->offset = stack_size.59;
              nwords.60 = (unsigned int) nwords;
              D.27386 = nwords.60 * 4;
              stack_size.58 = stack_size;
              stack_size.61 = D.27386 + stack_size.58;
              stack_size = stack_size.61;
              n = n + 1;
              goto <D.25025>;
            }
          finally
            {
              align = {CLOBBER};
            }
        }
        <D.25054>:
        <D.25055>:
        ainfo->size = 8;
        add_general (&gr, &stack_size, ainfo, 0);
        n = n + 1;
        goto <D.25025>;
        <D.25056>:
        ainfo->size = 4;
        if (1 != 0) goto <D.27388>; else goto <D.27389>;
        <D.27388>:
        add_float (&fpr, &stack_size, ainfo, 0, &float_spare);
        goto <D.27390>;
        <D.27389>:
        add_general (&gr, &stack_size, ainfo, 1);
        <D.27390>:
        n = n + 1;
        goto <D.25025>;
        <D.25057>:
        ainfo->size = 8;
        if (1 != 0) goto <D.27391>; else goto <D.27392>;
        <D.27391>:
        add_float (&fpr, &stack_size, ainfo, 1, &float_spare);
        goto <D.27393>;
        <D.27392>:
        add_general (&gr, &stack_size, ainfo, 0);
        <D.27393>:
        n = n + 1;
        goto <D.25025>;
        <D.25058>:
        <D.25059>:
        D.27394 = mini_is_gsharedvt_type_gsctx (gsctx, simpletype);
        D.27395 = D.27394 == 0;
        D.27396 = (long int) D.27395;
        D.27397 = __builtin_expect (D.27396, 0);
        if (D.27397 != 0) goto <D.27398>; else goto <D.27399>;
        <D.27398>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 1590, "mini_is_gsharedvt_type_gsctx (gsctx, simpletype)");
        <D.27399>:
        add_general (&gr, &stack_size, ainfo, 1);
        D.27350 = ainfo->storage;
        switch (D.27350) <default: <D.25063>, case 1: <D.25060>, case 3: <D.25062>>
        <D.25060>:
        ainfo->storage = 8;
        goto <D.25061>;
        <D.25062>:
        ainfo->storage = 9;
        goto <D.25061>;
        <D.25063>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 1600);
        <D.25061>:
        n = n + 1;
        goto <D.25025>;
        <D.25064>:
        D.27331 = sig->params[i];
        D.27400 = D.27331->type;
        D.27401 = (int) D.27400;
        monoeg_g_log (0B, 4, "Can\'t trampoline 0x%x", D.27401);
        <D.25065>:
        goto <D.25065>;
        <D.25025>:
      }
      <D.25021>:
      i = i + 1;
      <D.25067>:
      D.27271 = sig->param_count;
      D.27402 = (unsigned int) D.27271;
      if (D.27402 > i) goto <D.25066>; else goto <D.25068>;
      <D.25068>:
      D.27306 = BIT_FIELD_REF <*sig, 8, 80>;
      D.27323 = D.27306 & 63;
      if (D.27323 == 5) goto <D.27403>; else goto <D.27404>;
      <D.27403>:
      D.27326 = sig->sentinelpos;
      D.27327 = (unsigned int) D.27326;
      if (D.27327 == i) goto <D.27405>; else goto <D.27406>;
      <D.27405>:
      gr = 4;
      fpr = 16;
      D.27330 = &cinfo->sig_cookie;
      add_general (&gr, &stack_size, D.27330, 1);
      <D.27406>:
      <D.27404>:
      D.27280 = sig->ret;
      simpletype = mini_type_get_underlying_type (gsctx, D.27280);
      D.27336 = simpletype->type;
      D.27337 = (int) D.27336;
      switch (D.27337) <default: <D.25097>, case 1: <D.25096>, case 2: <D.25069>, case 3: <D.25074>, case 4: <D.25070>, case 5: <D.25071>, case 6: <D.25072>, case 7: <D.25073>, case 8: <D.25075>, case 9: <D.25076>, case 10: <D.25088>, case 11: <D.25087>, case 12: <D.25089>, case 13: <D.25090>, case 14: <D.25085>, case 15: <D.25079>, case 17: <D.25092>, case 18: <D.25081>, case 19: <D.25094>, case 20: <D.25084>, case 21: <D.25091>, case 22: <D.25093>, case 24: <D.25077>, case 25: <D.25078>, case 27: <D.25080>, case 28: <D.25082>, case 29: <D.25083>, case 30: <D.25095>>
      <D.25069>:
      <D.25070>:
      <D.25071>:
      <D.25072>:
      <D.25073>:
      <D.25074>:
      <D.25075>:
      <D.25076>:
      <D.25077>:
      <D.25078>:
      <D.25079>:
      <D.25080>:
      <D.25081>:
      <D.25082>:
      <D.25083>:
      <D.25084>:
      <D.25085>:
      cinfo->ret.storage = 1;
      cinfo->ret.reg = 0;
      goto <D.25086>;
      <D.25087>:
      <D.25088>:
      cinfo->ret.storage = 2;
      cinfo->ret.reg = 0;
      goto <D.25086>;
      <D.25089>:
      <D.25090>:
      cinfo->ret.storage = 5;
      if (1 != 0) goto <D.27407>; else goto <D.27408>;
      <D.27407>:
      cinfo->ret.reg = 0;
      goto <D.27409>;
      <D.27408>:
      cinfo->ret.reg = 0;
      <D.27409>:
      goto <D.25086>;
      <D.25091>:
      D.27410 = mono_type_generic_inst_is_valuetype (simpletype);
      if (D.27410 == 0) goto <D.27411>; else goto <D.27412>;
      <D.27411>:
      cinfo->ret.storage = 1;
      cinfo->ret.reg = 0;
      goto <D.25086>;
      <D.27412>:
      D.27413 = mini_is_gsharedvt_type_gsctx (gsctx, simpletype);
      if (D.27413 != 0) goto <D.27414>; else goto <D.27415>;
      <D.27414>:
      cinfo->ret.storage = 7;
      D.27303 = cinfo->vtype_retaddr;
      D.27416 = D.27303 == 0;
      D.27417 = (long int) D.27416;
      D.27418 = __builtin_expect (D.27417, 0);
      if (D.27418 != 0) goto <D.27419>; else goto <D.27420>;
      <D.27419>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 1667, "cinfo->vtype_retaddr");
      <D.27420>:
      goto <D.25086>;
      <D.27415>:
      <D.25092>:
      <D.25093>:
      D.27421 = cinfo->ret.storage;
      if (D.27421 != 6) goto <D.27422>; else goto <D.27423>;
      <D.27422>:
      cinfo->ret.storage = 7;
      <D.27423>:
      goto <D.25086>;
      <D.25094>:
      <D.25095>:
      D.27424 = mini_is_gsharedvt_type_gsctx (gsctx, simpletype);
      D.27425 = D.27424 == 0;
      D.27426 = (long int) D.27425;
      D.27427 = __builtin_expect (D.27426, 0);
      if (D.27427 != 0) goto <D.27428>; else goto <D.27429>;
      <D.27428>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 1678, "mini_is_gsharedvt_type_gsctx (gsctx, simpletype)");
      <D.27429>:
      cinfo->ret.storage = 7;
      D.27303 = cinfo->vtype_retaddr;
      D.27416 = D.27303 == 0;
      D.27417 = (long int) D.27416;
      D.27418 = __builtin_expect (D.27417, 0);
      if (D.27418 != 0) goto <D.27430>; else goto <D.27431>;
      <D.27430>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 1680, "cinfo->vtype_retaddr");
      <D.27431>:
      goto <D.25086>;
      <D.25096>:
      goto <D.25086>;
      <D.25097>:
      D.27280 = sig->ret;
      D.27432 = D.27280->type;
      D.27433 = (int) D.27432;
      monoeg_g_log (0B, 4, "Can\'t handle as return value 0x%x", D.27433);
      <D.25098>:
      goto <D.25098>;
      <D.25086>:
      stack_size.58 = stack_size;
      D.27434 = stack_size.58 + 7;
      stack_size.62 = D.27434 & 4294967288;
      stack_size = stack_size.62;
      stack_size.58 = stack_size;
      cinfo->stack_usage = stack_size.58;
      D.27436 = cinfo;
      return D.27436;
    }
  finally
    {
      gr = {CLOBBER};
      fpr = {CLOBBER};
      float_spare = {CLOBBER};
      stack_size = {CLOBBER};
    }
}


add_float (guint * fpr, guint * stack_size, struct ArgInfo * ainfo, gboolean is_double, gint * float_spare)
{
  unsigned int D.27444;
  int D.27447;
  unsigned int D.27450;
  int D.27453;
  unsigned int D.27454;
  unsigned char D.27455;
  unsigned int D.27456;
  unsigned char D.27460;
  unsigned int D.27464;
  unsigned int D.27465;
  unsigned int D.27466;
  int D.27467;
  unsigned int D.27468;

  D.27444 = *fpr;
  if (D.27444 <= 15) goto <D.27441>; else goto <D.27445>;
  <D.27445>:
  if (is_double == 0) goto <D.27446>; else goto <D.27442>;
  <D.27446>:
  D.27447 = *float_spare;
  if (D.27447 >= 0) goto <D.27441>; else goto <D.27442>;
  <D.27441>:
  ainfo->storage = 5;
  if (is_double != 0) goto <D.27448>; else goto <D.27449>;
  <D.27448>:
  D.27444 = *fpr;
  D.27450 = D.27444 & 1;
  if (D.27450 != 0) goto <D.27451>; else goto <D.27452>;
  <D.27451>:
  D.27444 = *fpr;
  D.27453 = (int) D.27444;
  *float_spare = D.27453;
  D.27444 = *fpr;
  D.27454 = D.27444 + 1;
  *fpr = D.27454;
  <D.27452>:
  D.27444 = *fpr;
  D.27455 = (unsigned char) D.27444;
  ainfo->reg = D.27455;
  D.27444 = *fpr;
  D.27456 = D.27444 + 2;
  *fpr = D.27456;
  goto <D.27457>;
  <D.27449>:
  D.27447 = *float_spare;
  if (D.27447 >= 0) goto <D.27458>; else goto <D.27459>;
  <D.27458>:
  D.27447 = *float_spare;
  D.27460 = (unsigned char) D.27447;
  ainfo->reg = D.27460;
  *float_spare = -1;
  goto <D.27461>;
  <D.27459>:
  D.27444 = *fpr;
  D.27455 = (unsigned char) D.27444;
  ainfo->reg = D.27455;
  D.27444 = *fpr;
  D.27454 = D.27444 + 1;
  *fpr = D.27454;
  <D.27461>:
  <D.27457>:
  goto <D.27443>;
  <D.27442>:
  if (is_double != 0) goto <D.27462>; else goto <D.27463>;
  <D.27462>:
  D.27464 = *stack_size;
  D.27465 = D.27464 + 7;
  *stack_size = D.27465;
  D.27464 = *stack_size;
  D.27466 = D.27464 & 4294967288;
  *stack_size = D.27466;
  <D.27463>:
  D.27464 = *stack_size;
  D.27467 = (int) D.27464;
  ainfo->offset = D.27467;
  ainfo->reg = 13;
  ainfo->storage = 3;
  D.27464 = *stack_size;
  D.27468 = D.27464 + 8;
  *stack_size = D.27468;
  <D.27443>:
}


add_general (guint * gr, guint * stack_size, struct ArgInfo * ainfo, gboolean simple)
{
  unsigned int D.27471;
  unsigned int D.27474;
  int D.27475;
  unsigned int D.27476;
  unsigned char D.27478;
  int eabi_supported.63;
  int i8_align.64;
  _Bool D.27484;
  unsigned int D.27496;
  unsigned int D.27497;
  unsigned int D.27498;
  unsigned int D.27504;
  unsigned int D.27507;

  if (simple != 0) goto <D.27469>; else goto <D.27470>;
  <D.27469>:
  D.27471 = *gr;
  if (D.27471 > 3) goto <D.27472>; else goto <D.27473>;
  <D.27472>:
  ainfo->size = 4;
  D.27474 = *stack_size;
  D.27475 = (int) D.27474;
  ainfo->offset = D.27475;
  ainfo->reg = 13;
  ainfo->storage = 3;
  D.27474 = *stack_size;
  D.27476 = D.27474 + 4;
  *stack_size = D.27476;
  goto <D.27477>;
  <D.27473>:
  ainfo->storage = 1;
  D.27471 = *gr;
  D.27478 = (unsigned char) D.27471;
  ainfo->reg = D.27478;
  <D.27477>:
  goto <D.27479>;
  <D.27470>:
  {
    gboolean split;

    eabi_supported.63 = eabi_supported;
    if (eabi_supported.63 != 0) goto <D.27481>; else goto <D.27482>;
    <D.27481>:
    i8_align.64 = i8_align;
    D.27484 = i8_align.64 == 4;
    split = (gboolean) D.27484;
    goto <D.27485>;
    <D.27482>:
    split = 1;
    <D.27485>:
    ainfo->size = 8;
    D.27471 = *gr;
    if (D.27471 == 3) goto <D.27488>; else goto <D.27486>;
    <D.27488>:
    if (split != 0) goto <D.27489>; else goto <D.27486>;
    <D.27489>:
    D.27474 = *stack_size;
    D.27475 = (int) D.27474;
    ainfo->offset = D.27475;
    ainfo->reg = 13;
    ainfo->storage = 4;
    D.27474 = *stack_size;
    D.27476 = D.27474 + 4;
    *stack_size = D.27476;
    goto <D.27487>;
    <D.27486>:
    D.27471 = *gr;
    if (D.27471 > 2) goto <D.27490>; else goto <D.27491>;
    <D.27490>:
    eabi_supported.63 = eabi_supported;
    if (eabi_supported.63 != 0) goto <D.27492>; else goto <D.27493>;
    <D.27492>:
    i8_align.64 = i8_align;
    if (i8_align.64 == 8) goto <D.27494>; else goto <D.27495>;
    <D.27494>:
    D.27474 = *stack_size;
    D.27496 = D.27474 + 7;
    *stack_size = D.27496;
    D.27474 = *stack_size;
    D.27497 = D.27474 & 4294967288;
    *stack_size = D.27497;
    <D.27495>:
    <D.27493>:
    D.27474 = *stack_size;
    D.27475 = (int) D.27474;
    ainfo->offset = D.27475;
    ainfo->reg = 13;
    ainfo->storage = 3;
    D.27474 = *stack_size;
    D.27498 = D.27474 + 8;
    *stack_size = D.27498;
    goto <D.27499>;
    <D.27491>:
    eabi_supported.63 = eabi_supported;
    if (eabi_supported.63 != 0) goto <D.27500>; else goto <D.27501>;
    <D.27500>:
    i8_align.64 = i8_align;
    if (i8_align.64 == 8) goto <D.27502>; else goto <D.27503>;
    <D.27502>:
    D.27471 = *gr;
    D.27504 = D.27471 & 1;
    if (D.27504 != 0) goto <D.27505>; else goto <D.27506>;
    <D.27505>:
    D.27471 = *gr;
    D.27507 = D.27471 + 1;
    *gr = D.27507;
    <D.27506>:
    <D.27503>:
    <D.27501>:
    ainfo->storage = 2;
    D.27471 = *gr;
    D.27478 = (unsigned char) D.27471;
    ainfo->reg = D.27478;
    <D.27499>:
    <D.27487>:
    D.27471 = *gr;
    D.27507 = D.27471 + 1;
    *gr = D.27507;
  }
  <D.27479>:
  D.27471 = *gr;
  D.27507 = D.27471 + 1;
  *gr = D.27507;
}


debug_omit_fp ()
{
  gboolean D.27508;

  D.27508 = 1;
  return D.27508;
}


mono_arch_regalloc_cost (struct MonoCompile * cfg, struct MonoMethodVar * vmv)
{
  guint32 D.27510;

  D.27510 = 2;
  return D.27510;
}


mono_arch_flush_icache (guint8 * code, gint size)
{
  sizetype size.65;
  void * D.27513;

  size.65 = (sizetype) size;
  D.27513 = code + size.65;
  __clear_cache (code, D.27513);
}


mono_arch_allocate_vars (struct MonoCompile * cfg)
{
  struct MonoMethod * D.27514;
  void * D.27515;
  struct MonoGenericSharingContext * D.27518;
  struct MonoMemPool * D.27519;
  struct CallInfo * D.27520;
  int D.27521;
  unsigned int D.27525;
  unsigned int D.27526;
  struct MonoTraceSpec * mono_jit_trace_calls.66;
  int D.27530;
  unsigned int D.27533;
  unsigned int D.27534;
  unsigned int D.27535;
  unsigned int D.27538;
  unsigned int D.27541;
  int D.27542;
  int D.27543;
  unsigned int D.27544;
  unsigned int D.27545;
  unsigned char D.27548;
  unsigned char D.27549;
  unsigned char D.27551;
  unsigned char D.27552;
  unsigned int D.27553;
  struct MonoType * D.27554;
  int D.27555;
  int D.27558;
  unsigned char D.27561;
  struct MonoInst * D.27564;
  unsigned int offset.67;
  unsigned int D.27566;
  unsigned int D.27567;
  int D.27572;
  <unnamed type> D.27575;
  int D.27578;
  unsigned int offset.68;
  unsigned int D.27580;
  int D.27581;
  unsigned int D.27582;
  unsigned int D.27586;
  _Bool D.27587;
  long int D.27588;
  long int D.27589;
  struct MonoInst * D.27592;
  void * D.27593;
  int align.69;
  int D.27597;
  int D.27598;
  void * D.27599;
  unsigned int D.27602;
  struct MonoInst * * D.27603;
  unsigned int i.70;
  unsigned int D.27605;
  struct MonoInst * * D.27606;
  unsigned char D.27609;
  int D.27610;
  int D.27611;
  short unsigned int D.27613;
  int D.27615;
  int D.27618;
  int D.27623;
  int D.27625;
  unsigned char D.27627;
  struct MonoClass * D.27629;
  unsigned int ualign.71;
  int ualign.72;
  long long unsigned int D.27636;
  long long unsigned int D.27637;
  long long unsigned int D.27638;
  long long unsigned int D.27639;
  long long unsigned int D.27640;
  long long unsigned int D.27641;
  long long unsigned int D.27642;
  unsigned int offset.73;
  unsigned int D.27646;
  int D.27647;
  int D.27648;
  unsigned int i.74;
  unsigned int D.27650;
  unsigned char D.27651;
  unsigned char D.27652;
  struct MonoInst * * D.27655;
  unsigned int curinst.75;
  unsigned int D.27657;
  struct MonoInst * * D.27658;
  unsigned char D.27661;
  struct MonoType * D.27666;
  <unnamed-unsigned:1> D.27667;
  int D.27668;
  int D.27673;
  short unsigned int D.27678;
  int D.27679;
  long long unsigned int D.27680;
  long long unsigned int D.27681;
  struct MonoMethodSignature * sig;
  struct MonoMethodHeader * header;
  struct MonoInst * ins;
  int i;
  int offset;
  int size;
  int align;
  int curinst;
  struct CallInfo * cinfo;
  guint32 ualign;

  try
    {
      D.27514 = cfg->method;
      sig = mono_method_signature (D.27514);
      D.27515 = cfg->arch.cinfo;
      if (D.27515 == 0B) goto <D.27516>; else goto <D.27517>;
      <D.27516>:
      D.27518 = cfg->generic_sharing_context;
      D.27519 = cfg->mempool;
      D.27520 = get_call_info (D.27518, D.27519, sig);
      cfg->arch.cinfo = D.27520;
      <D.27517>:
      cinfo = cfg->arch.cinfo;
      mono_arch_compute_omit_fp (cfg);
      D.27521 = cfg->arch.omit_fp;
      if (D.27521 != 0) goto <D.27522>; else goto <D.27523>;
      <D.27522>:
      cfg->frame_reg = 13;
      goto <D.27524>;
      <D.27523>:
      cfg->frame_reg = 11;
      <D.27524>:
      D.27525 = cfg->flags;
      D.27526 = D.27525 | 64;
      cfg->flags = D.27526;
      mono_jit_trace_calls.66 = mono_jit_trace_calls;
      if (mono_jit_trace_calls.66 != 0B) goto <D.27528>; else goto <D.27529>;
      <D.27528>:
      D.27514 = cfg->method;
      D.27530 = mono_trace_eval (D.27514);
      if (D.27530 != 0) goto <D.27531>; else goto <D.27532>;
      <D.27531>:
      D.27533 = cfg->param_area;
      D.27534 = MAX_EXPR <D.27533, 32>;
      cfg->param_area = D.27534;
      <D.27532>:
      <D.27529>:
      header = cfg->header;
      D.27525 = cfg->flags;
      D.27535 = D.27525 & 2;
      if (D.27535 != 0) goto <D.27536>; else goto <D.27537>;
      <D.27536>:
      cfg->uses_rgctx_reg = 1;
      <D.27537>:
      D.27538 = cfg->frame_reg;
      if (D.27538 != 13) goto <D.27539>; else goto <D.27540>;
      <D.27539>:
      D.27541 = cfg->used_int_regs;
      D.27538 = cfg->frame_reg;
      D.27542 = (int) D.27538;
      D.27543 = 1 << D.27542;
      D.27544 = (unsigned int) D.27543;
      D.27545 = D.27541 | D.27544;
      cfg->used_int_regs = D.27545;
      <D.27540>:
      D.27548 = BIT_FIELD_REF <*cfg, 8, 3392>;
      D.27549 = D.27548 & 64;
      if (D.27549 != 0) goto <D.27546>; else goto <D.27550>;
      <D.27550>:
      D.27551 = BIT_FIELD_REF <*cfg, 8, 3424>;
      D.27552 = D.27551 & 2;
      if (D.27552 != 0) goto <D.27546>; else goto <D.27547>;
      <D.27546>:
      D.27541 = cfg->used_int_regs;
      D.27553 = D.27541 | 256;
      cfg->used_int_regs = D.27553;
      <D.27547>:
      offset = 0;
      curinst = 0;
      D.27554 = sig->ret;
      D.27555 = mono_type_is_struct (D.27554);
      if (D.27555 == 0) goto <D.27556>; else goto <D.27557>;
      <D.27556>:
      D.27558 = cinfo->vtype_retaddr;
      if (D.27558 == 0) goto <D.27559>; else goto <D.27560>;
      <D.27559>:
      D.27554 = sig->ret;
      D.27561 = D.27554->type;
      if (D.27561 != 1) goto <D.27562>; else goto <D.27563>;
      <D.27562>:
      D.27564 = cfg->ret;
      D.27564->opcode = 366;
      D.27564 = cfg->ret;
      D.27564->data.op[0].const_val = 0;
      <D.27563>:
      <D.27560>:
      <D.27557>:
      offset = 0;
      D.27533 = cfg->param_area;
      offset.67 = (unsigned int) offset;
      D.27566 = D.27533 + offset.67;
      offset = (int) D.27566;
      offset = offset + 7;
      offset = offset & -8;
      D.27525 = cfg->flags;
      D.27567 = D.27525 & 32;
      if (D.27567 != 0) goto <D.27568>; else goto <D.27569>;
      <D.27568>:
      offset = offset + 8;
      <D.27569>:
      mono_jit_trace_calls.66 = mono_jit_trace_calls;
      if (mono_jit_trace_calls.66 != 0B) goto <D.27570>; else goto <D.27571>;
      <D.27570>:
      D.27514 = cfg->method;
      D.27572 = mono_trace_eval (D.27514);
      if (D.27572 != 0) goto <D.27573>; else goto <D.27574>;
      <D.27573>:
      offset = offset + 8;
      <D.27574>:
      <D.27571>:
      D.27575 = cinfo->ret.storage;
      if (D.27575 == 6) goto <D.27576>; else goto <D.27577>;
      <D.27576>:
      D.27564 = cfg->ret;
      D.27564->opcode = 367;
      D.27564 = cfg->ret;
      D.27538 = cfg->frame_reg;
      D.27578 = (int) D.27538;
      D.27564->sreg1 = D.27578;
      offset.68 = (unsigned int) offset;
      D.27580 = offset.68 + 3;
      offset = (int) D.27580;
      offset = offset & -4;
      D.27564 = cfg->ret;
      D.27581 = -offset;
      D.27564->data.op[0].const_val = D.27581;
      offset.68 = (unsigned int) offset;
      D.27582 = offset.68 + 4;
      offset = (int) D.27582;
      goto <D.27583>;
      <D.27577>:
      D.27558 = cinfo->vtype_retaddr;
      if (D.27558 != 0) goto <D.27584>; else goto <D.27585>;
      <D.27584>:
      ins = cfg->vret_addr;
      offset.68 = (unsigned int) offset;
      D.27580 = offset.68 + 3;
      offset = (int) D.27580;
      offset = offset & -4;
      ins->data.op[0].const_val = offset;
      ins->opcode = 367;
      D.27538 = cfg->frame_reg;
      D.27578 = (int) D.27538;
      ins->sreg1 = D.27578;
      D.27586 = cfg->verbose_level;
      D.27587 = D.27586 > 1;
      D.27588 = (long int) D.27587;
      D.27589 = __builtin_expect (D.27588, 0);
      if (D.27589 != 0) goto <D.27590>; else goto <D.27591>;
      <D.27590>:
      printf ("vret_addr =");
      D.27592 = cfg->vret_addr;
      mono_print_ins (D.27592);
      <D.27591>:
      offset.68 = (unsigned int) offset;
      D.27582 = offset.68 + 4;
      offset = (int) D.27582;
      <D.27585>:
      <D.27583>:
      D.27593 = cfg->arch.seq_point_info_var;
      if (D.27593 != 0B) goto <D.27594>; else goto <D.27595>;
      <D.27594>:
      {
        struct MonoInst * ins;

        ins = cfg->arch.seq_point_info_var;
        size = 4;
        align = 4;
        align.69 = align;
        D.27597 = align.69 + -1;
        offset = D.27597 + offset;
        align.69 = align;
        D.27598 = -align.69;
        offset = D.27598 & offset;
        ins->opcode = 367;
        D.27538 = cfg->frame_reg;
        D.27578 = (int) D.27538;
        ins->sreg1 = D.27578;
        ins->data.op[0].const_val = offset;
        offset = offset + size;
        ins = cfg->arch.ss_trigger_page_var;
        size = 4;
        align = 4;
        align.69 = align;
        D.27597 = align.69 + -1;
        offset = D.27597 + offset;
        align.69 = align;
        D.27598 = -align.69;
        offset = D.27598 & offset;
        ins->opcode = 367;
        D.27538 = cfg->frame_reg;
        D.27578 = (int) D.27538;
        ins->sreg1 = D.27578;
        ins->data.op[0].const_val = offset;
        offset = offset + size;
      }
      <D.27595>:
      D.27599 = cfg->arch.seq_point_read_var;
      if (D.27599 != 0B) goto <D.27600>; else goto <D.27601>;
      <D.27600>:
      {
        struct MonoInst * ins;

        ins = cfg->arch.seq_point_read_var;
        size = 4;
        align = 4;
        align.69 = align;
        D.27597 = align.69 + -1;
        offset = D.27597 + offset;
        align.69 = align;
        D.27598 = -align.69;
        offset = D.27598 & offset;
        ins->opcode = 367;
        D.27538 = cfg->frame_reg;
        D.27578 = (int) D.27538;
        ins->sreg1 = D.27578;
        ins->data.op[0].const_val = offset;
        offset = offset + size;
        ins = cfg->arch.seq_point_ss_method_var;
        size = 4;
        align = 4;
        align.69 = align;
        D.27597 = align.69 + -1;
        offset = D.27597 + offset;
        align.69 = align;
        D.27598 = -align.69;
        offset = D.27598 & offset;
        ins->opcode = 367;
        D.27538 = cfg->frame_reg;
        D.27578 = (int) D.27538;
        ins->sreg1 = D.27578;
        ins->data.op[0].const_val = offset;
        offset = offset + size;
        ins = cfg->arch.seq_point_bp_method_var;
        size = 4;
        align = 4;
        align.69 = align;
        D.27597 = align.69 + -1;
        offset = D.27597 + offset;
        align.69 = align;
        D.27598 = -align.69;
        offset = D.27598 & offset;
        ins->opcode = 367;
        D.27538 = cfg->frame_reg;
        D.27578 = (int) D.27538;
        ins->sreg1 = D.27578;
        ins->data.op[0].const_val = offset;
        offset = offset + size;
      }
      <D.27601>:
      cfg->locals_min_stack_offset = offset;
      D.27602 = cfg->locals_start;
      curinst = (int) D.27602;
      i = curinst;
      goto <D.25137>;
      <D.25136>:
      {
        struct MonoType * t;

        D.27603 = cfg->varinfo;
        i.70 = (unsigned int) i;
        D.27605 = i.70 * 4;
        D.27606 = D.27603 + D.27605;
        ins = *D.27606;
        D.27609 = ins->flags;
        D.27610 = (int) D.27609;
        D.27611 = D.27610 & 2;
        if (D.27611 != 0) goto <D.27607>; else goto <D.27612>;
        <D.27612>:
        D.27613 = ins->opcode;
        if (D.27613 == 366) goto <D.27607>; else goto <D.27614>;
        <D.27614>:
        D.27613 = ins->opcode;
        if (D.27613 == 367) goto <D.27607>; else goto <D.27608>;
        <D.27607>:
        // predicted unlikely by continue predictor.
        goto <D.25135>;
        <D.27608>:
        t = ins->data.op[1].vtype;
        D.27615 = cfg->gsharedvt;
        if (D.27615 != 0) goto <D.27616>; else goto <D.27617>;
        <D.27616>:
        D.27618 = mini_is_gsharedvt_variable_type (cfg, t);
        if (D.27618 != 0) goto <D.27619>; else goto <D.27620>;
        <D.27619>:
        // predicted unlikely by continue predictor.
        goto <D.25135>;
        <D.27620>:
        <D.27617>:
        D.27623 = ins->backend.is_pinvoke;
        if (D.27623 != 0) goto <D.27624>; else goto <D.27621>;
        <D.27624>:
        D.27625 = mono_type_is_struct (t);
        if (D.27625 != 0) goto <D.27626>; else goto <D.27621>;
        <D.27626>:
        D.27627 = t->type;
        if (D.27627 != 22) goto <D.27628>; else goto <D.27621>;
        <D.27628>:
        D.27629 = mono_class_from_mono_type (t);
        size = mono_class_native_size (D.27629, &ualign);
        ualign.71 = ualign;
        ualign.72 = (int) ualign.71;
        align = ualign.72;
        goto <D.27622>;
        <D.27621>:
        size = mono_type_size (t, &align);
        <D.27622>:
        align.69 = align;
        if (align.69 <= 3) goto <D.27632>; else goto <D.27633>;
        <D.27632>:
        if (size > 3) goto <D.27634>; else goto <D.27635>;
        <D.27634>:
        align = 4;
        <D.27635>:
        <D.27633>:
        D.27636 = (long long unsigned int) offset;
        align.69 = align;
        D.27597 = align.69 + -1;
        D.27637 = (long long unsigned int) D.27597;
        D.27638 = D.27636 + D.27637;
        align.69 = align;
        D.27598 = -align.69;
        D.27639 = (long long unsigned int) D.27598;
        D.27640 = D.27638 & D.27639;
        D.27636 = (long long unsigned int) offset;
        D.27641 = D.27636 + 3;
        D.27642 = D.27641 & 18446744073709551612;
        if (D.27640 > D.27642) goto <D.27643>; else goto <D.27644>;
        <D.27643>:
        offset.73 = (unsigned int) offset;
        D.27646 = offset.73 + 3;
        D.27647 = (int) D.27646;
        D.27648 = D.27647 & -4;
        mini_gc_set_slot_type_from_fp (cfg, D.27648, 0);
        <D.27644>:
        align.69 = align;
        D.27597 = align.69 + -1;
        offset = D.27597 + offset;
        align.69 = align;
        D.27598 = -align.69;
        offset = D.27598 & offset;
        ins->opcode = 367;
        ins->data.op[0].const_val = offset;
        D.27538 = cfg->frame_reg;
        D.27578 = (int) D.27538;
        ins->sreg1 = D.27578;
        offset = offset + size;
      }
      <D.25135>:
      i = i + 1;
      <D.25137>:
      i.74 = (unsigned int) i;
      D.27650 = cfg->num_varinfo;
      if (i.74 < D.27650) goto <D.25136>; else goto <D.25138>;
      <D.25138>:
      cfg->locals_max_stack_offset = offset;
      curinst = 0;
      D.27651 = BIT_FIELD_REF <*sig, 8, 80>;
      D.27652 = D.27651 & 64;
      if (D.27652 != 0) goto <D.27653>; else goto <D.27654>;
      <D.27653>:
      D.27655 = cfg->args;
      curinst.75 = (unsigned int) curinst;
      D.27657 = curinst.75 * 4;
      D.27658 = D.27655 + D.27657;
      ins = *D.27658;
      D.27613 = ins->opcode;
      if (D.27613 != 366) goto <D.27659>; else goto <D.27660>;
      <D.27659>:
      ins->opcode = 367;
      D.27538 = cfg->frame_reg;
      D.27578 = (int) D.27538;
      ins->sreg1 = D.27578;
      offset.68 = (unsigned int) offset;
      D.27580 = offset.68 + 3;
      offset = (int) D.27580;
      offset = offset & -4;
      ins->data.op[0].const_val = offset;
      offset.68 = (unsigned int) offset;
      D.27582 = offset.68 + 4;
      offset = (int) D.27582;
      <D.27660>:
      curinst = curinst + 1;
      <D.27654>:
      D.27651 = BIT_FIELD_REF <*sig, 8, 80>;
      D.27661 = D.27651 & 63;
      if (D.27661 == 5) goto <D.27662>; else goto <D.27663>;
      <D.27662>:
      size = 4;
      align = 4;
      align.69 = align;
      D.27597 = align.69 + -1;
      offset = D.27597 + offset;
      align.69 = align;
      D.27598 = -align.69;
      offset = D.27598 & offset;
      cfg->sig_cookie = offset;
      offset = offset + size;
      <D.27663>:
      i = 0;
      goto <D.25140>;
      <D.25139>:
      D.27655 = cfg->args;
      curinst.75 = (unsigned int) curinst;
      D.27657 = curinst.75 * 4;
      D.27658 = D.27655 + D.27657;
      ins = *D.27658;
      D.27613 = ins->opcode;
      if (D.27613 != 366) goto <D.27664>; else goto <D.27665>;
      <D.27664>:
      ins->opcode = 367;
      D.27538 = cfg->frame_reg;
      D.27578 = (int) D.27538;
      ins->sreg1 = D.27578;
      D.27518 = cfg->generic_sharing_context;
      D.27666 = sig->params[i];
      D.27667 = sig->pinvoke;
      D.27668 = (int) D.27667;
      size = mini_type_stack_size_full (D.27518, D.27666, &ualign, D.27668);
      ualign.71 = ualign;
      ualign.72 = (int) ualign.71;
      align = ualign.72;
      align.69 = align;
      if (align.69 <= 3) goto <D.27669>; else goto <D.27670>;
      <D.27669>:
      if (size > 3) goto <D.27671>; else goto <D.27672>;
      <D.27671>:
      align = 4;
      <D.27672>:
      <D.27670>:
      D.27666 = sig->params[i];
      D.27673 = mono_type_is_struct (D.27666);
      if (D.27673 != 0) goto <D.27674>; else goto <D.27675>;
      <D.27674>:
      align = 4;
      <D.27675>:
      D.27636 = (long long unsigned int) offset;
      align.69 = align;
      D.27597 = align.69 + -1;
      D.27637 = (long long unsigned int) D.27597;
      D.27638 = D.27636 + D.27637;
      align.69 = align;
      D.27598 = -align.69;
      D.27639 = (long long unsigned int) D.27598;
      D.27640 = D.27638 & D.27639;
      D.27636 = (long long unsigned int) offset;
      D.27641 = D.27636 + 3;
      D.27642 = D.27641 & 18446744073709551612;
      if (D.27640 > D.27642) goto <D.27676>; else goto <D.27677>;
      <D.27676>:
      offset.73 = (unsigned int) offset;
      D.27646 = offset.73 + 3;
      D.27647 = (int) D.27646;
      D.27648 = D.27647 & -4;
      mini_gc_set_slot_type_from_fp (cfg, D.27648, 0);
      <D.27677>:
      align.69 = align;
      D.27597 = align.69 + -1;
      offset = D.27597 + offset;
      align.69 = align;
      D.27598 = -align.69;
      offset = D.27598 & offset;
      ins->data.op[0].const_val = offset;
      offset = offset + size;
      <D.27665>:
      curinst = curinst + 1;
      i = i + 1;
      <D.25140>:
      D.27678 = sig->param_count;
      D.27679 = (int) D.27678;
      if (D.27679 > i) goto <D.25139>; else goto <D.25141>;
      <D.25141>:
      D.27636 = (long long unsigned int) offset;
      D.27680 = D.27636 + 7;
      D.27681 = D.27680 & 18446744073709551608;
      D.27636 = (long long unsigned int) offset;
      D.27641 = D.27636 + 3;
      D.27642 = D.27641 & 18446744073709551612;
      if (D.27681 > D.27642) goto <D.27682>; else goto <D.27683>;
      <D.27682>:
      offset.73 = (unsigned int) offset;
      D.27646 = offset.73 + 3;
      D.27647 = (int) D.27646;
      D.27648 = D.27647 & -4;
      mini_gc_set_slot_type_from_fp (cfg, D.27648, 0);
      <D.27683>:
      offset = offset + 7;
      offset = offset & -8;
      cfg->stack_offset = offset;
    }
  finally
    {
      align = {CLOBBER};
      ualign = {CLOBBER};
    }
}


printf (const char * restrict __fmt)
{
  int D.27684;

  D.27684 = __printf_chk (1, __fmt, __builtin_va_arg_pack ());
  return D.27684;
}


mono_arch_create_vars (struct MonoCompile * cfg)
{
  struct MonoMethod * D.27686;
  void * D.27687;
  struct MonoGenericSharingContext * D.27690;
  struct MonoMemPool * D.27691;
  struct CallInfo * D.27692;
  struct MonoClass * D.27695;
  struct MonoType * D.27696;
  unsigned char D.27697;
  unsigned char D.27698;
  <unnamed type> D.27699;
  int D.27702;
  struct MonoClass * D.27705;
  struct MonoType * D.27706;
  struct MonoInst * D.27707;
  unsigned int D.27708;
  _Bool D.27709;
  long int D.27710;
  long int D.27711;
  struct MonoInst * D.27714;
  unsigned char D.27715;
  unsigned char D.27716;
  unsigned char D.27719;
  unsigned char D.27720;
  unsigned char D.27723;
  unsigned char D.27724;
  unsigned char D.27725;
  unsigned char D.27726;
  _Bool D.27727;
  long int D.27728;
  long int D.27729;
  unsigned char D.27735;
  unsigned char D.27736;
  struct MonoMethodSignature * sig;
  struct CallInfo * cinfo;
  int i;

  D.27686 = cfg->method;
  sig = mono_method_signature (D.27686);
  D.27687 = cfg->arch.cinfo;
  if (D.27687 == 0B) goto <D.27688>; else goto <D.27689>;
  <D.27688>:
  D.27690 = cfg->generic_sharing_context;
  D.27691 = cfg->mempool;
  D.27692 = get_call_info (D.27690, D.27691, sig);
  cfg->arch.cinfo = D.27692;
  <D.27689>:
  cinfo = cfg->arch.cinfo;
  if (1 != 0) goto <D.27693>; else goto <D.27694>;
  <D.27693>:
  i = 0;
  goto <D.25150>;
  <D.25149>:
  {
    struct MonoInst * inst;

    D.27695 = mono_defaults.double_class;
    D.27696 = &D.27695->byval_arg;
    inst = mono_compile_create_var (cfg, D.27696, 329);
    D.27697 = inst->flags;
    D.27698 = D.27697 | 4;
    inst->flags = D.27698;
    cfg->arch.vfp_scratch_slots[i] = inst;
  }
  i = i + 1;
  <D.25150>:
  if (i <= 1) goto <D.25149>; else goto <D.25151>;
  <D.25151>:
  <D.27694>:
  D.27699 = cinfo->ret.storage;
  if (D.27699 == 6) goto <D.27700>; else goto <D.27701>;
  <D.27700>:
  cfg->ret_var_is_local = 1;
  <D.27701>:
  D.27702 = cinfo->vtype_retaddr;
  if (D.27702 != 0) goto <D.27703>; else goto <D.27704>;
  <D.27703>:
  D.27705 = mono_defaults.int_class;
  D.27706 = &D.27705->byval_arg;
  D.27707 = mono_compile_create_var (cfg, D.27706, 330);
  cfg->vret_addr = D.27707;
  D.27708 = cfg->verbose_level;
  D.27709 = D.27708 > 1;
  D.27710 = (long int) D.27709;
  D.27711 = __builtin_expect (D.27710, 0);
  if (D.27711 != 0) goto <D.27712>; else goto <D.27713>;
  <D.27712>:
  printf ("vret_addr = ");
  D.27714 = cfg->vret_addr;
  mono_print_ins (D.27714);
  <D.27713>:
  <D.27704>:
  D.27715 = BIT_FIELD_REF <*cfg, 8, 3424>;
  D.27716 = D.27715 & 32;
  if (D.27716 != 0) goto <D.27717>; else goto <D.27718>;
  <D.27717>:
  D.27719 = BIT_FIELD_REF <*cfg, 8, 3432>;
  D.27720 = D.27719 & 1;
  if (D.27720 != 0) goto <D.27721>; else goto <D.27722>;
  <D.27721>:
  {
    struct MonoInst * ins;

    D.27705 = mono_defaults.int_class;
    D.27706 = &D.27705->byval_arg;
    ins = mono_compile_create_var (cfg, D.27706, 329);
    D.27723 = ins->flags;
    D.27724 = D.27723 | 4;
    ins->flags = D.27724;
    cfg->arch.seq_point_read_var = ins;
    D.27705 = mono_defaults.int_class;
    D.27706 = &D.27705->byval_arg;
    ins = mono_compile_create_var (cfg, D.27706, 329);
    D.27723 = ins->flags;
    D.27724 = D.27723 | 4;
    ins->flags = D.27724;
    cfg->arch.seq_point_ss_method_var = ins;
    D.27705 = mono_defaults.int_class;
    D.27706 = &D.27705->byval_arg;
    ins = mono_compile_create_var (cfg, D.27706, 329);
    D.27723 = ins->flags;
    D.27724 = D.27723 | 4;
    ins->flags = D.27724;
    cfg->arch.seq_point_bp_method_var = ins;
    D.27725 = BIT_FIELD_REF <*cfg, 8, 3392>;
    D.27726 = D.27725 & 64;
    D.27727 = D.27726 != 0;
    D.27728 = (long int) D.27727;
    D.27729 = __builtin_expect (D.27728, 0);
    if (D.27729 != 0) goto <D.27730>; else goto <D.27731>;
    <D.27730>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 2086, "!cfg->compile_aot");
    <D.27731>:
  }
  goto <D.27732>;
  <D.27722>:
  D.27725 = BIT_FIELD_REF <*cfg, 8, 3392>;
  D.27726 = D.27725 & 64;
  if (D.27726 != 0) goto <D.27733>; else goto <D.27734>;
  <D.27733>:
  {
    struct MonoInst * ins;

    D.27705 = mono_defaults.int_class;
    D.27706 = &D.27705->byval_arg;
    ins = mono_compile_create_var (cfg, D.27706, 329);
    D.27735 = ins->flags;
    D.27736 = D.27735 | 4;
    ins->flags = D.27736;
    cfg->arch.seq_point_info_var = ins;
    D.27705 = mono_defaults.int_class;
    D.27706 = &D.27705->byval_arg;
    ins = mono_compile_create_var (cfg, D.27706, 329);
    D.27735 = ins->flags;
    D.27736 = D.27735 | 4;
    ins->flags = D.27736;
    cfg->arch.ss_trigger_page_var = ins;
  }
  <D.27734>:
  <D.27732>:
  <D.27718>:
}


mono_arch_emit_call (struct MonoCompile * cfg, struct MonoCallInst * call)
{
  short unsigned int D.27737;
  int D.27738;
  <unnamed-unsigned:1> D.27739;
  int D.27740;
  struct MonoGenericSharingContext * D.27741;
  sizetype i.76;
  int D.27745;
  struct MonoClass * D.27747;
  unsigned char D.27748;
  unsigned char D.27749;
  short int D.27752;
  int D.27753;
  struct MonoInst * * D.27756;
  unsigned int i.77;
  unsigned int D.27758;
  struct MonoInst * * D.27759;
  <unnamed type> D.27760;
  unsigned char D.27763;
  unsigned char D.27764;
  unsigned char D.27766;
  unsigned char D.27767;
  struct MonoMemPool * D.27769;
  int D.27770;
  struct MonoInst * D.27771;
  int D.27772;
  int D.27773;
  const unsigned char * D.27774;
  unsigned int D.27775;
  int D.27776;
  int D.27777;
  int D.27778;
  struct MonoBasicBlock * D.27779;
  struct MonoInst * D.27780;
  int D.27784;
  unsigned char D.27785;
  int D.27786;
  unsigned int D.27787;
  int D.27788;
  int D.27789;
  int D.27793;
  unsigned char D.27797;
  unsigned char D.27799;
  unsigned char D.27800;
  unsigned int D.27805;
  int D.27806;
  int D.27811;
  struct MonoInst * D.27812;
  int D.27813;
  int D.27814;
  unsigned int D.27815;
  unsigned int D.27816;
  int D.27817;
  unsigned int D.27821;
  int D.27822;
  struct MonoInst * D.27823;
  int D.27824;
  int D.27825;
  unsigned int D.27832;
  int D.27833;
  unsigned int D.27837;
  int D.27838;
  int D.27843;
  struct MonoInst * D.27844;
  int D.27845;
  int D.27846;
  unsigned int D.27850;
  int D.27851;
  struct MonoInst * D.27852;
  int D.27853;
  int D.27854;
  unsigned int D.27858;
  int D.27859;
  struct MonoInst * D.27860;
  int D.27861;
  int D.27862;
  unsigned int D.27863;
  int D.27864;
  unsigned int D.27868;
  unsigned int D.27869;
  unsigned int D.27870;
  int D.27871;
  struct MonoClass * D.27875;
  void * D.27876;
  void * D.27877;
  int D.27885;
  struct MonoInst * D.27886;
  int D.27887;
  int D.27888;
  int D.27889;
  int D.27899;
  struct MonoInst * D.27900;
  int D.27901;
  int D.27902;
  int D.27909;
  struct MonoInst * D.27910;
  int D.27911;
  int D.27912;
  int D.27917;
  struct MonoInst * D.27918;
  int D.27919;
  int D.27920;
  int D.27924;
  struct MonoInst * D.27925;
  int D.27926;
  int D.27927;
  int D.27935;
  struct MonoInst * D.27936;
  int D.27937;
  int D.27938;
  unsigned int D.27942;
  int D.27943;
  short unsigned int D.27947;
  short unsigned int D.27948;
  int D.27951;
  struct MonoInst * D.27952;
  int D.27953;
  int D.27954;
  unsigned int D.27958;
  int D.27959;
  struct MonoInst * D.27960;
  int D.27961;
  int D.27962;
  unsigned int D.27966;
  int D.27967;
  struct MonoInst * D.27968;
  int D.27969;
  int D.27970;
  int D.27974;
  struct MonoInst * D.27975;
  int D.27976;
  int D.27977;
  unsigned int D.27982;
  struct MonoClass * D.27989;
  struct MonoType * D.27990;
  unsigned char D.27991;
  unsigned char D.27992;
  int D.27993;
  struct MonoInst * D.27994;
  int D.27995;
  int D.27996;
  int D.27997;
  int D.28001;
  struct GSList * D.28002;
  struct GSList * D.28003;
  unsigned int D.28004;
  int D.28005;
  unsigned int D.28006;
  unsigned int D.28007;
  short unsigned int D.28008;
  short unsigned int D.28009;
  <unnamed type> D.28014;
  int D.28018;
  int D.28021;
  struct MonoInst * D.28022;
  int D.28023;
  int D.28024;
  struct MonoInst * D.28025;
  int D.28026;
  unsigned int D.28027;
  int D.28028;
  int D.28032;
  unsigned char D.28033;
  int D.28034;
  unsigned int D.28035;
  struct MonoInst * in;
  struct MonoInst * ins;
  struct MonoMethodSignature * sig;
  int i;
  int n;
  struct CallInfo * cinfo;

  sig = call->signature;
  D.27737 = sig->param_count;
  D.27738 = (int) D.27737;
  D.27739 = sig->hasthis;
  D.27740 = (int) D.27739;
  n = D.27738 + D.27740;
  D.27741 = cfg->generic_sharing_context;
  cinfo = get_call_info (D.27741, 0B, sig);
  i = 0;
  goto <D.25209>;
  <D.25208>:
  {
    struct ArgInfo * ainfo;
    struct MonoType * t;

    i.76 = (sizetype) i;
    ainfo = &cinfo->args[i.76];
    D.27739 = sig->hasthis;
    D.27740 = (int) D.27739;
    if (D.27740 <= i) goto <D.27743>; else goto <D.27744>;
    <D.27743>:
    D.27739 = sig->hasthis;
    D.27740 = (int) D.27739;
    D.27745 = i - D.27740;
    t = sig->params[D.27745];
    goto <D.27746>;
    <D.27744>:
    D.27747 = mono_defaults.int_class;
    t = &D.27747->byval_arg;
    <D.27746>:
    D.27741 = cfg->generic_sharing_context;
    t = mini_type_get_underlying_type (D.27741, t);
    D.27748 = BIT_FIELD_REF <*sig, 8, 80>;
    D.27749 = D.27748 & 63;
    if (D.27749 == 5) goto <D.27750>; else goto <D.27751>;
    <D.27750>:
    D.27752 = sig->sentinelpos;
    D.27753 = (int) D.27752;
    if (D.27753 == i) goto <D.27754>; else goto <D.27755>;
    <D.27754>:
    emit_sig_cookie (cfg, call, cinfo);
    <D.27755>:
    <D.27751>:
    D.27756 = call->args;
    i.77 = (unsigned int) i;
    D.27758 = i.77 * 4;
    D.27759 = D.27756 + D.27758;
    in = *D.27759;
    D.27760 = ainfo->storage;
    switch (D.27760) <default: <D.25207>, case 1: <D.25175>, case 2: <D.25176>, case 3: <D.25189>, case 4: <D.25195>, case 5: <D.25202>, case 6: <D.25186>, case 7: <D.25185>, case 8: <D.25187>, case 9: <D.25188>>
    <D.25175>:
    <D.25176>:
    D.27763 = BIT_FIELD_REF <*t, 8, 56>;
    D.27764 = D.27763 & 64;
    if (D.27764 == 0) goto <D.27765>; else goto <D.27761>;
    <D.27765>:
    D.27766 = t->type;
    D.27767 = D.27766 + 246;
    if (D.27767 <= 1) goto <D.27768>; else goto <D.27761>;
    <D.27768>:
    D.27769 = cfg->mempool;
    ins = mono_mempool_alloc (D.27769, 56);
    ins->data.op[1].const_val = 0;
    D.27770 = ins->data.op[1].const_val;
    ins->data.op[0].const_val = D.27770;
    ins->prev = 0B;
    D.27771 = ins->prev;
    ins->next = D.27771;
    ins->opcode = 424;
    ins->flags = 0;
    ins->type = 0;
    ins->dreg = -1;
    ins->sreg3 = -1;
    D.27772 = ins->sreg3;
    ins->sreg2 = D.27772;
    D.27773 = ins->sreg2;
    ins->sreg1 = D.27773;
    D.27774 = cfg->ip;
    ins->cil_code = D.27774;
    D.27775 = mono_alloc_ireg (cfg);
    D.27776 = (int) D.27775;
    ins->dreg = D.27776;
    D.27777 = in->dreg;
    D.27778 = D.27777 + 1;
    ins->sreg1 = D.27778;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    if (D.27780 != 0B) goto <D.27781>; else goto <D.27782>;
    <D.27781>:
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    D.27780->next = ins;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    ins->prev = D.27780;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    goto <D.27783>;
    <D.27782>:
    D.27779 = cfg->cbb;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    D.27780 = D.27779->last_ins;
    D.27779->code = D.27780;
    <D.27783>:
    D.27784 = ins->dreg;
    D.27785 = ainfo->reg;
    D.27786 = (int) D.27785;
    mono_call_inst_add_outarg_reg (cfg, call, D.27784, D.27786, 0);
    D.27769 = cfg->mempool;
    ins = mono_mempool_alloc (D.27769, 56);
    ins->data.op[1].const_val = 0;
    D.27770 = ins->data.op[1].const_val;
    ins->data.op[0].const_val = D.27770;
    ins->prev = 0B;
    D.27771 = ins->prev;
    ins->next = D.27771;
    ins->opcode = 424;
    ins->flags = 0;
    ins->type = 0;
    ins->dreg = -1;
    ins->sreg3 = -1;
    D.27772 = ins->sreg3;
    ins->sreg2 = D.27772;
    D.27773 = ins->sreg2;
    ins->sreg1 = D.27773;
    D.27774 = cfg->ip;
    ins->cil_code = D.27774;
    D.27787 = mono_alloc_ireg (cfg);
    D.27788 = (int) D.27787;
    ins->dreg = D.27788;
    D.27777 = in->dreg;
    D.27789 = D.27777 + 2;
    ins->sreg1 = D.27789;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    if (D.27780 != 0B) goto <D.27790>; else goto <D.27791>;
    <D.27790>:
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    D.27780->next = ins;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    ins->prev = D.27780;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    goto <D.27792>;
    <D.27791>:
    D.27779 = cfg->cbb;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    D.27780 = D.27779->last_ins;
    D.27779->code = D.27780;
    <D.27792>:
    D.27784 = ins->dreg;
    D.27785 = ainfo->reg;
    D.27786 = (int) D.27785;
    D.27793 = D.27786 + 1;
    mono_call_inst_add_outarg_reg (cfg, call, D.27784, D.27793, 0);
    goto <D.27762>;
    <D.27761>:
    D.27763 = BIT_FIELD_REF <*t, 8, 56>;
    D.27764 = D.27763 & 64;
    if (D.27764 == 0) goto <D.27796>; else goto <D.27794>;
    <D.27796>:
    D.27766 = t->type;
    D.27797 = D.27766 + 244;
    if (D.27797 <= 1) goto <D.27798>; else goto <D.27794>;
    <D.27798>:
    D.27799 = BIT_FIELD_REF <*ainfo, 8, 128>;
    D.27800 = D.27799 & 15;
    if (D.27800 == 4) goto <D.27801>; else goto <D.27802>;
    <D.27801>:
    if (0 != 0) goto <D.27803>; else goto <D.27804>;
    <D.27803>:
    D.27769 = cfg->mempool;
    ins = mono_mempool_alloc (D.27769, 56);
    ins->data.op[1].const_val = 0;
    D.27770 = ins->data.op[1].const_val;
    ins->data.op[0].const_val = D.27770;
    ins->prev = 0B;
    D.27771 = ins->prev;
    ins->next = D.27771;
    ins->opcode = 424;
    ins->flags = 0;
    ins->type = 0;
    ins->dreg = -1;
    ins->sreg3 = -1;
    D.27772 = ins->sreg3;
    ins->sreg2 = D.27772;
    D.27773 = ins->sreg2;
    ins->sreg1 = D.27773;
    D.27774 = cfg->ip;
    ins->cil_code = D.27774;
    D.27805 = mono_alloc_ireg (cfg);
    D.27806 = (int) D.27805;
    ins->dreg = D.27806;
    D.27777 = in->dreg;
    ins->sreg1 = D.27777;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    if (D.27780 != 0B) goto <D.27807>; else goto <D.27808>;
    <D.27807>:
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    D.27780->next = ins;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    ins->prev = D.27780;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    goto <D.27809>;
    <D.27808>:
    D.27779 = cfg->cbb;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    D.27780 = D.27779->last_ins;
    D.27779->code = D.27780;
    <D.27809>:
    D.27784 = ins->dreg;
    D.27785 = ainfo->reg;
    D.27786 = (int) D.27785;
    mono_call_inst_add_outarg_reg (cfg, call, D.27784, D.27786, 0);
    goto <D.27810>;
    <D.27804>:
    {
      int creg;

      {
        struct MonoInst * inst;

        D.27769 = cfg->mempool;
        inst = mono_mempool_alloc (D.27769, 56);
        inst->data.op[1].const_val = 0;
        D.27811 = inst->data.op[1].const_val;
        inst->data.op[0].const_val = D.27811;
        inst->prev = 0B;
        D.27812 = inst->prev;
        inst->next = D.27812;
        inst->opcode = 379;
        inst->flags = 0;
        inst->type = 0;
        inst->dreg = -1;
        inst->sreg3 = -1;
        D.27813 = inst->sreg3;
        inst->sreg2 = D.27813;
        D.27814 = inst->sreg2;
        inst->sreg1 = D.27814;
        D.27774 = cfg->ip;
        inst->cil_code = D.27774;
        D.27777 = in->dreg;
        inst->sreg1 = D.27777;
        inst->dreg = 13;
        D.27815 = cfg->param_area;
        D.27816 = D.27815 + 4294967288;
        D.27817 = (int) D.27816;
        inst->data.op[0].const_val = D.27817;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        if (D.27780 != 0B) goto <D.27818>; else goto <D.27819>;
        <D.27818>:
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        D.27780->next = inst;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        inst->prev = D.27780;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        goto <D.27820>;
        <D.27819>:
        D.27779 = cfg->cbb;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        D.27780 = D.27779->last_ins;
        D.27779->code = D.27780;
        <D.27820>:
      }
      D.27821 = mono_alloc_ireg (cfg);
      creg = (int) D.27821;
      {
        struct MonoInst * inst;

        D.27769 = cfg->mempool;
        inst = mono_mempool_alloc (D.27769, 56);
        inst->data.op[1].const_val = 0;
        D.27822 = inst->data.op[1].const_val;
        inst->data.op[0].const_val = D.27822;
        inst->prev = 0B;
        D.27823 = inst->prev;
        inst->next = D.27823;
        inst->opcode = 388;
        inst->flags = 0;
        inst->type = 0;
        inst->dreg = -1;
        inst->sreg3 = -1;
        D.27824 = inst->sreg3;
        inst->sreg2 = D.27824;
        D.27825 = inst->sreg2;
        inst->sreg1 = D.27825;
        D.27774 = cfg->ip;
        inst->cil_code = D.27774;
        inst->dreg = creg;
        inst->sreg1 = 13;
        D.27815 = cfg->param_area;
        D.27816 = D.27815 + 4294967288;
        D.27817 = (int) D.27816;
        inst->data.op[0].const_val = D.27817;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        if (D.27780 != 0B) goto <D.27826>; else goto <D.27827>;
        <D.27826>:
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        D.27780->next = inst;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        inst->prev = D.27780;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        goto <D.27828>;
        <D.27827>:
        D.27779 = cfg->cbb;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        D.27780 = D.27779->last_ins;
        D.27779->code = D.27780;
        <D.27828>:
      }
      D.27785 = ainfo->reg;
      D.27786 = (int) D.27785;
      mono_call_inst_add_outarg_reg (cfg, call, creg, D.27786, 0);
    }
    <D.27810>:
    goto <D.27829>;
    <D.27802>:
    if (0 != 0) goto <D.27830>; else goto <D.27831>;
    <D.27830>:
    D.27769 = cfg->mempool;
    ins = mono_mempool_alloc (D.27769, 56);
    ins->data.op[1].const_val = 0;
    D.27770 = ins->data.op[1].const_val;
    ins->data.op[0].const_val = D.27770;
    ins->prev = 0B;
    D.27771 = ins->prev;
    ins->next = D.27771;
    ins->opcode = 729;
    ins->flags = 0;
    ins->type = 0;
    ins->dreg = -1;
    ins->sreg3 = -1;
    D.27772 = ins->sreg3;
    ins->sreg2 = D.27772;
    D.27773 = ins->sreg2;
    ins->sreg1 = D.27773;
    D.27774 = cfg->ip;
    ins->cil_code = D.27774;
    D.27832 = mono_alloc_ireg (cfg);
    D.27833 = (int) D.27832;
    ins->dreg = D.27833;
    D.27777 = in->dreg;
    ins->sreg1 = D.27777;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    if (D.27780 != 0B) goto <D.27834>; else goto <D.27835>;
    <D.27834>:
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    D.27780->next = ins;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    ins->prev = D.27780;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    goto <D.27836>;
    <D.27835>:
    D.27779 = cfg->cbb;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    D.27780 = D.27779->last_ins;
    D.27779->code = D.27780;
    <D.27836>:
    D.27784 = ins->dreg;
    D.27785 = ainfo->reg;
    D.27786 = (int) D.27785;
    mono_call_inst_add_outarg_reg (cfg, call, D.27784, D.27786, 0);
    D.27769 = cfg->mempool;
    ins = mono_mempool_alloc (D.27769, 56);
    ins->data.op[1].const_val = 0;
    D.27770 = ins->data.op[1].const_val;
    ins->data.op[0].const_val = D.27770;
    ins->prev = 0B;
    D.27771 = ins->prev;
    ins->next = D.27771;
    ins->opcode = 730;
    ins->flags = 0;
    ins->type = 0;
    ins->dreg = -1;
    ins->sreg3 = -1;
    D.27772 = ins->sreg3;
    ins->sreg2 = D.27772;
    D.27773 = ins->sreg2;
    ins->sreg1 = D.27773;
    D.27774 = cfg->ip;
    ins->cil_code = D.27774;
    D.27837 = mono_alloc_ireg (cfg);
    D.27838 = (int) D.27837;
    ins->dreg = D.27838;
    D.27777 = in->dreg;
    ins->sreg1 = D.27777;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    if (D.27780 != 0B) goto <D.27839>; else goto <D.27840>;
    <D.27839>:
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    D.27780->next = ins;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    ins->prev = D.27780;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    goto <D.27841>;
    <D.27840>:
    D.27779 = cfg->cbb;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    D.27780 = D.27779->last_ins;
    D.27779->code = D.27780;
    <D.27841>:
    D.27784 = ins->dreg;
    D.27785 = ainfo->reg;
    D.27786 = (int) D.27785;
    D.27793 = D.27786 + 1;
    mono_call_inst_add_outarg_reg (cfg, call, D.27784, D.27793, 0);
    goto <D.27842>;
    <D.27831>:
    {
      int creg;

      {
        struct MonoInst * inst;

        D.27769 = cfg->mempool;
        inst = mono_mempool_alloc (D.27769, 56);
        inst->data.op[1].const_val = 0;
        D.27843 = inst->data.op[1].const_val;
        inst->data.op[0].const_val = D.27843;
        inst->prev = 0B;
        D.27844 = inst->prev;
        inst->next = D.27844;
        inst->opcode = 380;
        inst->flags = 0;
        inst->type = 0;
        inst->dreg = -1;
        inst->sreg3 = -1;
        D.27845 = inst->sreg3;
        inst->sreg2 = D.27845;
        D.27846 = inst->sreg2;
        inst->sreg1 = D.27846;
        D.27774 = cfg->ip;
        inst->cil_code = D.27774;
        D.27777 = in->dreg;
        inst->sreg1 = D.27777;
        inst->dreg = 13;
        D.27815 = cfg->param_area;
        D.27816 = D.27815 + 4294967288;
        D.27817 = (int) D.27816;
        inst->data.op[0].const_val = D.27817;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        if (D.27780 != 0B) goto <D.27847>; else goto <D.27848>;
        <D.27847>:
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        D.27780->next = inst;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        inst->prev = D.27780;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        goto <D.27849>;
        <D.27848>:
        D.27779 = cfg->cbb;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        D.27780 = D.27779->last_ins;
        D.27779->code = D.27780;
        <D.27849>:
      }
      D.27850 = mono_alloc_ireg (cfg);
      creg = (int) D.27850;
      {
        struct MonoInst * inst;

        D.27769 = cfg->mempool;
        inst = mono_mempool_alloc (D.27769, 56);
        inst->data.op[1].const_val = 0;
        D.27851 = inst->data.op[1].const_val;
        inst->data.op[0].const_val = D.27851;
        inst->prev = 0B;
        D.27852 = inst->prev;
        inst->next = D.27852;
        inst->opcode = 388;
        inst->flags = 0;
        inst->type = 0;
        inst->dreg = -1;
        inst->sreg3 = -1;
        D.27853 = inst->sreg3;
        inst->sreg2 = D.27853;
        D.27854 = inst->sreg2;
        inst->sreg1 = D.27854;
        D.27774 = cfg->ip;
        inst->cil_code = D.27774;
        inst->dreg = creg;
        inst->sreg1 = 13;
        D.27815 = cfg->param_area;
        D.27816 = D.27815 + 4294967288;
        D.27817 = (int) D.27816;
        inst->data.op[0].const_val = D.27817;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        if (D.27780 != 0B) goto <D.27855>; else goto <D.27856>;
        <D.27855>:
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        D.27780->next = inst;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        inst->prev = D.27780;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        goto <D.27857>;
        <D.27856>:
        D.27779 = cfg->cbb;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        D.27780 = D.27779->last_ins;
        D.27779->code = D.27780;
        <D.27857>:
      }
      D.27785 = ainfo->reg;
      D.27786 = (int) D.27785;
      mono_call_inst_add_outarg_reg (cfg, call, creg, D.27786, 0);
      D.27858 = mono_alloc_ireg (cfg);
      creg = (int) D.27858;
      {
        struct MonoInst * inst;

        D.27769 = cfg->mempool;
        inst = mono_mempool_alloc (D.27769, 56);
        inst->data.op[1].const_val = 0;
        D.27859 = inst->data.op[1].const_val;
        inst->data.op[0].const_val = D.27859;
        inst->prev = 0B;
        D.27860 = inst->prev;
        inst->next = D.27860;
        inst->opcode = 388;
        inst->flags = 0;
        inst->type = 0;
        inst->dreg = -1;
        inst->sreg3 = -1;
        D.27861 = inst->sreg3;
        inst->sreg2 = D.27861;
        D.27862 = inst->sreg2;
        inst->sreg1 = D.27862;
        D.27774 = cfg->ip;
        inst->cil_code = D.27774;
        inst->dreg = creg;
        inst->sreg1 = 13;
        D.27815 = cfg->param_area;
        D.27863 = D.27815 + 4294967292;
        D.27864 = (int) D.27863;
        inst->data.op[0].const_val = D.27864;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        if (D.27780 != 0B) goto <D.27865>; else goto <D.27866>;
        <D.27865>:
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        D.27780->next = inst;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        inst->prev = D.27780;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        goto <D.27867>;
        <D.27866>:
        D.27779 = cfg->cbb;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        D.27780 = D.27779->last_ins;
        D.27779->code = D.27780;
        <D.27867>:
      }
      D.27785 = ainfo->reg;
      D.27786 = (int) D.27785;
      D.27793 = D.27786 + 1;
      mono_call_inst_add_outarg_reg (cfg, call, creg, D.27793, 0);
    }
    <D.27842>:
    <D.27829>:
    D.27868 = cfg->flags;
    D.27869 = D.27868 | 32;
    cfg->flags = D.27869;
    goto <D.27795>;
    <D.27794>:
    D.27769 = cfg->mempool;
    ins = mono_mempool_alloc (D.27769, 56);
    ins->data.op[1].const_val = 0;
    D.27770 = ins->data.op[1].const_val;
    ins->data.op[0].const_val = D.27770;
    ins->prev = 0B;
    D.27771 = ins->prev;
    ins->next = D.27771;
    ins->opcode = 424;
    ins->flags = 0;
    ins->type = 0;
    ins->dreg = -1;
    ins->sreg3 = -1;
    D.27772 = ins->sreg3;
    ins->sreg2 = D.27772;
    D.27773 = ins->sreg2;
    ins->sreg1 = D.27773;
    D.27774 = cfg->ip;
    ins->cil_code = D.27774;
    D.27870 = mono_alloc_ireg (cfg);
    D.27871 = (int) D.27870;
    ins->dreg = D.27871;
    D.27777 = in->dreg;
    ins->sreg1 = D.27777;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    if (D.27780 != 0B) goto <D.27872>; else goto <D.27873>;
    <D.27872>:
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    D.27780->next = ins;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    ins->prev = D.27780;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    goto <D.27874>;
    <D.27873>:
    D.27779 = cfg->cbb;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    D.27780 = D.27779->last_ins;
    D.27779->code = D.27780;
    <D.27874>:
    D.27784 = ins->dreg;
    D.27785 = ainfo->reg;
    D.27786 = (int) D.27785;
    mono_call_inst_add_outarg_reg (cfg, call, D.27784, D.27786, 0);
    <D.27795>:
    <D.27762>:
    goto <D.25184>;
    <D.25185>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 2294);
    <D.25186>:
    <D.25187>:
    <D.25188>:
    D.27769 = cfg->mempool;
    ins = mono_mempool_alloc (D.27769, 56);
    ins->data.op[1].const_val = 0;
    D.27770 = ins->data.op[1].const_val;
    ins->data.op[0].const_val = D.27770;
    ins->prev = 0B;
    D.27771 = ins->prev;
    ins->next = D.27771;
    ins->opcode = 333;
    ins->flags = 0;
    ins->type = 0;
    ins->dreg = -1;
    ins->sreg3 = -1;
    D.27772 = ins->sreg3;
    ins->sreg2 = D.27772;
    D.27773 = ins->sreg2;
    ins->sreg1 = D.27773;
    D.27774 = cfg->ip;
    ins->cil_code = D.27774;
    ins->opcode = 333;
    D.27777 = in->dreg;
    ins->sreg1 = D.27777;
    D.27875 = in->klass;
    ins->klass = D.27875;
    ins->data.op[0].p = call;
    D.27769 = cfg->mempool;
    D.27876 = mono_mempool_alloc (D.27769, 20);
    ins->data.op[1].p = D.27876;
    D.27877 = ins->data.op[1].p;
    memcpy (D.27877, ainfo, 20);
    mono_call_inst_add_outarg_vt (cfg, call, ins);
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    if (D.27780 != 0B) goto <D.27878>; else goto <D.27879>;
    <D.27878>:
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    D.27780->next = ins;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    ins->prev = D.27780;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    goto <D.27880>;
    <D.27879>:
    D.27779 = cfg->cbb;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    D.27780 = D.27779->last_ins;
    D.27779->code = D.27780;
    <D.27880>:
    goto <D.25184>;
    <D.25189>:
    D.27763 = BIT_FIELD_REF <*t, 8, 56>;
    D.27764 = D.27763 & 64;
    if (D.27764 == 0) goto <D.27883>; else goto <D.27881>;
    <D.27883>:
    D.27766 = t->type;
    D.27767 = D.27766 + 246;
    if (D.27767 <= 1) goto <D.27884>; else goto <D.27881>;
    <D.27884>:
    {
      struct MonoInst * inst;

      D.27769 = cfg->mempool;
      inst = mono_mempool_alloc (D.27769, 56);
      inst->data.op[1].const_val = 0;
      D.27885 = inst->data.op[1].const_val;
      inst->data.op[0].const_val = D.27885;
      inst->prev = 0B;
      D.27886 = inst->prev;
      inst->next = D.27886;
      inst->opcode = 378;
      inst->flags = 0;
      inst->type = 0;
      inst->dreg = -1;
      inst->sreg3 = -1;
      D.27887 = inst->sreg3;
      inst->sreg2 = D.27887;
      D.27888 = inst->sreg2;
      inst->sreg1 = D.27888;
      D.27774 = cfg->ip;
      inst->cil_code = D.27774;
      D.27777 = in->dreg;
      inst->sreg1 = D.27777;
      inst->dreg = 13;
      D.27889 = ainfo->offset;
      inst->data.op[0].const_val = D.27889;
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      if (D.27780 != 0B) goto <D.27890>; else goto <D.27891>;
      <D.27890>:
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      D.27780->next = inst;
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      inst->prev = D.27780;
      D.27779 = cfg->cbb;
      D.27779->last_ins = inst;
      goto <D.27892>;
      <D.27891>:
      D.27779 = cfg->cbb;
      D.27779 = cfg->cbb;
      D.27779->last_ins = inst;
      D.27780 = D.27779->last_ins;
      D.27779->code = D.27780;
      <D.27892>:
    }
    goto <D.27882>;
    <D.27881>:
    D.27763 = BIT_FIELD_REF <*t, 8, 56>;
    D.27764 = D.27763 & 64;
    if (D.27764 == 0) goto <D.27895>; else goto <D.27893>;
    <D.27895>:
    D.27766 = t->type;
    D.27797 = D.27766 + 244;
    if (D.27797 <= 1) goto <D.27896>; else goto <D.27893>;
    <D.27896>:
    D.27766 = t->type;
    if (D.27766 == 13) goto <D.27897>; else goto <D.27898>;
    <D.27897>:
    {
      struct MonoInst * inst;

      D.27769 = cfg->mempool;
      inst = mono_mempool_alloc (D.27769, 56);
      inst->data.op[1].const_val = 0;
      D.27899 = inst->data.op[1].const_val;
      inst->data.op[0].const_val = D.27899;
      inst->prev = 0B;
      D.27900 = inst->prev;
      inst->next = D.27900;
      inst->opcode = 380;
      inst->flags = 0;
      inst->type = 0;
      inst->dreg = -1;
      inst->sreg3 = -1;
      D.27901 = inst->sreg3;
      inst->sreg2 = D.27901;
      D.27902 = inst->sreg2;
      inst->sreg1 = D.27902;
      D.27774 = cfg->ip;
      inst->cil_code = D.27774;
      D.27777 = in->dreg;
      inst->sreg1 = D.27777;
      inst->dreg = 13;
      D.27889 = ainfo->offset;
      inst->data.op[0].const_val = D.27889;
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      if (D.27780 != 0B) goto <D.27903>; else goto <D.27904>;
      <D.27903>:
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      D.27780->next = inst;
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      inst->prev = D.27780;
      D.27779 = cfg->cbb;
      D.27779->last_ins = inst;
      goto <D.27905>;
      <D.27904>:
      D.27779 = cfg->cbb;
      D.27779 = cfg->cbb;
      D.27779->last_ins = inst;
      D.27780 = D.27779->last_ins;
      D.27779->code = D.27780;
      <D.27905>:
    }
    goto <D.27906>;
    <D.27898>:
    if (0 != 0) goto <D.27907>; else goto <D.27908>;
    <D.27907>:
    {
      struct MonoInst * inst;

      D.27769 = cfg->mempool;
      inst = mono_mempool_alloc (D.27769, 56);
      inst->data.op[1].const_val = 0;
      D.27909 = inst->data.op[1].const_val;
      inst->data.op[0].const_val = D.27909;
      inst->prev = 0B;
      D.27910 = inst->prev;
      inst->next = D.27910;
      inst->opcode = 377;
      inst->flags = 0;
      inst->type = 0;
      inst->dreg = -1;
      inst->sreg3 = -1;
      D.27911 = inst->sreg3;
      inst->sreg2 = D.27911;
      D.27912 = inst->sreg2;
      inst->sreg1 = D.27912;
      D.27774 = cfg->ip;
      inst->cil_code = D.27774;
      D.27777 = in->dreg;
      inst->sreg1 = D.27777;
      inst->dreg = 13;
      D.27889 = ainfo->offset;
      inst->data.op[0].const_val = D.27889;
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      if (D.27780 != 0B) goto <D.27913>; else goto <D.27914>;
      <D.27913>:
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      D.27780->next = inst;
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      inst->prev = D.27780;
      D.27779 = cfg->cbb;
      D.27779->last_ins = inst;
      goto <D.27915>;
      <D.27914>:
      D.27779 = cfg->cbb;
      D.27779 = cfg->cbb;
      D.27779->last_ins = inst;
      D.27780 = D.27779->last_ins;
      D.27779->code = D.27780;
      <D.27915>:
    }
    goto <D.27916>;
    <D.27908>:
    {
      struct MonoInst * inst;

      D.27769 = cfg->mempool;
      inst = mono_mempool_alloc (D.27769, 56);
      inst->data.op[1].const_val = 0;
      D.27917 = inst->data.op[1].const_val;
      inst->data.op[0].const_val = D.27917;
      inst->prev = 0B;
      D.27918 = inst->prev;
      inst->next = D.27918;
      inst->opcode = 379;
      inst->flags = 0;
      inst->type = 0;
      inst->dreg = -1;
      inst->sreg3 = -1;
      D.27919 = inst->sreg3;
      inst->sreg2 = D.27919;
      D.27920 = inst->sreg2;
      inst->sreg1 = D.27920;
      D.27774 = cfg->ip;
      inst->cil_code = D.27774;
      D.27777 = in->dreg;
      inst->sreg1 = D.27777;
      inst->dreg = 13;
      D.27889 = ainfo->offset;
      inst->data.op[0].const_val = D.27889;
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      if (D.27780 != 0B) goto <D.27921>; else goto <D.27922>;
      <D.27921>:
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      D.27780->next = inst;
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      inst->prev = D.27780;
      D.27779 = cfg->cbb;
      D.27779->last_ins = inst;
      goto <D.27923>;
      <D.27922>:
      D.27779 = cfg->cbb;
      D.27779 = cfg->cbb;
      D.27779->last_ins = inst;
      D.27780 = D.27779->last_ins;
      D.27779->code = D.27780;
      <D.27923>:
    }
    <D.27916>:
    <D.27906>:
    goto <D.27894>;
    <D.27893>:
    {
      struct MonoInst * inst;

      D.27769 = cfg->mempool;
      inst = mono_mempool_alloc (D.27769, 56);
      inst->data.op[1].const_val = 0;
      D.27924 = inst->data.op[1].const_val;
      inst->data.op[0].const_val = D.27924;
      inst->prev = 0B;
      D.27925 = inst->prev;
      inst->next = D.27925;
      inst->opcode = 374;
      inst->flags = 0;
      inst->type = 0;
      inst->dreg = -1;
      inst->sreg3 = -1;
      D.27926 = inst->sreg3;
      inst->sreg2 = D.27926;
      D.27927 = inst->sreg2;
      inst->sreg1 = D.27927;
      D.27774 = cfg->ip;
      inst->cil_code = D.27774;
      D.27777 = in->dreg;
      inst->sreg1 = D.27777;
      inst->dreg = 13;
      D.27889 = ainfo->offset;
      inst->data.op[0].const_val = D.27889;
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      if (D.27780 != 0B) goto <D.27928>; else goto <D.27929>;
      <D.27928>:
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      D.27780->next = inst;
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      inst->prev = D.27780;
      D.27779 = cfg->cbb;
      D.27779->last_ins = inst;
      goto <D.27930>;
      <D.27929>:
      D.27779 = cfg->cbb;
      D.27779 = cfg->cbb;
      D.27779->last_ins = inst;
      D.27780 = D.27779->last_ins;
      D.27779->code = D.27780;
      <D.27930>:
    }
    <D.27894>:
    <D.27882>:
    goto <D.25184>;
    <D.25195>:
    D.27763 = BIT_FIELD_REF <*t, 8, 56>;
    D.27764 = D.27763 & 64;
    if (D.27764 == 0) goto <D.27933>; else goto <D.27931>;
    <D.27933>:
    D.27766 = t->type;
    D.27767 = D.27766 + 246;
    if (D.27767 <= 1) goto <D.27934>; else goto <D.27931>;
    <D.27934>:
    {
      struct MonoInst * inst;

      D.27769 = cfg->mempool;
      inst = mono_mempool_alloc (D.27769, 56);
      inst->data.op[1].const_val = 0;
      D.27935 = inst->data.op[1].const_val;
      inst->data.op[0].const_val = D.27935;
      inst->prev = 0B;
      D.27936 = inst->prev;
      inst->next = D.27936;
      inst->opcode = 374;
      inst->flags = 0;
      inst->type = 0;
      inst->dreg = -1;
      inst->sreg3 = -1;
      D.27937 = inst->sreg3;
      inst->sreg2 = D.27937;
      D.27938 = inst->sreg2;
      inst->sreg1 = D.27938;
      D.27774 = cfg->ip;
      inst->cil_code = D.27774;
      D.27777 = in->dreg;
      D.27789 = D.27777 + 2;
      inst->sreg1 = D.27789;
      inst->dreg = 13;
      D.27889 = ainfo->offset;
      inst->data.op[0].const_val = D.27889;
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      if (D.27780 != 0B) goto <D.27939>; else goto <D.27940>;
      <D.27939>:
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      D.27780->next = inst;
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      inst->prev = D.27780;
      D.27779 = cfg->cbb;
      D.27779->last_ins = inst;
      goto <D.27941>;
      <D.27940>:
      D.27779 = cfg->cbb;
      D.27779 = cfg->cbb;
      D.27779->last_ins = inst;
      D.27780 = D.27779->last_ins;
      D.27779->code = D.27780;
      <D.27941>:
    }
    D.27769 = cfg->mempool;
    ins = mono_mempool_alloc (D.27769, 56);
    ins->data.op[1].const_val = 0;
    D.27770 = ins->data.op[1].const_val;
    ins->data.op[0].const_val = D.27770;
    ins->prev = 0B;
    D.27771 = ins->prev;
    ins->next = D.27771;
    ins->opcode = 424;
    ins->flags = 0;
    ins->type = 0;
    ins->dreg = -1;
    ins->sreg3 = -1;
    D.27772 = ins->sreg3;
    ins->sreg2 = D.27772;
    D.27773 = ins->sreg2;
    ins->sreg1 = D.27773;
    D.27774 = cfg->ip;
    ins->cil_code = D.27774;
    D.27942 = mono_alloc_ireg (cfg);
    D.27943 = (int) D.27942;
    ins->dreg = D.27943;
    D.27777 = in->dreg;
    D.27778 = D.27777 + 1;
    ins->sreg1 = D.27778;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    if (D.27780 != 0B) goto <D.27944>; else goto <D.27945>;
    <D.27944>:
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    D.27780->next = ins;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    ins->prev = D.27780;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    goto <D.27946>;
    <D.27945>:
    D.27779 = cfg->cbb;
    D.27779 = cfg->cbb;
    D.27779->last_ins = ins;
    D.27780 = D.27779->last_ins;
    D.27779->code = D.27780;
    <D.27946>:
    D.27784 = ins->dreg;
    mono_call_inst_add_outarg_reg (cfg, call, D.27784, 3, 0);
    goto <D.27932>;
    <D.27931>:
    D.27947 = BIT_FIELD_REF <*t, 16, 48>;
    D.27948 = D.27947 & 16639;
    if (D.27948 == 13) goto <D.27949>; else goto <D.27950>;
    <D.27949>:
    {
      int creg;

      {
        struct MonoInst * inst;

        D.27769 = cfg->mempool;
        inst = mono_mempool_alloc (D.27769, 56);
        inst->data.op[1].const_val = 0;
        D.27951 = inst->data.op[1].const_val;
        inst->data.op[0].const_val = D.27951;
        inst->prev = 0B;
        D.27952 = inst->prev;
        inst->next = D.27952;
        inst->opcode = 380;
        inst->flags = 0;
        inst->type = 0;
        inst->dreg = -1;
        inst->sreg3 = -1;
        D.27953 = inst->sreg3;
        inst->sreg2 = D.27953;
        D.27954 = inst->sreg2;
        inst->sreg1 = D.27954;
        D.27774 = cfg->ip;
        inst->cil_code = D.27774;
        D.27777 = in->dreg;
        inst->sreg1 = D.27777;
        inst->dreg = 13;
        D.27815 = cfg->param_area;
        D.27816 = D.27815 + 4294967288;
        D.27817 = (int) D.27816;
        inst->data.op[0].const_val = D.27817;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        if (D.27780 != 0B) goto <D.27955>; else goto <D.27956>;
        <D.27955>:
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        D.27780->next = inst;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        inst->prev = D.27780;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        goto <D.27957>;
        <D.27956>:
        D.27779 = cfg->cbb;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        D.27780 = D.27779->last_ins;
        D.27779->code = D.27780;
        <D.27957>:
      }
      D.27958 = mono_alloc_ireg (cfg);
      creg = (int) D.27958;
      mono_call_inst_add_outarg_reg (cfg, call, creg, 3, 0);
      {
        struct MonoInst * inst;

        D.27769 = cfg->mempool;
        inst = mono_mempool_alloc (D.27769, 56);
        inst->data.op[1].const_val = 0;
        D.27959 = inst->data.op[1].const_val;
        inst->data.op[0].const_val = D.27959;
        inst->prev = 0B;
        D.27960 = inst->prev;
        inst->next = D.27960;
        inst->opcode = 388;
        inst->flags = 0;
        inst->type = 0;
        inst->dreg = -1;
        inst->sreg3 = -1;
        D.27961 = inst->sreg3;
        inst->sreg2 = D.27961;
        D.27962 = inst->sreg2;
        inst->sreg1 = D.27962;
        D.27774 = cfg->ip;
        inst->cil_code = D.27774;
        inst->dreg = creg;
        inst->sreg1 = 13;
        D.27815 = cfg->param_area;
        D.27816 = D.27815 + 4294967288;
        D.27817 = (int) D.27816;
        inst->data.op[0].const_val = D.27817;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        if (D.27780 != 0B) goto <D.27963>; else goto <D.27964>;
        <D.27963>:
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        D.27780->next = inst;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        inst->prev = D.27780;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        goto <D.27965>;
        <D.27964>:
        D.27779 = cfg->cbb;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        D.27780 = D.27779->last_ins;
        D.27779->code = D.27780;
        <D.27965>:
      }
      D.27966 = mono_alloc_ireg (cfg);
      creg = (int) D.27966;
      {
        struct MonoInst * inst;

        D.27769 = cfg->mempool;
        inst = mono_mempool_alloc (D.27769, 56);
        inst->data.op[1].const_val = 0;
        D.27967 = inst->data.op[1].const_val;
        inst->data.op[0].const_val = D.27967;
        inst->prev = 0B;
        D.27968 = inst->prev;
        inst->next = D.27968;
        inst->opcode = 388;
        inst->flags = 0;
        inst->type = 0;
        inst->dreg = -1;
        inst->sreg3 = -1;
        D.27969 = inst->sreg3;
        inst->sreg2 = D.27969;
        D.27970 = inst->sreg2;
        inst->sreg1 = D.27970;
        D.27774 = cfg->ip;
        inst->cil_code = D.27774;
        inst->dreg = creg;
        inst->sreg1 = 13;
        D.27815 = cfg->param_area;
        D.27863 = D.27815 + 4294967292;
        D.27864 = (int) D.27863;
        inst->data.op[0].const_val = D.27864;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        if (D.27780 != 0B) goto <D.27971>; else goto <D.27972>;
        <D.27971>:
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        D.27780->next = inst;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        inst->prev = D.27780;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        goto <D.27973>;
        <D.27972>:
        D.27779 = cfg->cbb;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        D.27780 = D.27779->last_ins;
        D.27779->code = D.27780;
        <D.27973>:
      }
      {
        struct MonoInst * inst;

        D.27769 = cfg->mempool;
        inst = mono_mempool_alloc (D.27769, 56);
        inst->data.op[1].const_val = 0;
        D.27974 = inst->data.op[1].const_val;
        inst->data.op[0].const_val = D.27974;
        inst->prev = 0B;
        D.27975 = inst->prev;
        inst->next = D.27975;
        inst->opcode = 374;
        inst->flags = 0;
        inst->type = 0;
        inst->dreg = -1;
        inst->sreg3 = -1;
        D.27976 = inst->sreg3;
        inst->sreg2 = D.27976;
        D.27977 = inst->sreg2;
        inst->sreg1 = D.27977;
        D.27774 = cfg->ip;
        inst->cil_code = D.27774;
        inst->sreg1 = creg;
        inst->dreg = 13;
        D.27889 = ainfo->offset;
        inst->data.op[0].const_val = D.27889;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        if (D.27780 != 0B) goto <D.27978>; else goto <D.27979>;
        <D.27978>:
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        D.27780->next = inst;
        D.27779 = cfg->cbb;
        D.27780 = D.27779->last_ins;
        inst->prev = D.27780;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        goto <D.27980>;
        <D.27979>:
        D.27779 = cfg->cbb;
        D.27779 = cfg->cbb;
        D.27779->last_ins = inst;
        D.27780 = D.27779->last_ins;
        D.27779->code = D.27780;
        <D.27980>:
      }
      D.27868 = cfg->flags;
      D.27869 = D.27868 | 32;
      cfg->flags = D.27869;
    }
    goto <D.27981>;
    <D.27950>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 2353);
    <D.27981>:
    <D.27932>:
    goto <D.25184>;
    <D.25202>:
    {
      int fdreg;

      D.27982 = mono_alloc_freg (cfg);
      fdreg = (int) D.27982;
      D.27799 = BIT_FIELD_REF <*ainfo, 8, 128>;
      D.27800 = D.27799 & 15;
      if (D.27800 == 8) goto <D.27983>; else goto <D.27984>;
      <D.27983>:
      D.27769 = cfg->mempool;
      ins = mono_mempool_alloc (D.27769, 56);
      ins->data.op[1].const_val = 0;
      D.27770 = ins->data.op[1].const_val;
      ins->data.op[0].const_val = D.27770;
      ins->prev = 0B;
      D.27771 = ins->prev;
      ins->next = D.27771;
      ins->opcode = 426;
      ins->flags = 0;
      ins->type = 0;
      ins->dreg = -1;
      ins->sreg3 = -1;
      D.27772 = ins->sreg3;
      ins->sreg2 = D.27772;
      D.27773 = ins->sreg2;
      ins->sreg1 = D.27773;
      D.27774 = cfg->ip;
      ins->cil_code = D.27774;
      D.27777 = in->dreg;
      ins->sreg1 = D.27777;
      ins->dreg = fdreg;
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      if (D.27780 != 0B) goto <D.27985>; else goto <D.27986>;
      <D.27985>:
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      D.27780->next = ins;
      D.27779 = cfg->cbb;
      D.27780 = D.27779->last_ins;
      ins->prev = D.27780;
      D.27779 = cfg->cbb;
      D.27779->last_ins = ins;
      goto <D.27987>;
      <D.27986>:
      D.27779 = cfg->cbb;
      D.27779 = cfg->cbb;
      D.27779->last_ins = ins;
      D.27780 = D.27779->last_ins;
      D.27779->code = D.27780;
      <D.27987>:
      D.27784 = ins->dreg;
      D.27785 = ainfo->reg;
      D.27786 = (int) D.27785;
      mono_call_inst_add_outarg_reg (cfg, call, D.27784, D.27786, 1);
      goto <D.27988>;
      <D.27984>:
      {
        struct FloatArgData * fad;
        struct MonoInst * float_arg;

        D.27989 = mono_defaults.single_class;
        D.27990 = &D.27989->byval_arg;
        float_arg = mono_compile_create_var (cfg, D.27990, 329);
        D.27991 = float_arg->flags;
        D.27992 = D.27991 | 4;
        float_arg->flags = D.27992;
        {
          struct MonoInst * inst;

          D.27769 = cfg->mempool;
          inst = mono_mempool_alloc (D.27769, 56);
          inst->data.op[1].const_val = 0;
          D.27993 = inst->data.op[1].const_val;
          inst->data.op[0].const_val = D.27993;
          inst->prev = 0B;
          D.27994 = inst->prev;
          inst->next = D.27994;
          inst->opcode = 424;
          inst->flags = 0;
          inst->type = 0;
          inst->dreg = -1;
          inst->sreg3 = -1;
          D.27995 = inst->sreg3;
          inst->sreg2 = D.27995;
          D.27996 = inst->sreg2;
          inst->sreg1 = D.27996;
          D.27774 = cfg->ip;
          inst->cil_code = D.27774;
          D.27997 = float_arg->dreg;
          inst->dreg = D.27997;
          D.27777 = in->dreg;
          inst->sreg1 = D.27777;
          D.27779 = cfg->cbb;
          D.27780 = D.27779->last_ins;
          if (D.27780 != 0B) goto <D.27998>; else goto <D.27999>;
          <D.27998>:
          D.27779 = cfg->cbb;
          D.27780 = D.27779->last_ins;
          D.27780->next = inst;
          D.27779 = cfg->cbb;
          D.27780 = D.27779->last_ins;
          inst->prev = D.27780;
          D.27779 = cfg->cbb;
          D.27779->last_ins = inst;
          goto <D.28000>;
          <D.27999>:
          D.27779 = cfg->cbb;
          D.27779 = cfg->cbb;
          D.27779->last_ins = inst;
          D.27780 = D.27779->last_ins;
          D.27779->code = D.27780;
          <D.28000>:
        }
        D.27769 = cfg->mempool;
        fad = mono_mempool_alloc0 (D.27769, 8);
        D.27997 = float_arg->dreg;
        fad->vreg = D.27997;
        D.27785 = ainfo->reg;
        D.28001 = (int) D.27785;
        fad->hreg = D.28001;
        D.27769 = cfg->mempool;
        D.28002 = call->float_args;
        D.28003 = g_slist_append_mempool (D.27769, D.28002, fad);
        call->float_args = D.28003;
      }
      <D.27988>:
      D.28004 = call->used_iregs;
      D.27785 = ainfo->reg;
      D.27786 = (int) D.27785;
      D.28005 = 1 << D.27786;
      D.28006 = (unsigned int) D.28005;
      D.28007 = D.28004 | D.28006;
      call->used_iregs = D.28007;
      D.27868 = cfg->flags;
      D.27869 = D.27868 | 32;
      cfg->flags = D.27869;
      goto <D.25184>;
    }
    <D.25207>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 2405);
    <D.25184>:
  }
  i = i + 1;
  <D.25209>:
  if (i < n) goto <D.25208>; else goto <D.25210>;
  <D.25210>:
  D.28008 = BIT_FIELD_REF <*sig, 16, 80>;
  D.28009 = D.28008 & 319;
  if (D.28009 == 5) goto <D.28010>; else goto <D.28011>;
  <D.28010>:
  D.27752 = sig->sentinelpos;
  D.27753 = (int) D.27752;
  if (D.27753 == n) goto <D.28012>; else goto <D.28013>;
  <D.28012>:
  emit_sig_cookie (cfg, call, cinfo);
  <D.28013>:
  <D.28011>:
  D.28014 = cinfo->ret.storage;
  if (D.28014 == 6) goto <D.28015>; else goto <D.28016>;
  <D.28015>:
  call->vret_in_reg = 1;
  goto <D.28017>;
  <D.28016>:
  D.28018 = cinfo->vtype_retaddr;
  if (D.28018 != 0) goto <D.28019>; else goto <D.28020>;
  <D.28019>:
  {
    struct MonoInst * vtarg;

    D.27769 = cfg->mempool;
    vtarg = mono_mempool_alloc (D.27769, 56);
    vtarg->data.op[1].const_val = 0;
    D.28021 = vtarg->data.op[1].const_val;
    vtarg->data.op[0].const_val = D.28021;
    vtarg->prev = 0B;
    D.28022 = vtarg->prev;
    vtarg->next = D.28022;
    vtarg->opcode = 424;
    vtarg->flags = 0;
    vtarg->type = 0;
    vtarg->dreg = -1;
    vtarg->sreg3 = -1;
    D.28023 = vtarg->sreg3;
    vtarg->sreg2 = D.28023;
    D.28024 = vtarg->sreg2;
    vtarg->sreg1 = D.28024;
    D.27774 = cfg->ip;
    vtarg->cil_code = D.27774;
    D.28025 = call->vret_var;
    D.28026 = D.28025->dreg;
    vtarg->sreg1 = D.28026;
    D.28027 = mono_alloc_preg (cfg);
    D.28028 = (int) D.28027;
    vtarg->dreg = D.28028;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    if (D.27780 != 0B) goto <D.28029>; else goto <D.28030>;
    <D.28029>:
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    D.27780->next = vtarg;
    D.27779 = cfg->cbb;
    D.27780 = D.27779->last_ins;
    vtarg->prev = D.27780;
    D.27779 = cfg->cbb;
    D.27779->last_ins = vtarg;
    goto <D.28031>;
    <D.28030>:
    D.27779 = cfg->cbb;
    D.27779 = cfg->cbb;
    D.27779->last_ins = vtarg;
    D.27780 = D.27779->last_ins;
    D.27779->code = D.27780;
    <D.28031>:
    D.28032 = vtarg->dreg;
    D.28033 = cinfo->ret.reg;
    D.28034 = (int) D.28033;
    mono_call_inst_add_outarg_reg (cfg, call, D.28032, D.28034, 0);
  }
  <D.28020>:
  <D.28017>:
  D.28035 = cinfo->stack_usage;
  call->stack_usage = D.28035;
  monoeg_g_free (cinfo);
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.28036;
  unsigned int D.28037;

  D.28037 = __builtin_object_size (__dest, 0);
  D.28036 = __builtin___memcpy_chk (__dest, __src, __len, D.28037);
  return D.28036;
}


g_slist_append_mempool (struct MonoMemPool * mp, struct GSList * list, void * data)
{
  struct GSList * D.28041;
  struct GSList * D.28042;
  struct GSList * new_list;
  struct GSList * last;

  new_list = mono_mempool_alloc (mp, 8);
  new_list->data = data;
  new_list->next = 0B;
  if (list != 0B) goto <D.28039>; else goto <D.28040>;
  <D.28039>:
  last = list;
  goto <D.13712>;
  <D.13711>:
  last = last->next;
  <D.13712>:
  D.28041 = last->next;
  if (D.28041 != 0B) goto <D.13711>; else goto <D.13713>;
  <D.13713>:
  last->next = new_list;
  D.28042 = list;
  return D.28042;
  <D.28040>:
  D.28042 = new_list;
  return D.28042;
}


emit_sig_cookie (struct MonoCompile * cfg, struct MonoCallInst * call, struct CallInfo * cinfo)
{
  unsigned char D.28044;
  unsigned char D.28045;
  <unnamed type> D.28048;
  _Bool D.28049;
  long int D.28050;
  long int D.28051;
  struct MonoMethodSignature * D.28054;
  short unsigned int D.28055;
  short int D.28056;
  short unsigned int D.28057;
  short unsigned int D.28058;
  struct MonoType *[0:] * D.28059;
  sizetype D.28060;
  struct MonoType * * D.28061;
  unsigned int D.28062;
  unsigned int D.28063;
  unsigned int D.28064;
  struct MonoMemPool * D.28065;
  int D.28066;
  struct MonoInst * D.28067;
  guint16 iftmp.78;
  unsigned char D.28069;
  unsigned char D.28070;
  int D.28074;
  int D.28075;
  const unsigned char * D.28076;
  struct MonoBasicBlock * D.28077;
  struct MonoInst * D.28078;
  int D.28082;
  struct MonoInst * D.28083;
  int D.28084;
  int D.28085;
  int D.28086;
  struct MonoMethodSignature * tmp_sig;
  int sig_reg;

  D.28044 = BIT_FIELD_REF <*call, 8, 704>;
  D.28045 = D.28044 & 2;
  if (D.28045 != 0) goto <D.28046>; else goto <D.28047>;
  <D.28046>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 2107);
  <D.28047>:
  D.28048 = cinfo->sig_cookie.storage;
  D.28049 = D.28048 != 3;
  D.28050 = (long int) D.28049;
  D.28051 = __builtin_expect (D.28050, 0);
  if (D.28051 != 0) goto <D.28052>; else goto <D.28053>;
  <D.28052>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 2109, "cinfo->sig_cookie.storage == RegTypeBase");
  <D.28053>:
  D.28054 = call->signature;
  tmp_sig = mono_metadata_signature_dup (D.28054);
  D.28055 = tmp_sig->param_count;
  D.28054 = call->signature;
  D.28056 = D.28054->sentinelpos;
  D.28057 = (short unsigned int) D.28056;
  D.28058 = D.28055 - D.28057;
  tmp_sig->param_count = D.28058;
  tmp_sig->sentinelpos = 0;
  D.28059 = &tmp_sig->params;
  D.28054 = call->signature;
  D.28054 = call->signature;
  D.28056 = D.28054->sentinelpos;
  D.28060 = (sizetype) D.28056;
  D.28061 = &D.28054->params[D.28060];
  D.28055 = tmp_sig->param_count;
  D.28062 = (unsigned int) D.28055;
  D.28063 = D.28062 * 4;
  memcpy (D.28059, D.28061, D.28063);
  D.28064 = mono_alloc_ireg (cfg);
  sig_reg = (int) D.28064;
  {
    struct MonoInst * inst;

    D.28065 = cfg->mempool;
    inst = mono_mempool_alloc (D.28065, 56);
    inst->data.op[1].const_val = 0;
    D.28066 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28066;
    inst->prev = 0B;
    D.28067 = inst->prev;
    inst->next = D.28067;
    D.28069 = BIT_FIELD_REF <*cfg, 8, 3392>;
    D.28070 = D.28069 & 64;
    if (D.28070 != 0) goto <D.28071>; else goto <D.28072>;
    <D.28071>:
    iftmp.78 = 732;
    goto <D.28073>;
    <D.28072>:
    iftmp.78 = 362;
    <D.28073>:
    inst->opcode = iftmp.78;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28074 = inst->sreg3;
    inst->sreg2 = D.28074;
    D.28075 = inst->sreg2;
    inst->sreg1 = D.28075;
    D.28076 = cfg->ip;
    inst->cil_code = D.28076;
    inst->dreg = sig_reg;
    inst->data.op[0].p = tmp_sig;
    inst->data.op[1].const_val = 44;
    D.28077 = cfg->cbb;
    D.28078 = D.28077->last_ins;
    if (D.28078 != 0B) goto <D.28079>; else goto <D.28080>;
    <D.28079>:
    D.28077 = cfg->cbb;
    D.28078 = D.28077->last_ins;
    D.28078->next = inst;
    D.28077 = cfg->cbb;
    D.28078 = D.28077->last_ins;
    inst->prev = D.28078;
    D.28077 = cfg->cbb;
    D.28077->last_ins = inst;
    goto <D.28081>;
    <D.28080>:
    D.28077 = cfg->cbb;
    D.28077 = cfg->cbb;
    D.28077->last_ins = inst;
    D.28078 = D.28077->last_ins;
    D.28077->code = D.28078;
    <D.28081>:
  }
  {
    struct MonoInst * inst;

    D.28065 = cfg->mempool;
    inst = mono_mempool_alloc (D.28065, 56);
    inst->data.op[1].const_val = 0;
    D.28082 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28082;
    inst->prev = 0B;
    D.28083 = inst->prev;
    inst->next = D.28083;
    inst->opcode = 374;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28084 = inst->sreg3;
    inst->sreg2 = D.28084;
    D.28085 = inst->sreg2;
    inst->sreg1 = D.28085;
    D.28076 = cfg->ip;
    inst->cil_code = D.28076;
    inst->sreg1 = sig_reg;
    inst->dreg = 13;
    D.28086 = cinfo->sig_cookie.offset;
    inst->data.op[0].const_val = D.28086;
    D.28077 = cfg->cbb;
    D.28078 = D.28077->last_ins;
    if (D.28078 != 0B) goto <D.28087>; else goto <D.28088>;
    <D.28087>:
    D.28077 = cfg->cbb;
    D.28078 = D.28077->last_ins;
    D.28078->next = inst;
    D.28077 = cfg->cbb;
    D.28078 = D.28077->last_ins;
    inst->prev = D.28078;
    D.28077 = cfg->cbb;
    D.28077->last_ins = inst;
    goto <D.28089>;
    <D.28088>:
    D.28077 = cfg->cbb;
    D.28077 = cfg->cbb;
    D.28077->last_ins = inst;
    D.28078 = D.28077->last_ins;
    D.28077->code = D.28078;
    <D.28089>:
  }
}


mono_arch_emit_outarg_vt (struct MonoCompile * cfg, struct MonoInst * ins, struct MonoInst * src)
{
  short unsigned int D.28090;
  <unnamed type> D.28091;
  int D.28094;
  unsigned char D.28095;
  int D.28096;
  struct MonoMemPool * D.28099;
  int D.28100;
  struct MonoInst * D.28101;
  int D.28102;
  int D.28103;
  const unsigned char * D.28104;
  int D.28105;
  struct MonoBasicBlock * D.28106;
  struct MonoInst * D.28107;
  unsigned int D.28111;
  int D.28112;
  struct MonoInst * D.28113;
  int D.28114;
  int D.28115;
  int D.28119;
  struct MonoInst * D.28120;
  int D.28121;
  int D.28122;
  unsigned int D.28126;
  int D.28127;
  struct MonoInst * D.28128;
  int D.28129;
  int D.28130;
  int D.28134;
  struct MonoInst * D.28135;
  int D.28136;
  int D.28137;
  int D.28138;
  int D.28142;
  struct MonoInst * D.28143;
  int D.28144;
  int D.28145;
  int D.28149;
  struct MonoInst * D.28150;
  int D.28151;
  int D.28152;
  int D.28156;
  struct MonoInst * D.28157;
  int D.28158;
  int D.28159;
  int D.28160;
  int D.28164;
  struct MonoInst * D.28165;
  int D.28166;
  int D.28167;
  int D.28171;
  struct MonoInst * D.28172;
  int D.28173;
  int D.28174;
  int D.28178;
  struct MonoInst * D.28179;
  int D.28180;
  int D.28181;
  int D.28185;
  unsigned int soffset.79;
  unsigned int D.28187;
  unsigned int struct_size.80;
  unsigned int D.28189;
  <unnamed-unsigned:4> D.28190;
  int D.28191;
  unsigned int ovf_size.81;
  unsigned int D.28195;
  unsigned int D.28196;
  int D.28197;
  int iftmp.82;
  struct MonoCallInst * call;
  struct ArgInfo * ainfo;
  int ovf_size;
  int doffset;
  int struct_size;
  int i;
  int soffset;
  int dreg;
  int tmpreg;

  call = ins->data.op[0].p;
  ainfo = ins->data.op[1].p;
  D.28090 = ainfo->vtsize;
  ovf_size = (int) D.28090;
  doffset = ainfo->offset;
  struct_size = ainfo->struct_size;
  D.28091 = ainfo->storage;
  if (D.28091 == 8) goto <D.28092>; else goto <D.28093>;
  <D.28092>:
  D.28094 = src->dreg;
  D.28095 = ainfo->reg;
  D.28096 = (int) D.28095;
  mono_call_inst_add_outarg_reg (cfg, call, D.28094, D.28096, 0);
  return;
  <D.28093>:
  D.28091 = ainfo->storage;
  if (D.28091 == 9) goto <D.28097>; else goto <D.28098>;
  <D.28097>:
  {
    struct MonoInst * inst;

    D.28099 = cfg->mempool;
    inst = mono_mempool_alloc (D.28099, 56);
    inst->data.op[1].const_val = 0;
    D.28100 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28100;
    inst->prev = 0B;
    D.28101 = inst->prev;
    inst->next = D.28101;
    inst->opcode = 374;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28102 = inst->sreg3;
    inst->sreg2 = D.28102;
    D.28103 = inst->sreg2;
    inst->sreg1 = D.28103;
    D.28104 = cfg->ip;
    inst->cil_code = D.28104;
    D.28094 = src->dreg;
    inst->sreg1 = D.28094;
    inst->dreg = 13;
    D.28105 = ainfo->offset;
    inst->data.op[0].const_val = D.28105;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    if (D.28107 != 0B) goto <D.28108>; else goto <D.28109>;
    <D.28108>:
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    D.28107->next = inst;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    inst->prev = D.28107;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    goto <D.28110>;
    <D.28109>:
    D.28106 = cfg->cbb;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    D.28107 = D.28106->last_ins;
    D.28106->code = D.28107;
    <D.28110>:
  }
  return;
  <D.28098>:
  soffset = 0;
  i = 0;
  goto <D.25243>;
  <D.25242>:
  D.28111 = mono_alloc_ireg (cfg);
  dreg = (int) D.28111;
  switch (struct_size) <default: <D.25240>, case 1: <D.25227>, case 2: <D.25230>, case 3: <D.25232>>
  <D.25227>:
  {
    struct MonoInst * inst;

    D.28099 = cfg->mempool;
    inst = mono_mempool_alloc (D.28099, 56);
    inst->data.op[1].const_val = 0;
    D.28112 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28112;
    inst->prev = 0B;
    D.28113 = inst->prev;
    inst->next = D.28113;
    inst->opcode = 390;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28114 = inst->sreg3;
    inst->sreg2 = D.28114;
    D.28115 = inst->sreg2;
    inst->sreg1 = D.28115;
    D.28104 = cfg->ip;
    inst->cil_code = D.28104;
    inst->dreg = dreg;
    D.28094 = src->dreg;
    inst->sreg1 = D.28094;
    inst->data.op[0].const_val = soffset;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    if (D.28107 != 0B) goto <D.28116>; else goto <D.28117>;
    <D.28116>:
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    D.28107->next = inst;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    inst->prev = D.28107;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    goto <D.28118>;
    <D.28117>:
    D.28106 = cfg->cbb;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    D.28107 = D.28106->last_ins;
    D.28106->code = D.28107;
    <D.28118>:
  }
  goto <D.25229>;
  <D.25230>:
  {
    struct MonoInst * inst;

    D.28099 = cfg->mempool;
    inst = mono_mempool_alloc (D.28099, 56);
    inst->data.op[1].const_val = 0;
    D.28119 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28119;
    inst->prev = 0B;
    D.28120 = inst->prev;
    inst->next = D.28120;
    inst->opcode = 392;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28121 = inst->sreg3;
    inst->sreg2 = D.28121;
    D.28122 = inst->sreg2;
    inst->sreg1 = D.28122;
    D.28104 = cfg->ip;
    inst->cil_code = D.28104;
    inst->dreg = dreg;
    D.28094 = src->dreg;
    inst->sreg1 = D.28094;
    inst->data.op[0].const_val = soffset;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    if (D.28107 != 0B) goto <D.28123>; else goto <D.28124>;
    <D.28123>:
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    D.28107->next = inst;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    inst->prev = D.28107;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    goto <D.28125>;
    <D.28124>:
    D.28106 = cfg->cbb;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    D.28107 = D.28106->last_ins;
    D.28106->code = D.28107;
    <D.28125>:
  }
  goto <D.25229>;
  <D.25232>:
  D.28126 = mono_alloc_ireg (cfg);
  tmpreg = (int) D.28126;
  {
    struct MonoInst * inst;

    D.28099 = cfg->mempool;
    inst = mono_mempool_alloc (D.28099, 56);
    inst->data.op[1].const_val = 0;
    D.28127 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28127;
    inst->prev = 0B;
    D.28128 = inst->prev;
    inst->next = D.28128;
    inst->opcode = 390;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28129 = inst->sreg3;
    inst->sreg2 = D.28129;
    D.28130 = inst->sreg2;
    inst->sreg1 = D.28130;
    D.28104 = cfg->ip;
    inst->cil_code = D.28104;
    inst->dreg = dreg;
    D.28094 = src->dreg;
    inst->sreg1 = D.28094;
    inst->data.op[0].const_val = soffset;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    if (D.28107 != 0B) goto <D.28131>; else goto <D.28132>;
    <D.28131>:
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    D.28107->next = inst;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    inst->prev = D.28107;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    goto <D.28133>;
    <D.28132>:
    D.28106 = cfg->cbb;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    D.28107 = D.28106->last_ins;
    D.28106->code = D.28107;
    <D.28133>:
  }
  {
    struct MonoInst * inst;

    D.28099 = cfg->mempool;
    inst = mono_mempool_alloc (D.28099, 56);
    inst->data.op[1].const_val = 0;
    D.28134 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28134;
    inst->prev = 0B;
    D.28135 = inst->prev;
    inst->next = D.28135;
    inst->opcode = 390;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28136 = inst->sreg3;
    inst->sreg2 = D.28136;
    D.28137 = inst->sreg2;
    inst->sreg1 = D.28137;
    D.28104 = cfg->ip;
    inst->cil_code = D.28104;
    inst->dreg = tmpreg;
    D.28094 = src->dreg;
    inst->sreg1 = D.28094;
    D.28138 = soffset + 1;
    inst->data.op[0].const_val = D.28138;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    if (D.28107 != 0B) goto <D.28139>; else goto <D.28140>;
    <D.28139>:
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    D.28107->next = inst;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    inst->prev = D.28107;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    goto <D.28141>;
    <D.28140>:
    D.28106 = cfg->cbb;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    D.28107 = D.28106->last_ins;
    D.28106->code = D.28107;
    <D.28141>:
  }
  {
    struct MonoInst * inst;

    D.28099 = cfg->mempool;
    inst = mono_mempool_alloc (D.28099, 56);
    inst->data.op[1].const_val = 0;
    D.28142 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28142;
    inst->prev = 0B;
    D.28143 = inst->prev;
    inst->next = D.28143;
    inst->opcode = 439;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28144 = inst->sreg3;
    inst->sreg2 = D.28144;
    D.28145 = inst->sreg2;
    inst->sreg1 = D.28145;
    D.28104 = cfg->ip;
    inst->cil_code = D.28104;
    inst->dreg = tmpreg;
    inst->sreg1 = tmpreg;
    inst->data.op[1].const_val = 8;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    if (D.28107 != 0B) goto <D.28146>; else goto <D.28147>;
    <D.28146>:
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    D.28107->next = inst;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    inst->prev = D.28107;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    goto <D.28148>;
    <D.28147>:
    D.28106 = cfg->cbb;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    D.28107 = D.28106->last_ins;
    D.28106->code = D.28107;
    <D.28148>:
  }
  {
    struct MonoInst * inst;

    D.28099 = cfg->mempool;
    inst = mono_mempool_alloc (D.28099, 56);
    inst->data.op[1].const_val = 0;
    D.28149 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28149;
    inst->prev = 0B;
    D.28150 = inst->prev;
    inst->next = D.28150;
    inst->opcode = 573;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28151 = inst->sreg3;
    inst->sreg2 = D.28151;
    D.28152 = inst->sreg2;
    inst->sreg1 = D.28152;
    D.28104 = cfg->ip;
    inst->cil_code = D.28104;
    inst->dreg = dreg;
    inst->sreg1 = dreg;
    inst->sreg2 = tmpreg;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    if (D.28107 != 0B) goto <D.28153>; else goto <D.28154>;
    <D.28153>:
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    D.28107->next = inst;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    inst->prev = D.28107;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    goto <D.28155>;
    <D.28154>:
    D.28106 = cfg->cbb;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    D.28107 = D.28106->last_ins;
    D.28106->code = D.28107;
    <D.28155>:
  }
  {
    struct MonoInst * inst;

    D.28099 = cfg->mempool;
    inst = mono_mempool_alloc (D.28099, 56);
    inst->data.op[1].const_val = 0;
    D.28156 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28156;
    inst->prev = 0B;
    D.28157 = inst->prev;
    inst->next = D.28157;
    inst->opcode = 390;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28158 = inst->sreg3;
    inst->sreg2 = D.28158;
    D.28159 = inst->sreg2;
    inst->sreg1 = D.28159;
    D.28104 = cfg->ip;
    inst->cil_code = D.28104;
    inst->dreg = tmpreg;
    D.28094 = src->dreg;
    inst->sreg1 = D.28094;
    D.28160 = soffset + 2;
    inst->data.op[0].const_val = D.28160;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    if (D.28107 != 0B) goto <D.28161>; else goto <D.28162>;
    <D.28161>:
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    D.28107->next = inst;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    inst->prev = D.28107;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    goto <D.28163>;
    <D.28162>:
    D.28106 = cfg->cbb;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    D.28107 = D.28106->last_ins;
    D.28106->code = D.28107;
    <D.28163>:
  }
  {
    struct MonoInst * inst;

    D.28099 = cfg->mempool;
    inst = mono_mempool_alloc (D.28099, 56);
    inst->data.op[1].const_val = 0;
    D.28164 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28164;
    inst->prev = 0B;
    D.28165 = inst->prev;
    inst->next = D.28165;
    inst->opcode = 439;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28166 = inst->sreg3;
    inst->sreg2 = D.28166;
    D.28167 = inst->sreg2;
    inst->sreg1 = D.28167;
    D.28104 = cfg->ip;
    inst->cil_code = D.28104;
    inst->dreg = tmpreg;
    inst->sreg1 = tmpreg;
    inst->data.op[1].const_val = 16;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    if (D.28107 != 0B) goto <D.28168>; else goto <D.28169>;
    <D.28168>:
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    D.28107->next = inst;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    inst->prev = D.28107;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    goto <D.28170>;
    <D.28169>:
    D.28106 = cfg->cbb;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    D.28107 = D.28106->last_ins;
    D.28106->code = D.28107;
    <D.28170>:
  }
  {
    struct MonoInst * inst;

    D.28099 = cfg->mempool;
    inst = mono_mempool_alloc (D.28099, 56);
    inst->data.op[1].const_val = 0;
    D.28171 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28171;
    inst->prev = 0B;
    D.28172 = inst->prev;
    inst->next = D.28172;
    inst->opcode = 573;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28173 = inst->sreg3;
    inst->sreg2 = D.28173;
    D.28174 = inst->sreg2;
    inst->sreg1 = D.28174;
    D.28104 = cfg->ip;
    inst->cil_code = D.28104;
    inst->dreg = dreg;
    inst->sreg1 = dreg;
    inst->sreg2 = tmpreg;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    if (D.28107 != 0B) goto <D.28175>; else goto <D.28176>;
    <D.28175>:
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    D.28107->next = inst;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    inst->prev = D.28107;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    goto <D.28177>;
    <D.28176>:
    D.28106 = cfg->cbb;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    D.28107 = D.28106->last_ins;
    D.28106->code = D.28107;
    <D.28177>:
  }
  goto <D.25229>;
  <D.25240>:
  {
    struct MonoInst * inst;

    D.28099 = cfg->mempool;
    inst = mono_mempool_alloc (D.28099, 56);
    inst->data.op[1].const_val = 0;
    D.28178 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28178;
    inst->prev = 0B;
    D.28179 = inst->prev;
    inst->next = D.28179;
    inst->opcode = 388;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28180 = inst->sreg3;
    inst->sreg2 = D.28180;
    D.28181 = inst->sreg2;
    inst->sreg1 = D.28181;
    D.28104 = cfg->ip;
    inst->cil_code = D.28104;
    inst->dreg = dreg;
    D.28094 = src->dreg;
    inst->sreg1 = D.28094;
    inst->data.op[0].const_val = soffset;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    if (D.28107 != 0B) goto <D.28182>; else goto <D.28183>;
    <D.28182>:
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    D.28107->next = inst;
    D.28106 = cfg->cbb;
    D.28107 = D.28106->last_ins;
    inst->prev = D.28107;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    goto <D.28184>;
    <D.28183>:
    D.28106 = cfg->cbb;
    D.28106 = cfg->cbb;
    D.28106->last_ins = inst;
    D.28107 = D.28106->last_ins;
    D.28106->code = D.28107;
    <D.28184>:
  }
  goto <D.25229>;
  <D.25229>:
  D.28095 = ainfo->reg;
  D.28096 = (int) D.28095;
  D.28185 = D.28096 + i;
  mono_call_inst_add_outarg_reg (cfg, call, dreg, D.28185, 0);
  soffset.79 = (unsigned int) soffset;
  D.28187 = soffset.79 + 4;
  soffset = (int) D.28187;
  struct_size.80 = (unsigned int) struct_size;
  D.28189 = struct_size.80 + 4294967292;
  struct_size = (int) D.28189;
  i = i + 1;
  <D.25243>:
  D.28190 = ainfo->size;
  D.28191 = (int) D.28190;
  if (D.28191 > i) goto <D.25242>; else goto <D.25244>;
  <D.25244>:
  if (ovf_size != 0) goto <D.28192>; else goto <D.28193>;
  <D.28192>:
  D.28094 = src->dreg;
  struct_size.80 = (unsigned int) struct_size;
  ovf_size.81 = (unsigned int) ovf_size;
  D.28195 = ovf_size.81 * 4;
  D.28196 = MIN_EXPR <struct_size.80, D.28195>;
  D.28197 = (int) D.28196;
  if (struct_size <= 3) goto <D.28199>; else goto <D.28200>;
  <D.28199>:
  iftmp.82 = 1;
  goto <D.28201>;
  <D.28200>:
  iftmp.82 = 4;
  <D.28201>:
  mini_emit_memcpy (cfg, 13, doffset, D.28094, soffset, D.28197, iftmp.82);
  <D.28193>:
}


mono_arch_emit_setret (struct MonoCompile * cfg, struct MonoMethod * method, struct MonoInst * val)
{
  struct MonoGenericSharingContext * D.28203;
  struct MonoMethodSignature * D.28204;
  struct MonoType * D.28205;
  unsigned char D.28206;
  unsigned char D.28207;
  unsigned char D.28210;
  unsigned char D.28211;
  struct MonoMemPool * D.28216;
  int D.28217;
  struct MonoInst * D.28218;
  int D.28219;
  int D.28220;
  const unsigned char * D.28221;
  struct MonoInst * D.28222;
  int D.28223;
  int D.28224;
  struct MonoBasicBlock * D.28225;
  struct MonoInst * D.28226;
  int D.28231;
  struct MonoInst * D.28232;
  int D.28233;
  int D.28234;
  int D.28235;
  int D.28236;
  <unnamed type> arm_fpu.83;
  int D.28243;
  struct MonoInst * D.28244;
  int D.28245;
  int D.28246;
  int D.28252;
  struct MonoInst * D.28253;
  int D.28254;
  int D.28255;
  unsigned char D.28259;
  int D.28262;
  struct MonoInst * D.28263;
  int D.28264;
  int D.28265;
  int D.28269;
  struct MonoInst * D.28270;
  int D.28271;
  int D.28272;
  struct MonoType * ret;

  D.28203 = cfg->generic_sharing_context;
  D.28204 = mono_method_signature (method);
  D.28205 = D.28204->ret;
  ret = mini_type_get_underlying_type (D.28203, D.28205);
  D.28206 = BIT_FIELD_REF <*ret, 8, 56>;
  D.28207 = D.28206 & 64;
  if (D.28207 == 0) goto <D.28208>; else goto <D.28209>;
  <D.28208>:
  D.28210 = ret->type;
  D.28211 = D.28210 + 246;
  if (D.28211 <= 1) goto <D.28212>; else goto <D.28213>;
  <D.28212>:
  {
    struct MonoInst * ins;

    if (0 != 0) goto <D.28214>; else goto <D.28215>;
    <D.28214>:
    {
      struct MonoInst * inst;

      D.28216 = cfg->mempool;
      inst = mono_mempool_alloc (D.28216, 56);
      inst->data.op[1].const_val = 0;
      D.28217 = inst->data.op[1].const_val;
      inst->data.op[0].const_val = D.28217;
      inst->prev = 0B;
      D.28218 = inst->prev;
      inst->next = D.28218;
      inst->opcode = 424;
      inst->flags = 0;
      inst->type = 0;
      inst->dreg = -1;
      inst->sreg3 = -1;
      D.28219 = inst->sreg3;
      inst->sreg2 = D.28219;
      D.28220 = inst->sreg2;
      inst->sreg1 = D.28220;
      D.28221 = cfg->ip;
      inst->cil_code = D.28221;
      D.28222 = cfg->ret;
      D.28223 = D.28222->dreg;
      inst->dreg = D.28223;
      D.28224 = val->dreg;
      inst->sreg1 = D.28224;
      D.28225 = cfg->cbb;
      D.28226 = D.28225->last_ins;
      if (D.28226 != 0B) goto <D.28227>; else goto <D.28228>;
      <D.28227>:
      D.28225 = cfg->cbb;
      D.28226 = D.28225->last_ins;
      D.28226->next = inst;
      D.28225 = cfg->cbb;
      D.28226 = D.28225->last_ins;
      inst->prev = D.28226;
      D.28225 = cfg->cbb;
      D.28225->last_ins = inst;
      goto <D.28229>;
      <D.28228>:
      D.28225 = cfg->cbb;
      D.28225 = cfg->cbb;
      D.28225->last_ins = inst;
      D.28226 = D.28225->last_ins;
      D.28225->code = D.28226;
      <D.28229>:
    }
    goto <D.28230>;
    <D.28215>:
    D.28216 = cfg->mempool;
    ins = mono_mempool_alloc (D.28216, 56);
    ins->data.op[1].const_val = 0;
    D.28231 = ins->data.op[1].const_val;
    ins->data.op[0].const_val = D.28231;
    ins->prev = 0B;
    D.28232 = ins->prev;
    ins->next = D.28232;
    ins->opcode = 337;
    ins->flags = 0;
    ins->type = 0;
    ins->dreg = -1;
    ins->sreg3 = -1;
    D.28233 = ins->sreg3;
    ins->sreg2 = D.28233;
    D.28234 = ins->sreg2;
    ins->sreg1 = D.28234;
    D.28221 = cfg->ip;
    ins->cil_code = D.28221;
    D.28224 = val->dreg;
    D.28235 = D.28224 + 1;
    ins->sreg1 = D.28235;
    D.28224 = val->dreg;
    D.28236 = D.28224 + 2;
    ins->sreg2 = D.28236;
    D.28225 = cfg->cbb;
    D.28226 = D.28225->last_ins;
    if (D.28226 != 0B) goto <D.28237>; else goto <D.28238>;
    <D.28237>:
    D.28225 = cfg->cbb;
    D.28226 = D.28225->last_ins;
    D.28226->next = ins;
    D.28225 = cfg->cbb;
    D.28226 = D.28225->last_ins;
    ins->prev = D.28226;
    D.28225 = cfg->cbb;
    D.28225->last_ins = ins;
    goto <D.28239>;
    <D.28238>:
    D.28225 = cfg->cbb;
    D.28225 = cfg->cbb;
    D.28225->last_ins = ins;
    D.28226 = D.28225->last_ins;
    D.28225->code = D.28226;
    <D.28239>:
    <D.28230>:
    return;
  }
  <D.28213>:
  arm_fpu.83 = arm_fpu;
  switch (arm_fpu.83) <default: <D.25260>, case 0: <D.25253>, case 1: <D.25257>, case 2: <D.25258>>
  <D.25253>:
  D.28210 = ret->type;
  if (D.28210 == 13) goto <D.28241>; else goto <D.28242>;
  <D.28241>:
  {
    struct MonoInst * ins;

    D.28216 = cfg->mempool;
    ins = mono_mempool_alloc (D.28216, 56);
    ins->data.op[1].const_val = 0;
    D.28243 = ins->data.op[1].const_val;
    ins->data.op[0].const_val = D.28243;
    ins->prev = 0B;
    D.28244 = ins->prev;
    ins->next = D.28244;
    ins->opcode = 336;
    ins->flags = 0;
    ins->type = 0;
    ins->dreg = -1;
    ins->sreg3 = -1;
    D.28245 = ins->sreg3;
    ins->sreg2 = D.28245;
    D.28246 = ins->sreg2;
    ins->sreg1 = D.28246;
    D.28221 = cfg->ip;
    ins->cil_code = D.28221;
    D.28222 = cfg->ret;
    D.28223 = D.28222->dreg;
    ins->dreg = D.28223;
    D.28224 = val->dreg;
    ins->sreg1 = D.28224;
    D.28225 = cfg->cbb;
    D.28226 = D.28225->last_ins;
    if (D.28226 != 0B) goto <D.28247>; else goto <D.28248>;
    <D.28247>:
    D.28225 = cfg->cbb;
    D.28226 = D.28225->last_ins;
    D.28226->next = ins;
    D.28225 = cfg->cbb;
    D.28226 = D.28225->last_ins;
    ins->prev = D.28226;
    D.28225 = cfg->cbb;
    D.28225->last_ins = ins;
    goto <D.28249>;
    <D.28248>:
    D.28225 = cfg->cbb;
    D.28225 = cfg->cbb;
    D.28225->last_ins = ins;
    D.28226 = D.28225->last_ins;
    D.28225->code = D.28226;
    <D.28249>:
    return;
  }
  <D.28242>:
  D.28210 = ret->type;
  if (D.28210 == 12) goto <D.28250>; else goto <D.28251>;
  <D.28250>:
  {
    struct MonoInst * inst;

    D.28216 = cfg->mempool;
    inst = mono_mempool_alloc (D.28216, 56);
    inst->data.op[1].const_val = 0;
    D.28252 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28252;
    inst->prev = 0B;
    D.28253 = inst->prev;
    inst->next = D.28253;
    inst->opcode = 424;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28254 = inst->sreg3;
    inst->sreg2 = D.28254;
    D.28255 = inst->sreg2;
    inst->sreg1 = D.28255;
    D.28221 = cfg->ip;
    inst->cil_code = D.28221;
    D.28222 = cfg->ret;
    D.28223 = D.28222->dreg;
    inst->dreg = D.28223;
    D.28224 = val->dreg;
    inst->sreg1 = D.28224;
    D.28225 = cfg->cbb;
    D.28226 = D.28225->last_ins;
    if (D.28226 != 0B) goto <D.28256>; else goto <D.28257>;
    <D.28256>:
    D.28225 = cfg->cbb;
    D.28226 = D.28225->last_ins;
    D.28226->next = inst;
    D.28225 = cfg->cbb;
    D.28226 = D.28225->last_ins;
    inst->prev = D.28226;
    D.28225 = cfg->cbb;
    D.28225->last_ins = inst;
    goto <D.28258>;
    <D.28257>:
    D.28225 = cfg->cbb;
    D.28225 = cfg->cbb;
    D.28225->last_ins = inst;
    D.28226 = D.28225->last_ins;
    D.28225->code = D.28226;
    <D.28258>:
  }
  return;
  <D.28251>:
  goto <D.25256>;
  <D.25257>:
  <D.25258>:
  D.28210 = ret->type;
  D.28259 = D.28210 + 244;
  if (D.28259 <= 1) goto <D.28260>; else goto <D.28261>;
  <D.28260>:
  {
    struct MonoInst * ins;

    D.28216 = cfg->mempool;
    ins = mono_mempool_alloc (D.28216, 56);
    ins->data.op[1].const_val = 0;
    D.28262 = ins->data.op[1].const_val;
    ins->data.op[0].const_val = D.28262;
    ins->prev = 0B;
    D.28263 = ins->prev;
    ins->next = D.28263;
    ins->opcode = 336;
    ins->flags = 0;
    ins->type = 0;
    ins->dreg = -1;
    ins->sreg3 = -1;
    D.28264 = ins->sreg3;
    ins->sreg2 = D.28264;
    D.28265 = ins->sreg2;
    ins->sreg1 = D.28265;
    D.28221 = cfg->ip;
    ins->cil_code = D.28221;
    D.28222 = cfg->ret;
    D.28223 = D.28222->dreg;
    ins->dreg = D.28223;
    D.28224 = val->dreg;
    ins->sreg1 = D.28224;
    D.28225 = cfg->cbb;
    D.28226 = D.28225->last_ins;
    if (D.28226 != 0B) goto <D.28266>; else goto <D.28267>;
    <D.28266>:
    D.28225 = cfg->cbb;
    D.28226 = D.28225->last_ins;
    D.28226->next = ins;
    D.28225 = cfg->cbb;
    D.28226 = D.28225->last_ins;
    ins->prev = D.28226;
    D.28225 = cfg->cbb;
    D.28225->last_ins = ins;
    goto <D.28268>;
    <D.28267>:
    D.28225 = cfg->cbb;
    D.28225 = cfg->cbb;
    D.28225->last_ins = ins;
    D.28226 = D.28225->last_ins;
    D.28225->code = D.28226;
    <D.28268>:
    return;
  }
  <D.28261>:
  goto <D.25256>;
  <D.25260>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 2534);
  <D.25256>:
  <D.28209>:
  {
    struct MonoInst * inst;

    D.28216 = cfg->mempool;
    inst = mono_mempool_alloc (D.28216, 56);
    inst->data.op[1].const_val = 0;
    D.28269 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28269;
    inst->prev = 0B;
    D.28270 = inst->prev;
    inst->next = D.28270;
    inst->opcode = 424;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28271 = inst->sreg3;
    inst->sreg2 = D.28271;
    D.28272 = inst->sreg2;
    inst->sreg1 = D.28272;
    D.28221 = cfg->ip;
    inst->cil_code = D.28221;
    D.28222 = cfg->ret;
    D.28223 = D.28222->dreg;
    inst->dreg = D.28223;
    D.28224 = val->dreg;
    inst->sreg1 = D.28224;
    D.28225 = cfg->cbb;
    D.28226 = D.28225->last_ins;
    if (D.28226 != 0B) goto <D.28273>; else goto <D.28274>;
    <D.28273>:
    D.28225 = cfg->cbb;
    D.28226 = D.28225->last_ins;
    D.28226->next = inst;
    D.28225 = cfg->cbb;
    D.28226 = D.28225->last_ins;
    inst->prev = D.28226;
    D.28225 = cfg->cbb;
    D.28225->last_ins = inst;
    goto <D.28275>;
    <D.28274>:
    D.28225 = cfg->cbb;
    D.28225 = cfg->cbb;
    D.28225->last_ins = inst;
    D.28226 = D.28225->last_ins;
    D.28225->code = D.28226;
    <D.28275>:
  }
}


mono_arch_is_inst_imm (gint64 imm)
{
  gboolean D.28277;

  D.28277 = 1;
  return D.28277;
}


mono_arch_dyn_call_prepare (struct MonoMethodSignature * sig)
{
  int D.28279;
  struct MonoDynCallInfo * D.28282;
  struct ArchDynCallInfo * info;
  struct CallInfo * cinfo;

  cinfo = get_call_info (0B, 0B, sig);
  D.28279 = dyn_call_supported (cinfo, sig);
  if (D.28279 == 0) goto <D.28280>; else goto <D.28281>;
  <D.28280>:
  monoeg_g_free (cinfo);
  D.28282 = 0B;
  return D.28282;
  <D.28281>:
  info = monoeg_malloc0 (8);
  info->sig = sig;
  info->cinfo = cinfo;
  D.28282 = info;
  return D.28282;
}


dyn_call_supported (struct CallInfo * cinfo, struct MonoMethodSignature * sig)
{
  <unnamed-unsigned:1> D.28284;
  int D.28285;
  short unsigned int D.28286;
  int D.28287;
  int D.28288;
  gboolean D.28291;
  <unnamed type> D.28292;
  <unnamed type> D.28294;
  int D.28295;
  unsigned int D.28296;
  unsigned char D.28299;
  unsigned char D.28300;
  int D.28303;
  int D.28304;
  short unsigned int D.28305;
  int D.28306;
  unsigned char D.28308;
  int D.28309;
  <unnamed-unsigned:4> D.28310;
  int D.28311;
  int D.28312;
  int D.28315;
  unsigned char D.28316;
  unsigned char D.28317;
  unsigned char D.28320;
  int D.28321;
  int i;

  D.28284 = sig->hasthis;
  D.28285 = (int) D.28284;
  D.28286 = sig->param_count;
  D.28287 = (int) D.28286;
  D.28288 = D.28285 + D.28287;
  if (D.28288 > 10) goto <D.28289>; else goto <D.28290>;
  <D.28289>:
  D.28291 = 0;
  return D.28291;
  <D.28290>:
  D.28292 = cinfo->ret.storage;
  switch (D.28292) <default: <D.25286>, case 0: <D.25280>, case 1: <D.25281>, case 2: <D.25282>, case 5: <D.25285>, case 7: <D.25283>>
  <D.25280>:
  <D.25281>:
  <D.25282>:
  <D.25283>:
  goto <D.25284>;
  <D.25285>:
  if (1 != 0) goto <D.25284>; else goto <D.28293>;
  <D.28293>:
  D.28291 = 0;
  return D.28291;
  <D.25286>:
  D.28291 = 0;
  return D.28291;
  <D.25284>:
  i = 0;
  goto <D.25296>;
  <D.25295>:
  {
    struct ArgInfo * ainfo;
    int last_slot;

    ainfo = &cinfo->args[i];
    D.28294 = ainfo->storage;
    switch (D.28294) <default: <D.25294>, case 1: <D.25289>, case 2: <D.25291>, case 3: <D.25292>, case 6: <D.25293>>
    <D.25289>:
    goto <D.25290>;
    <D.25291>:
    goto <D.25290>;
    <D.25292>:
    D.28295 = ainfo->offset;
    D.28296 = (unsigned int) D.28295;
    if (D.28296 > 23) goto <D.28297>; else goto <D.28298>;
    <D.28297>:
    D.28291 = 0;
    return D.28291;
    <D.28298>:
    goto <D.25290>;
    <D.25293>:
    D.28299 = BIT_FIELD_REF <*ainfo, 8, 128>;
    D.28300 = D.28299 & 15;
    if (D.28300 == 0) goto <D.28301>; else goto <D.28302>;
    <D.28301>:
    D.28295 = ainfo->offset;
    D.28303 = D.28295 / 4;
    D.28304 = D.28303 + 4;
    D.28305 = ainfo->vtsize;
    D.28306 = (int) D.28305;
    last_slot = D.28304 + D.28306;
    goto <D.28307>;
    <D.28302>:
    D.28308 = ainfo->reg;
    D.28309 = (int) D.28308;
    D.28310 = ainfo->size;
    D.28311 = (int) D.28310;
    D.28312 = D.28309 + D.28311;
    D.28305 = ainfo->vtsize;
    D.28306 = (int) D.28305;
    last_slot = D.28312 + D.28306;
    <D.28307>:
    if (last_slot > 9) goto <D.28313>; else goto <D.28314>;
    <D.28313>:
    D.28291 = 0;
    return D.28291;
    <D.28314>:
    goto <D.25290>;
    <D.25294>:
    D.28291 = 0;
    return D.28291;
    <D.25290>:
  }
  i = i + 1;
  <D.25296>:
  D.28315 = cinfo->nargs;
  if (D.28315 > i) goto <D.25295>; else goto <D.25297>;
  <D.25297>:
  i = 0;
  goto <D.25305>;
  <D.25304>:
  {
    struct MonoType * t;

    t = sig->params[i];
    D.28316 = BIT_FIELD_REF <*t, 8, 56>;
    D.28317 = D.28316 & 64;
    if (D.28317 != 0) goto <D.28318>; else goto <D.28319>;
    <D.28318>:
    // predicted unlikely by continue predictor.
    goto <D.25299>;
    <D.28319>:
    D.28320 = t->type;
    D.28321 = (int) D.28320;
    switch (D.28321) <default: <D.25303>, case 12: <D.25300>, case 13: <D.25301>>
    <D.25300>:
    <D.25301>:
    if (0 != 0) goto <D.28322>; else goto <D.25302>;
    <D.28322>:
    D.28291 = 0;
    return D.28291;
    <D.25303>:
    goto <D.25302>;
    <D.25302>:
  }
  <D.25299>:
  i = i + 1;
  <D.25305>:
  D.28286 = sig->param_count;
  D.28287 = (int) D.28286;
  if (D.28287 > i) goto <D.25304>; else goto <D.25306>;
  <D.25306>:
  D.28291 = 1;
  return D.28291;
}


mono_arch_dyn_call_free (struct MonoDynCallInfo * info)
{
  struct CallInfo * D.28327;
  struct ArchDynCallInfo * ainfo;

  ainfo = info;
  D.28327 = ainfo->cinfo;
  monoeg_g_free (D.28327);
  monoeg_g_free (ainfo);
}


mono_arch_start_dyn_call (struct MonoDynCallInfo * info, void * * * args, guint8 * ret, guint8 * buf, int buf_len)
{
  unsigned int buf_len.84;
  _Bool D.28329;
  long int D.28330;
  long int D.28331;
  unsigned char D.28336;
  unsigned char D.28337;
  struct CallInfo * D.28339;
  int D.28340;
  int greg.85;
  int arg_index.86;
  unsigned int arg_index.87;
  unsigned int D.28344;
  void * * * D.28345;
  void * * D.28346;
  void * D.28347;
  int D.28348;
  int D.28351;
  int greg.88;
  int ret.89;
  struct MonoType * D.28356;
  int arg_index.90;
  unsigned int arg_index.91;
  unsigned int D.28359;
  void * * * D.28360;
  <unnamed-unsigned:1> D.28361;
  int D.28362;
  int D.28363;
  <unnamed type> D.28364;
  unsigned int D.28365;
  _Bool D.28366;
  _Bool D.28367;
  _Bool D.28368;
  unsigned char D.28371;
  <unnamed type> D.28373;
  int D.28376;
  int D.28377;
  unsigned char D.28379;
  unsigned char D.28380;
  void * D.28383;
  int D.28384;
  unsigned char D.28385;
  int D.28386;
  unsigned char D.28387;
  int D.28388;
  signed char D.28389;
  int D.28390;
  short int D.28391;
  int D.28392;
  short unsigned int D.28393;
  int D.28394;
  int D.28395;
  unsigned int D.28396;
  int D.28397;
  int slot.92;
  void * * D.28399;
  void * D.28400;
  int D.28401;
  int D.28402;
  int slot.93;
  int D.28404;
  _Bool D.28407;
  long int D.28408;
  long int D.28409;
  unsigned char D.28412;
  unsigned char D.28413;
  int slot.94;
  unsigned int j.95;
  unsigned int D.28419;
  mgreg_t * D.28420;
  int D.28421;
  <unnamed-unsigned:4> D.28422;
  int D.28423;
  short unsigned int D.28424;
  int D.28425;
  int D.28426;
  short unsigned int D.28427;
  int D.28428;
  struct ArchDynCallInfo * dinfo;
  struct DynCallArgs * p;
  int arg_index;
  int greg;
  int i;
  int j;
  int pindex;
  struct MonoMethodSignature * sig;

  dinfo = info;
  p = buf;
  sig = dinfo->sig;
  buf_len.84 = (unsigned int) buf_len;
  D.28329 = buf_len.84 <= 51;
  D.28330 = (long int) D.28329;
  D.28331 = __builtin_expect (D.28330, 0);
  if (D.28331 != 0) goto <D.28332>; else goto <D.28333>;
  <D.28332>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 2676, "buf_len >= sizeof (DynCallArgs)");
  <D.28333>:
  p->res = 0;
  p->ret = ret;
  arg_index = 0;
  greg = 0;
  pindex = 0;
  D.28336 = BIT_FIELD_REF <*sig, 8, 80>;
  D.28337 = D.28336 & 64;
  if (D.28337 != 0) goto <D.28334>; else goto <D.28338>;
  <D.28338>:
  D.28339 = dinfo->cinfo;
  D.28340 = D.28339->vret_arg_index;
  if (D.28340 == 1) goto <D.28334>; else goto <D.28335>;
  <D.28334>:
  greg.85 = greg;
  greg = greg.85 + 1;
  arg_index.86 = arg_index;
  arg_index = arg_index.86 + 1;
  arg_index.87 = (unsigned int) arg_index.86;
  D.28344 = arg_index.87 * 4;
  D.28345 = args + D.28344;
  D.28346 = *D.28345;
  D.28347 = *D.28346;
  D.28348 = (int) D.28347;
  p->regs[greg.85] = D.28348;
  D.28336 = BIT_FIELD_REF <*sig, 8, 80>;
  D.28337 = D.28336 & 64;
  if (D.28337 == 0) goto <D.28349>; else goto <D.28350>;
  <D.28349>:
  pindex = 1;
  <D.28350>:
  <D.28335>:
  D.28339 = dinfo->cinfo;
  D.28351 = D.28339->vtype_retaddr;
  if (D.28351 != 0) goto <D.28352>; else goto <D.28353>;
  <D.28352>:
  greg.88 = greg;
  greg = greg.88 + 1;
  ret.89 = (int) ret;
  p->regs[greg.88] = ret.89;
  <D.28353>:
  i = pindex;
  goto <D.25364>;
  <D.25363>:
  {
    struct MonoType * t;
    void * * arg;
    struct ArgInfo * ainfo;
    int slot;

    D.28356 = sig->params[i];
    t = mono_type_get_underlying_type (D.28356);
    arg_index.90 = arg_index;
    arg_index = arg_index.90 + 1;
    arg_index.91 = (unsigned int) arg_index.90;
    D.28359 = arg_index.91 * 4;
    D.28360 = args + D.28359;
    arg = *D.28360;
    D.28339 = dinfo->cinfo;
    D.28361 = sig->hasthis;
    D.28362 = (int) D.28361;
    D.28363 = D.28362 + i;
    ainfo = &D.28339->args[D.28363];
    slot = -1;
    D.28364 = ainfo->storage;
    D.28365 = D.28364 + 4294967295;
    D.28366 = D.28365 <= 1;
    D.28367 = D.28364 == 6;
    D.28368 = D.28366 | D.28367;
    if (D.28368 != 0) goto <D.28369>; else goto <D.28370>;
    <D.28369>:
    D.28371 = ainfo->reg;
    slot = (int) D.28371;
    goto <D.28372>;
    <D.28370>:
    D.28373 = ainfo->storage;
    if (D.28373 == 3) goto <D.28374>; else goto <D.28375>;
    <D.28374>:
    D.28376 = ainfo->offset;
    D.28377 = D.28376 / 4;
    slot = D.28377 + 4;
    goto <D.28378>;
    <D.28375>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 2705);
    <D.28378>:
    <D.28372>:
    D.28379 = BIT_FIELD_REF <*t, 8, 56>;
    D.28380 = D.28379 & 64;
    if (D.28380 != 0) goto <D.28381>; else goto <D.28382>;
    <D.28381>:
    D.28383 = *arg;
    D.28384 = (int) D.28383;
    p->regs[slot] = D.28384;
    // predicted unlikely by continue predictor.
    goto <D.25335>;
    <D.28382>:
    D.28385 = t->type;
    D.28386 = (int) D.28385;
    switch (D.28386) <default: <D.25362>, case 2: <D.25345>, case 3: <D.25350>, case 4: <D.25347>, case 5: <D.25346>, case 6: <D.25348>, case 7: <D.25349>, case 8: <D.25351>, case 9: <D.25352>, case 10: <D.25353>, case 11: <D.25354>, case 12: <D.25355>, case 13: <D.25356>, case 14: <D.25336>, case 15: <D.25341>, case 17: <D.25358>, case 18: <D.25337>, case 20: <D.25338>, case 21: <D.25357>, case 24: <D.25342>, case 25: <D.25343>, case 28: <D.25340>, case 29: <D.25339>>
    <D.25336>:
    <D.25337>:
    <D.25338>:
    <D.25339>:
    <D.25340>:
    <D.25341>:
    <D.25342>:
    <D.25343>:
    D.28383 = *arg;
    D.28384 = (int) D.28383;
    p->regs[slot] = D.28384;
    goto <D.25344>;
    <D.25345>:
    <D.25346>:
    D.28387 = MEM[(guint8 *)arg];
    D.28388 = (int) D.28387;
    p->regs[slot] = D.28388;
    goto <D.25344>;
    <D.25347>:
    D.28389 = MEM[(gint8 *)arg];
    D.28390 = (int) D.28389;
    p->regs[slot] = D.28390;
    goto <D.25344>;
    <D.25348>:
    D.28391 = MEM[(gint16 *)arg];
    D.28392 = (int) D.28391;
    p->regs[slot] = D.28392;
    goto <D.25344>;
    <D.25349>:
    <D.25350>:
    D.28393 = MEM[(guint16 *)arg];
    D.28394 = (int) D.28393;
    p->regs[slot] = D.28394;
    goto <D.25344>;
    <D.25351>:
    D.28395 = MEM[(gint32 *)arg];
    p->regs[slot] = D.28395;
    goto <D.25344>;
    <D.25352>:
    D.28396 = MEM[(guint32 *)arg];
    D.28397 = (int) D.28396;
    p->regs[slot] = D.28397;
    goto <D.25344>;
    <D.25353>:
    <D.25354>:
    slot.92 = slot;
    slot = slot.92 + 1;
    D.28383 = *arg;
    D.28384 = (int) D.28383;
    p->regs[slot.92] = D.28384;
    D.28399 = arg + 4;
    D.28400 = *D.28399;
    D.28401 = (int) D.28400;
    p->regs[slot] = D.28401;
    goto <D.25344>;
    <D.25355>:
    D.28402 = MEM[(mgreg_t *)arg];
    p->regs[slot] = D.28402;
    goto <D.25344>;
    <D.25356>:
    slot.93 = slot;
    slot = slot.93 + 1;
    D.28383 = *arg;
    D.28384 = (int) D.28383;
    p->regs[slot.93] = D.28384;
    D.28399 = arg + 4;
    D.28400 = *D.28399;
    D.28401 = (int) D.28400;
    p->regs[slot] = D.28401;
    goto <D.25344>;
    <D.25357>:
    D.28404 = mono_type_is_reference (t);
    if (D.28404 != 0) goto <D.28405>; else goto <D.28406>;
    <D.28405>:
    D.28383 = *arg;
    D.28384 = (int) D.28383;
    p->regs[slot] = D.28384;
    goto <D.25344>;
    <D.28406>:
    <D.25358>:
    D.28373 = ainfo->storage;
    D.28407 = D.28373 != 6;
    D.28408 = (long int) D.28407;
    D.28409 = __builtin_expect (D.28408, 0);
    if (D.28409 != 0) goto <D.28410>; else goto <D.28411>;
    <D.28410>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 2763, "ainfo->storage == RegTypeStructByVal");
    <D.28411>:
    D.28412 = BIT_FIELD_REF <*ainfo, 8, 128>;
    D.28413 = D.28412 & 15;
    if (D.28413 == 0) goto <D.28414>; else goto <D.28415>;
    <D.28414>:
    D.28376 = ainfo->offset;
    D.28377 = D.28376 / 4;
    slot = D.28377 + 4;
    goto <D.28416>;
    <D.28415>:
    D.28371 = ainfo->reg;
    slot = (int) D.28371;
    <D.28416>:
    j = 0;
    goto <D.25360>;
    <D.25359>:
    slot.94 = slot;
    slot = slot.94 + 1;
    j.95 = (unsigned int) j;
    D.28419 = j.95 * 4;
    D.28420 = arg + D.28419;
    D.28421 = *D.28420;
    p->regs[slot.94] = D.28421;
    j = j + 1;
    <D.25360>:
    D.28422 = ainfo->size;
    D.28423 = (int) D.28422;
    D.28424 = ainfo->vtsize;
    D.28425 = (int) D.28424;
    D.28426 = D.28423 + D.28425;
    if (D.28426 > j) goto <D.25359>; else goto <D.25361>;
    <D.25361>:
    goto <D.25344>;
    <D.25362>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 2774);
    <D.25344>:
  }
  <D.25335>:
  i = i + 1;
  <D.25364>:
  D.28427 = sig->param_count;
  D.28428 = (int) D.28427;
  if (D.28428 > i) goto <D.25363>; else goto <D.25365>;
  <D.25365>:
}


mono_arch_finish_dyn_call (struct MonoDynCallInfo * info, guint8 * buf)
{
  int res.96;
  struct MonoType * D.28430;
  struct MonoType * D.28431;
  unsigned char D.28432;
  int D.28433;
  int res.97;
  void * res.98;
  signed char D.28436;
  unsigned char D.28437;
  short int D.28438;
  short unsigned int D.28439;
  unsigned int res.99;
  gint32 * D.28441;
  int D.28442;
  struct CallInfo * D.28445;
  int D.28446;
  _Bool D.28447;
  long int D.28448;
  long int D.28449;
  mgreg_t * res.100;
  float D.28455;
  mgreg_t[2] * regs.101;
  double D.28459;
  struct ArchDynCallInfo * ainfo;
  struct MonoMethodSignature * sig;
  guint8 * ret;
  mgreg_t res;
  mgreg_t res2;

  try
    {
      ainfo = info;
      sig = MEM[(struct ArchDynCallInfo *)info].sig;
      ret = MEM[(struct DynCallArgs *)buf].ret;
      res.96 = MEM[(struct DynCallArgs *)buf].res;
      res = res.96;
      res2 = MEM[(struct DynCallArgs *)buf].res2;
      D.28430 = sig->ret;
      D.28431 = mono_type_get_underlying_type (D.28430);
      D.28432 = D.28431->type;
      D.28433 = (int) D.28432;
      switch (D.28433) <default: <D.25400>, case 1: <D.25375>, case 2: <D.25387>, case 3: <D.25390>, case 4: <D.25385>, case 5: <D.25386>, case 6: <D.25388>, case 7: <D.25389>, case 8: <D.25391>, case 9: <D.25392>, case 10: <D.25393>, case 11: <D.25394>, case 12: <D.25397>, case 13: <D.25398>, case 14: <D.25377>, case 15: <D.25384>, case 17: <D.25396>, case 18: <D.25378>, case 20: <D.25379>, case 21: <D.25395>, case 24: <D.25382>, case 25: <D.25383>, case 28: <D.25381>, case 29: <D.25380>>
      <D.25375>:
      MEM[(void * *)ret] = 0B;
      goto <D.25376>;
      <D.25377>:
      <D.25378>:
      <D.25379>:
      <D.25380>:
      <D.25381>:
      <D.25382>:
      <D.25383>:
      <D.25384>:
      res.97 = res;
      res.98 = (void *) res.97;
      MEM[(void * *)ret] = res.98;
      goto <D.25376>;
      <D.25385>:
      res.97 = res;
      D.28436 = (signed char) res.97;
      MEM[(gint8 *)ret] = D.28436;
      goto <D.25376>;
      <D.25386>:
      <D.25387>:
      res.97 = res;
      D.28437 = (unsigned char) res.97;
      *ret = D.28437;
      goto <D.25376>;
      <D.25388>:
      res.97 = res;
      D.28438 = (short int) res.97;
      MEM[(gint16 *)ret] = D.28438;
      goto <D.25376>;
      <D.25389>:
      <D.25390>:
      res.97 = res;
      D.28439 = (short unsigned int) res.97;
      MEM[(guint16 *)ret] = D.28439;
      goto <D.25376>;
      <D.25391>:
      res.97 = res;
      MEM[(gint32 *)ret] = res.97;
      goto <D.25376>;
      <D.25392>:
      res.97 = res;
      res.99 = (unsigned int) res.97;
      MEM[(guint32 *)ret] = res.99;
      goto <D.25376>;
      <D.25393>:
      <D.25394>:
      res.97 = res;
      MEM[(gint32 *)ret] = res.97;
      D.28441 = ret + 4;
      *D.28441 = res2;
      goto <D.25376>;
      <D.25395>:
      D.28430 = sig->ret;
      D.28442 = mono_type_is_reference (D.28430);
      if (D.28442 != 0) goto <D.28443>; else goto <D.28444>;
      <D.28443>:
      res.97 = res;
      res.98 = (void *) res.97;
      MEM[(void * *)ret] = res.98;
      goto <D.25376>;
      <D.28444>:
      <D.25396>:
      D.28445 = ainfo->cinfo;
      D.28446 = D.28445->vtype_retaddr;
      D.28447 = D.28446 == 0;
      D.28448 = (long int) D.28447;
      D.28449 = __builtin_expect (D.28448, 0);
      if (D.28449 != 0) goto <D.28450>; else goto <D.28451>;
      <D.28450>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 2836, "ainfo->cinfo->vtype_retaddr");
      <D.28451>:
      goto <D.25376>;
      <D.25397>:
      if (0 != 0) goto <D.28452>; else goto <D.28453>;
      <D.28452>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 2840, "IS_VFP");
      <D.28453>:
      res.100 = &res;
      D.28455 = MEM[(float *)res.100];
      MEM[(float *)ret] = D.28455;
      goto <D.25376>;
      <D.25398>:
      {
        mgreg_t regs[2];

        try
          {
            if (0 != 0) goto <D.28456>; else goto <D.28457>;
            <D.28456>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 2846, "IS_VFP");
            <D.28457>:
            res.97 = res;
            regs[0] = res.97;
            regs[1] = res2;
            regs.101 = &regs;
            D.28459 = MEM[(double *)regs.101];
            MEM[(double *)ret] = D.28459;
            goto <D.25376>;
          }
        finally
          {
            regs = {CLOBBER};
          }
      }
      <D.25400>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 2854);
      <D.25376>:
    }
  finally
    {
      res = {CLOBBER};
    }
}


mono_arch_instrument_prolog (struct MonoCompile * cfg, void * func, void * p, gboolean enable_arguments)
{
  struct MonoMethod * D.28463;
  unsigned int D.28464;
  unsigned int func.102;
  void * D.28466;
  guchar * code;

  code = p;
  D.28463 = cfg->method;
  D.28464 = (unsigned int) D.28463;
  code = mono_arm_emit_load_imm (code, 0, D.28464);
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3818917888;
    code = __ainstrp + 4;
  }
  func.102 = (unsigned int) func;
  code = mono_arm_emit_load_imm (code, 2, func.102);
  code = emit_call_reg (code, 2);
  D.28466 = code;
  return D.28466;
}


emit_call_reg (guint8 * code, int reg)
{
  int v5_supported.103;
  int D.28471;
  unsigned int D.28472;
  int thumb_supported.104;
  int D.28477;
  unsigned int D.28478;
  int D.28480;
  unsigned int D.28481;
  guint8 * D.28482;

  v5_supported.103 = v5_supported;
  if (v5_supported.103 != 0) goto <D.28469>; else goto <D.28470>;
  <D.28469>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.28471 = reg | -516948176;
    D.28472 = (unsigned int) D.28471;
    *__ainstrp = D.28472;
    code = __ainstrp + 4;
  }
  goto <D.28473>;
  <D.28470>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785416719;
    code = __ainstrp + 4;
  }
  thumb_supported.104 = thumb_supported;
  if (thumb_supported.104 != 0) goto <D.28475>; else goto <D.28476>;
  <D.28475>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.28477 = reg | -516948208;
    D.28478 = (unsigned int) D.28477;
    *__ainstrp = D.28478;
    code = __ainstrp + 4;
  }
  goto <D.28479>;
  <D.28476>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.28480 = reg | -509546496;
    D.28481 = (unsigned int) D.28480;
    *__ainstrp = D.28481;
    code = __ainstrp + 4;
  }
  <D.28479>:
  <D.28473>:
  D.28482 = code;
  return D.28482;
}


mono_arch_instrument_epilog_full (struct MonoCompile * cfg, void * func, void * p, gboolean enable_arguments, gboolean preserve_argument_registers)
{
  struct MonoGenericSharingContext * D.28484;
  struct MonoMethodSignature * D.28485;
  struct MonoType * D.28486;
  struct MonoType * D.28487;
  unsigned char D.28488;
  unsigned int D.28489;
  int code.105;
  unsigned char * D.28491;
  int D.28492;
  unsigned int offset.106;
  unsigned int D.28494;
  unsigned int D.28495;
  unsigned int D.28498;
  void * D.28499;
  sizetype offset.107;
  int D.25437;
  int iftmp.108;
  int D.25433;
  const char[6] * D.28506;
  unsigned char D.28507;
  int D.28508;
  unsigned char D.28509;
  int D.28510;
  _Bool D.28511;
  _Bool D.28512;
  _Bool D.28513;
  const unsigned char * D.28516;
  unsigned char D.28517;
  int D.28518;
  const unsigned char * D.28519;
  unsigned char D.28520;
  int D.28521;
  _Bool D.28522;
  _Bool D.28523;
  const unsigned char * D.28526;
  unsigned char D.28527;
  int D.28528;
  const unsigned char * D.28529;
  unsigned char D.28530;
  int D.28531;
  _Bool D.28532;
  _Bool D.28533;
  const unsigned char * D.28536;
  unsigned char D.28537;
  int D.28538;
  const unsigned char * D.28539;
  unsigned char D.28540;
  int D.28541;
  const char * D.28543;
  struct MonoClass * D.28545;
  struct MonoClass * D.28546;
  int iftmp.109;
  int D.28552;
  unsigned int D.28553;
  unsigned int D.28554;
  unsigned int D.28555;
  unsigned int D.28556;
  guint32 iftmp.110;
  unsigned int D.28561;
  unsigned int D.28562;
  int iftmp.111;
  int iftmp.112;
  int D.28571;
  unsigned int D.28572;
  unsigned int D.28573;
  guint32 iftmp.113;
  unsigned int D.28578;
  unsigned int D.28579;
  int iftmp.114;
  int D.28586;
  unsigned int D.28587;
  unsigned int D.28588;
  guint32 iftmp.115;
  unsigned int D.28593;
  unsigned int D.28594;
  struct MonoMethod * D.28601;
  unsigned int D.28602;
  unsigned int func.116;
  int D.28604;
  unsigned int D.28605;
  unsigned int D.28606;
  guint32 iftmp.117;
  unsigned int D.28611;
  unsigned int D.28612;
  guint32 iftmp.118;
  int D.28616;
  int D.28617;
  int D.28619;
  int D.28620;
  unsigned int D.28621;
  guint32 iftmp.119;
  unsigned int D.28626;
  unsigned int D.28627;
  guint32 iftmp.120;
  unsigned int D.28632;
  unsigned int D.28633;
  void * D.28634;
  guchar * code;
  int save_mode;
  int offset;
  struct MonoMethod * method;
  int rtype;
  int save_offset;

  code = p;
  save_mode = 0;
  method = cfg->method;
  D.28484 = cfg->generic_sharing_context;
  D.28485 = mono_method_signature (method);
  D.28486 = D.28485->ret;
  D.28487 = mini_type_get_underlying_type (D.28484, D.28486);
  D.28488 = D.28487->type;
  rtype = (int) D.28488;
  D.28489 = cfg->param_area;
  save_offset = (int) D.28489;
  save_offset = save_offset + 7;
  save_offset = save_offset & -8;
  code.105 = (int) code;
  D.28491 = cfg->native_code;
  D.28492 = (int) D.28491;
  offset = code.105 - D.28492;
  offset.106 = (unsigned int) offset;
  D.28494 = cfg->code_size;
  D.28495 = D.28494 + 4294967232;
  if (offset.106 > D.28495) goto <D.28496>; else goto <D.28497>;
  <D.28496>:
  D.28494 = cfg->code_size;
  D.28498 = D.28494 * 2;
  cfg->code_size = D.28498;
  D.28491 = cfg->native_code;
  D.28494 = cfg->code_size;
  D.28499 = monoeg_realloc (D.28491, D.28494);
  cfg->native_code = D.28499;
  D.28491 = cfg->native_code;
  offset.107 = (sizetype) offset;
  code = D.28491 + offset.107;
  <D.28497>:
  switch (rtype) <default: <D.25444>, case 1: <D.25428>, case 10: <D.25439>, case 11: <D.25440>, case 12: <D.25441>, case 13: <D.25442>, case 17: <D.25443>>
  <D.25428>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 5;
    if (__s1_len <= 3) goto <D.28504>; else goto <D.28505>;
    <D.28504>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = method->name;
      D.28506 = ".ctor";
      D.28507 = MEM[(const unsigned char *)D.28506];
      D.28508 = (int) D.28507;
      D.28509 = *__s2;
      D.28510 = (int) D.28509;
      __result = D.28508 - D.28510;
      {
        D.28511 = __s1_len != 0;
        D.28512 = __result == 0;
        D.28513 = D.28511 & D.28512;
        if (D.28513 != 0) goto <D.28514>; else goto <D.28515>;
        <D.28514>:
        D.28516 = &MEM[(void *)".ctor" + 1B];
        D.28517 = *D.28516;
        D.28518 = (int) D.28517;
        D.28519 = __s2 + 1;
        D.28520 = *D.28519;
        D.28521 = (int) D.28520;
        __result = D.28518 - D.28521;
        D.28522 = __s1_len > 1;
        D.28512 = __result == 0;
        D.28523 = D.28522 & D.28512;
        if (D.28523 != 0) goto <D.28524>; else goto <D.28525>;
        <D.28524>:
        D.28526 = &MEM[(void *)".ctor" + 2B];
        D.28527 = *D.28526;
        D.28528 = (int) D.28527;
        D.28529 = __s2 + 2;
        D.28530 = *D.28529;
        D.28531 = (int) D.28530;
        __result = D.28528 - D.28531;
        D.28532 = __s1_len > 2;
        D.28512 = __result == 0;
        D.28533 = D.28532 & D.28512;
        if (D.28533 != 0) goto <D.28534>; else goto <D.28535>;
        <D.28534>:
        D.28536 = &MEM[(void *)".ctor" + 3B];
        D.28537 = *D.28536;
        D.28538 = (int) D.28537;
        D.28539 = __s2 + 3;
        D.28540 = *D.28539;
        D.28541 = (int) D.28540;
        __result = D.28538 - D.28541;
        <D.28535>:
        <D.28525>:
        <D.28515>:
      }
      D.25433 = __result;
    }
    iftmp.108 = D.25433;
    goto <D.28542>;
    <D.28505>:
    D.28543 = method->name;
    iftmp.108 = __builtin_strcmp (".ctor", D.28543);
    <D.28542>:
    D.25437 = iftmp.108;
  }
  if (D.25437 != 0) goto <D.28544>; else goto <D.28501>;
  <D.28544>:
  D.28545 = method->klass;
  D.28546 = mono_defaults.string_class;
  if (D.28545 == D.28546) goto <D.28547>; else goto <D.28501>;
  <D.28547>:
  save_mode = 2;
  goto <D.28502>;
  <D.28501>:
  save_mode = 0;
  <D.28502>:
  goto <D.25438>;
  <D.25439>:
  <D.25440>:
  save_mode = 3;
  goto <D.25438>;
  <D.25441>:
  <D.25442>:
  save_mode = 4;
  goto <D.25438>;
  <D.25443>:
  save_mode = 1;
  goto <D.25438>;
  <D.25444>:
  save_mode = 2;
  goto <D.25438>;
  <D.25438>:
  switch (save_mode) <default: <D.25461>, case 0: <D.25460>, case 1: <D.25458>, case 2: <D.25453>, case 3: <D.25445>, case 4: <D.25457>>
  <D.25445>:
  {
    int _imm12;

    if (save_offset >= -4095) goto <D.28549>; else goto <D.28550>;
    <D.28549>:
    iftmp.109 = MIN_EXPR <save_offset, 4095>;
    goto <D.28551>;
    <D.28550>:
    iftmp.109 = -4095;
    <D.28551>:
    _imm12 = iftmp.109;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.28552 = ABS_EXPR <_imm12>;
      D.28553 = (unsigned int) D.28552;
      D.28554 = cfg->frame_reg;
      D.28555 = D.28554 << 16;
      D.28556 = D.28553 | D.28555;
      if (_imm12 >= 0) goto <D.28558>; else goto <D.28559>;
      <D.28558>:
      iftmp.110 = 8388608;
      goto <D.28560>;
      <D.28559>:
      iftmp.110 = 0;
      <D.28560>:
      D.28561 = D.28556 | iftmp.110;
      D.28562 = D.28561 | 3841982464;
      *__ainstrp = D.28562;
      code = __ainstrp + 4;
    }
  }
  {
    int _imm12;

    if (save_offset >= -4099) goto <D.28564>; else goto <D.28565>;
    <D.28564>:
    if (save_offset <= 4091) goto <D.28567>; else goto <D.28568>;
    <D.28567>:
    iftmp.112 = save_offset + 4;
    goto <D.28569>;
    <D.28568>:
    iftmp.112 = 4095;
    <D.28569>:
    iftmp.111 = iftmp.112;
    goto <D.28570>;
    <D.28565>:
    iftmp.111 = -4095;
    <D.28570>:
    _imm12 = iftmp.111;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.28571 = ABS_EXPR <_imm12>;
      D.28572 = (unsigned int) D.28571;
      D.28554 = cfg->frame_reg;
      D.28555 = D.28554 << 16;
      D.28573 = D.28572 | D.28555;
      if (_imm12 >= 0) goto <D.28575>; else goto <D.28576>;
      <D.28575>:
      iftmp.113 = 8388608;
      goto <D.28577>;
      <D.28576>:
      iftmp.113 = 0;
      <D.28577>:
      D.28578 = D.28573 | iftmp.113;
      D.28579 = D.28578 | 3841986560;
      *__ainstrp = D.28579;
      code = __ainstrp + 4;
    }
  }
  if (enable_arguments != 0) goto <D.28580>; else goto <D.28581>;
  <D.28580>:
  {
    arminstr_t * __ainstrp;

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

    __ainstrp = code;
    *__ainstrp = 3785363456;
    code = __ainstrp + 4;
  }
  <D.28581>:
  goto <D.25452>;
  <D.25453>:
  {
    int _imm12;

    if (save_offset >= -4095) goto <D.28583>; else goto <D.28584>;
    <D.28583>:
    iftmp.114 = MIN_EXPR <save_offset, 4095>;
    goto <D.28585>;
    <D.28584>:
    iftmp.114 = -4095;
    <D.28585>:
    _imm12 = iftmp.114;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.28586 = ABS_EXPR <_imm12>;
      D.28587 = (unsigned int) D.28586;
      D.28554 = cfg->frame_reg;
      D.28555 = D.28554 << 16;
      D.28588 = D.28587 | D.28555;
      if (_imm12 >= 0) goto <D.28590>; else goto <D.28591>;
      <D.28590>:
      iftmp.115 = 8388608;
      goto <D.28592>;
      <D.28591>:
      iftmp.115 = 0;
      <D.28592>:
      D.28593 = D.28588 | iftmp.115;
      D.28594 = D.28593 | 3841982464;
      *__ainstrp = D.28594;
      code = __ainstrp + 4;
    }
  }
  if (enable_arguments != 0) goto <D.28595>; else goto <D.28596>;
  <D.28595>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785363456;
    code = __ainstrp + 4;
  }
  <D.28596>:
  goto <D.25452>;
  <D.25457>:
  if (enable_arguments != 0) goto <D.28597>; else goto <D.28598>;
  <D.28597>:
  <D.28598>:
  goto <D.25452>;
  <D.25458>:
  if (enable_arguments != 0) goto <D.28599>; else goto <D.28600>;
  <D.28599>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785363456;
    code = __ainstrp + 4;
  }
  <D.28600>:
  goto <D.25452>;
  <D.25460>:
  <D.25461>:
  goto <D.25452>;
  <D.25452>:
  D.28601 = cfg->method;
  D.28602 = (unsigned int) D.28601;
  code = mono_arm_emit_load_imm (code, 0, D.28602);
  func.116 = (unsigned int) func;
  code = mono_arm_emit_load_imm (code, 12, func.116);
  code = emit_call_reg (code, 12);
  switch (save_mode) <default: <D.25470>, case 0: <D.25469>, case 2: <D.25466>, case 3: <D.25462>, case 4: <D.25468>>
  <D.25462>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.28604 = ABS_EXPR <save_offset>;
    D.28605 = (unsigned int) D.28604;
    D.28554 = cfg->frame_reg;
    D.28555 = D.28554 << 16;
    D.28606 = D.28605 | D.28555;
    if (save_offset >= 0) goto <D.28608>; else goto <D.28609>;
    <D.28608>:
    iftmp.117 = 8388608;
    goto <D.28610>;
    <D.28609>:
    iftmp.117 = 0;
    <D.28610>:
    D.28611 = D.28606 | iftmp.117;
    D.28612 = D.28611 | 3843031040;
    *__ainstrp = D.28612;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    if (save_offset < -4) goto <D.28614>; else goto <D.28615>;
    <D.28614>:
    D.28616 = -4 - save_offset;
    D.28617 = D.28616 | 4096;
    iftmp.118 = (guint32) D.28617;
    goto <D.28618>;
    <D.28615>:
    D.28619 = save_offset + 4;
    D.28620 = D.28619 | 4096;
    iftmp.118 = (guint32) D.28620;
    <D.28618>:
    D.28554 = cfg->frame_reg;
    D.28555 = D.28554 << 16;
    D.28621 = iftmp.118 | D.28555;
    if (save_offset >= -4) goto <D.28623>; else goto <D.28624>;
    <D.28623>:
    iftmp.119 = 8388608;
    goto <D.28625>;
    <D.28624>:
    iftmp.119 = 0;
    <D.28625>:
    D.28626 = D.28621 | iftmp.119;
    D.28627 = D.28626 | 3843031040;
    *__ainstrp = D.28627;
    code = __ainstrp + 4;
  }
  goto <D.25465>;
  <D.25466>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.28604 = ABS_EXPR <save_offset>;
    D.28605 = (unsigned int) D.28604;
    D.28554 = cfg->frame_reg;
    D.28555 = D.28554 << 16;
    D.28606 = D.28605 | D.28555;
    if (save_offset >= 0) goto <D.28629>; else goto <D.28630>;
    <D.28629>:
    iftmp.120 = 8388608;
    goto <D.28631>;
    <D.28630>:
    iftmp.120 = 0;
    <D.28631>:
    D.28632 = D.28606 | iftmp.120;
    D.28633 = D.28632 | 3843031040;
    *__ainstrp = D.28633;
    code = __ainstrp + 4;
  }
  goto <D.25465>;
  <D.25468>:
  goto <D.25465>;
  <D.25469>:
  <D.25470>:
  goto <D.25465>;
  <D.25465>:
  D.28634 = code;
  return D.28634;
}


mono_arch_peephole_pass_1 (struct MonoCompile * cfg, struct MonoBasicBlock * bb)
{

}


mono_arch_peephole_pass_2 (struct MonoCompile * cfg, struct MonoBasicBlock * bb)
{
  struct MonoInst * iftmp.121;
  short unsigned int D.28643;
  int D.28644;
  short unsigned int D.28647;
  _Bool D.28648;
  _Bool D.28649;
  _Bool D.28650;
  int D.28653;
  int D.28654;
  int D.28657;
  int D.28658;
  int D.28661;
  int D.28662;
  struct MonoInst * D.28665;
  struct MonoInst * D.28668;
  struct MonoInst * D.28671;
  struct MonoInst * D.28674;
  int D.28677;
  int D.28678;
  short unsigned int D.28681;
  _Bool D.28682;
  _Bool D.28683;
  _Bool D.28684;
  short unsigned int D.28705;
  guint16 iftmp.122;
  guint16 iftmp.123;
  struct MonoInst * iftmp.124;
  struct MonoInst * ins;
  struct MonoInst * n;
  struct MonoInst * last_ins;

  last_ins = 0B;
  ins = bb->code;
  if (ins != 0B) goto <D.28640>; else goto <D.28641>;
  <D.28640>:
  iftmp.121 = ins->next;
  goto <D.28642>;
  <D.28641>:
  iftmp.121 = 0B;
  <D.28642>:
  n = iftmp.121;
  goto <D.25494>;
  <D.25493>:
  D.28643 = ins->opcode;
  D.28644 = (int) D.28643;
  switch (D.28644) <default: <D.28754>, case 388: <D.25485>, case 389: <D.25489>, case 390: <D.25488>, case 391: <D.25491>, case 392: <D.25490>, case 393: <D.25486>, case 424: <D.25492>, case 431: <D.25482>, case 627: <D.25483>>
  <D.25482>:
  <D.25483>:
  goto <D.25484>;
  <D.25485>:
  <D.25486>:
  if (last_ins != 0B) goto <D.28645>; else goto <D.28646>;
  <D.28645>:
  D.28647 = last_ins->opcode;
  D.28648 = D.28647 == 377;
  D.28649 = D.28647 == 374;
  D.28650 = D.28648 | D.28649;
  if (D.28650 != 0) goto <D.28651>; else goto <D.28652>;
  <D.28651>:
  D.28653 = ins->sreg1;
  D.28654 = last_ins->dreg;
  if (D.28653 == D.28654) goto <D.28655>; else goto <D.28656>;
  <D.28655>:
  D.28657 = ins->data.op[0].const_val;
  D.28658 = last_ins->data.op[0].const_val;
  if (D.28657 == D.28658) goto <D.28659>; else goto <D.28660>;
  <D.28659>:
  D.28661 = ins->dreg;
  D.28662 = last_ins->sreg1;
  if (D.28661 == D.28662) goto <D.28663>; else goto <D.28664>;
  <D.28663>:
  D.28665 = ins->prev;
  if (D.28665 != 0B) goto <D.28666>; else goto <D.28667>;
  <D.28666>:
  D.28665 = ins->prev;
  D.28668 = ins->next;
  D.28665->next = D.28668;
  <D.28667>:
  D.28668 = ins->next;
  if (D.28668 != 0B) goto <D.28669>; else goto <D.28670>;
  <D.28669>:
  D.28668 = ins->next;
  D.28665 = ins->prev;
  D.28668->prev = D.28665;
  <D.28670>:
  D.28671 = bb->code;
  if (D.28671 == ins) goto <D.28672>; else goto <D.28673>;
  <D.28672>:
  D.28668 = ins->next;
  bb->code = D.28668;
  <D.28673>:
  D.28674 = bb->last_ins;
  if (D.28674 == ins) goto <D.28675>; else goto <D.28676>;
  <D.28675>:
  D.28665 = ins->prev;
  bb->last_ins = D.28665;
  <D.28676>:
  ins->opcode = 316;
  ins->dreg = -1;
  ins->sreg3 = -1;
  D.28677 = ins->sreg3;
  ins->sreg2 = D.28677;
  D.28678 = ins->sreg2;
  ins->sreg1 = D.28678;
  // predicted unlikely by continue predictor.
  goto <D.25487>;
  <D.28664>:
  ins->opcode = 424;
  D.28662 = last_ins->sreg1;
  ins->sreg1 = D.28662;
  <D.28660>:
  <D.28656>:
  <D.28652>:
  <D.28646>:
  if (last_ins != 0B) goto <D.28679>; else goto <D.28680>;
  <D.28679>:
  D.28681 = last_ins->opcode;
  D.28682 = D.28681 == 393;
  D.28683 = D.28681 == 388;
  D.28684 = D.28682 | D.28683;
  if (D.28684 != 0) goto <D.28685>; else goto <D.28686>;
  <D.28685>:
  D.28653 = ins->sreg1;
  D.28654 = last_ins->dreg;
  if (D.28653 != D.28654) goto <D.28687>; else goto <D.28688>;
  <D.28687>:
  D.28653 = ins->sreg1;
  D.28662 = last_ins->sreg1;
  if (D.28653 == D.28662) goto <D.28689>; else goto <D.28690>;
  <D.28689>:
  D.28657 = ins->data.op[0].const_val;
  D.28658 = last_ins->data.op[0].const_val;
  if (D.28657 == D.28658) goto <D.28691>; else goto <D.28692>;
  <D.28691>:
  D.28661 = ins->dreg;
  D.28654 = last_ins->dreg;
  if (D.28661 == D.28654) goto <D.28693>; else goto <D.28694>;
  <D.28693>:
  D.28665 = ins->prev;
  if (D.28665 != 0B) goto <D.28695>; else goto <D.28696>;
  <D.28695>:
  D.28665 = ins->prev;
  D.28668 = ins->next;
  D.28665->next = D.28668;
  <D.28696>:
  D.28668 = ins->next;
  if (D.28668 != 0B) goto <D.28697>; else goto <D.28698>;
  <D.28697>:
  D.28668 = ins->next;
  D.28665 = ins->prev;
  D.28668->prev = D.28665;
  <D.28698>:
  D.28671 = bb->code;
  if (D.28671 == ins) goto <D.28699>; else goto <D.28700>;
  <D.28699>:
  D.28668 = ins->next;
  bb->code = D.28668;
  <D.28700>:
  D.28674 = bb->last_ins;
  if (D.28674 == ins) goto <D.28701>; else goto <D.28702>;
  <D.28701>:
  D.28665 = ins->prev;
  bb->last_ins = D.28665;
  <D.28702>:
  ins->opcode = 316;
  ins->dreg = -1;
  ins->sreg3 = -1;
  D.28677 = ins->sreg3;
  ins->sreg2 = D.28677;
  D.28678 = ins->sreg2;
  ins->sreg1 = D.28678;
  // predicted unlikely by continue predictor.
  goto <D.25487>;
  <D.28694>:
  ins->opcode = 424;
  D.28654 = last_ins->dreg;
  ins->sreg1 = D.28654;
  <D.28692>:
  <D.28690>:
  <D.28688>:
  <D.28686>:
  <D.28680>:
  goto <D.25484>;
  <D.25488>:
  <D.25489>:
  if (last_ins != 0B) goto <D.28703>; else goto <D.28704>;
  <D.28703>:
  D.28705 = last_ins->opcode;
  if (D.28705 == 375) goto <D.28706>; else goto <D.28707>;
  <D.28706>:
  D.28653 = ins->sreg1;
  D.28654 = last_ins->dreg;
  if (D.28653 == D.28654) goto <D.28708>; else goto <D.28709>;
  <D.28708>:
  D.28657 = ins->data.op[0].const_val;
  D.28658 = last_ins->data.op[0].const_val;
  if (D.28657 == D.28658) goto <D.28710>; else goto <D.28711>;
  <D.28710>:
  D.28643 = ins->opcode;
  if (D.28643 == 389) goto <D.28713>; else goto <D.28714>;
  <D.28713>:
  iftmp.122 = 580;
  goto <D.28715>;
  <D.28714>:
  iftmp.122 = 591;
  <D.28715>:
  ins->opcode = iftmp.122;
  D.28662 = last_ins->sreg1;
  ins->sreg1 = D.28662;
  <D.28711>:
  <D.28709>:
  <D.28707>:
  <D.28704>:
  goto <D.25484>;
  <D.25490>:
  <D.25491>:
  if (last_ins != 0B) goto <D.28716>; else goto <D.28717>;
  <D.28716>:
  D.28705 = last_ins->opcode;
  if (D.28705 == 376) goto <D.28718>; else goto <D.28719>;
  <D.28718>:
  D.28653 = ins->sreg1;
  D.28654 = last_ins->dreg;
  if (D.28653 == D.28654) goto <D.28720>; else goto <D.28721>;
  <D.28720>:
  D.28657 = ins->data.op[0].const_val;
  D.28658 = last_ins->data.op[0].const_val;
  if (D.28657 == D.28658) goto <D.28722>; else goto <D.28723>;
  <D.28722>:
  D.28643 = ins->opcode;
  if (D.28643 == 391) goto <D.28725>; else goto <D.28726>;
  <D.28725>:
  iftmp.123 = 581;
  goto <D.28727>;
  <D.28726>:
  iftmp.123 = 590;
  <D.28727>:
  ins->opcode = iftmp.123;
  D.28662 = last_ins->sreg1;
  ins->sreg1 = D.28662;
  <D.28723>:
  <D.28721>:
  <D.28719>:
  <D.28717>:
  goto <D.25484>;
  <D.25492>:
  ins->opcode = 424;
  D.28661 = ins->dreg;
  D.28653 = ins->sreg1;
  if (D.28661 == D.28653) goto <D.28728>; else goto <D.28729>;
  <D.28728>:
  D.28665 = ins->prev;
  if (D.28665 != 0B) goto <D.28730>; else goto <D.28731>;
  <D.28730>:
  D.28665 = ins->prev;
  D.28668 = ins->next;
  D.28665->next = D.28668;
  <D.28731>:
  D.28668 = ins->next;
  if (D.28668 != 0B) goto <D.28732>; else goto <D.28733>;
  <D.28732>:
  D.28668 = ins->next;
  D.28665 = ins->prev;
  D.28668->prev = D.28665;
  <D.28733>:
  D.28671 = bb->code;
  if (D.28671 == ins) goto <D.28734>; else goto <D.28735>;
  <D.28734>:
  D.28668 = ins->next;
  bb->code = D.28668;
  <D.28735>:
  D.28674 = bb->last_ins;
  if (D.28674 == ins) goto <D.28736>; else goto <D.28737>;
  <D.28736>:
  D.28665 = ins->prev;
  bb->last_ins = D.28665;
  <D.28737>:
  ins->opcode = 316;
  ins->dreg = -1;
  ins->sreg3 = -1;
  D.28677 = ins->sreg3;
  ins->sreg2 = D.28677;
  D.28678 = ins->sreg2;
  ins->sreg1 = D.28678;
  // predicted unlikely by continue predictor.
  goto <D.25487>;
  <D.28729>:
  if (last_ins != 0B) goto <D.28738>; else goto <D.28739>;
  <D.28738>:
  D.28705 = last_ins->opcode;
  if (D.28705 == 424) goto <D.28740>; else goto <D.28741>;
  <D.28740>:
  D.28653 = ins->sreg1;
  D.28654 = last_ins->dreg;
  if (D.28653 == D.28654) goto <D.28742>; else goto <D.28743>;
  <D.28742>:
  D.28661 = ins->dreg;
  D.28662 = last_ins->sreg1;
  if (D.28661 == D.28662) goto <D.28744>; else goto <D.28745>;
  <D.28744>:
  D.28665 = ins->prev;
  if (D.28665 != 0B) goto <D.28746>; else goto <D.28747>;
  <D.28746>:
  D.28665 = ins->prev;
  D.28668 = ins->next;
  D.28665->next = D.28668;
  <D.28747>:
  D.28668 = ins->next;
  if (D.28668 != 0B) goto <D.28748>; else goto <D.28749>;
  <D.28748>:
  D.28668 = ins->next;
  D.28665 = ins->prev;
  D.28668->prev = D.28665;
  <D.28749>:
  D.28671 = bb->code;
  if (D.28671 == ins) goto <D.28750>; else goto <D.28751>;
  <D.28750>:
  D.28668 = ins->next;
  bb->code = D.28668;
  <D.28751>:
  D.28674 = bb->last_ins;
  if (D.28674 == ins) goto <D.28752>; else goto <D.28753>;
  <D.28752>:
  D.28665 = ins->prev;
  bb->last_ins = D.28665;
  <D.28753>:
  ins->opcode = 316;
  ins->dreg = -1;
  ins->sreg3 = -1;
  D.28677 = ins->sreg3;
  ins->sreg2 = D.28677;
  D.28678 = ins->sreg2;
  ins->sreg1 = D.28678;
  // predicted unlikely by continue predictor.
  goto <D.25487>;
  <D.28745>:
  <D.28743>:
  <D.28741>:
  <D.28739>:
  goto <D.25484>;
  <D.28754>:
  <D.25484>:
  last_ins = ins;
  ins = ins->next;
  <D.25487>:
  ins = n;
  if (ins != 0B) goto <D.28756>; else goto <D.28757>;
  <D.28756>:
  iftmp.124 = ins->next;
  goto <D.28758>;
  <D.28757>:
  iftmp.124 = 0B;
  <D.28758>:
  n = iftmp.124;
  <D.25494>:
  if (ins != 0B) goto <D.25493>; else goto <D.25495>;
  <D.25495>:
  bb->last_ins = last_ins;
}


mono_arch_lowering_pass (struct MonoCompile * cfg, struct MonoBasicBlock * bb)
{
  short unsigned int D.28759;
  int D.28760;
  int D.28761;
  unsigned int D.28762;
  struct MonoMemPool * D.28765;
  int D.28766;
  struct MonoInst * D.28767;
  int D.28768;
  int D.28769;
  const unsigned char * D.28770;
  unsigned int D.28771;
  int D.28772;
  int D.28773;
  int D.28774;
  short unsigned int D.28775;
  short unsigned int D.28776;
  _Bool D.28777;
  _Bool D.28778;
  _Bool D.28779;
  unsigned int D.28787;
  int D.28788;
  struct MonoInst * D.28789;
  short unsigned int D.28792;
  _Bool D.28793;
  _Bool D.28794;
  _Bool D.28795;
  unsigned int D.28798;
  int D.28799;
  int D.28800;
  short unsigned int D.28801;
  unsigned int D.28802;
  int D.28803;
  int D.28804;
  unsigned int D.28805;
  unsigned int D.28806;
  unsigned int D.28808;
  int D.28809;
  int D.28810;
  short unsigned int D.28811;
  unsigned int D.28812;
  unsigned int D.28814;
  int D.28815;
  int D.28816;
  short unsigned int D.28817;
  unsigned int D.28818;
  unsigned int D.28820;
  unsigned int D.28821;
  int D.28824;
  int D.28825;
  unsigned int D.28826;
  int D.28827;
  unsigned int D.28829;
  int D.28830;
  int D.28831;
  struct MonoInst * D.28832;
  int D.28833;
  int D.28834;
  unsigned int D.28835;
  int D.28836;
  int D.28837;
  unsigned int D.28839;
  int D.28840;
  int D.28841;
  short unsigned int D.28842;
  unsigned int D.28844;
  int D.28845;
  int D.28846;
  short unsigned int D.28847;
  unsigned int low_imm.125;
  unsigned int D.28853;
  int D.28855;
  unsigned int D.28856;
  int D.28857;
  unsigned int D.28858;
  int D.28859;
  int D.28860;
  struct MonoInst * D.28861;
  int D.28862;
  int D.28863;
  unsigned int D.28864;
  int D.28865;
  int D.28866;
  unsigned int D.28867;
  int D.28868;
  int D.28869;
  short unsigned int D.28870;
  int D.28873;
  int D.28874;
  short unsigned int D.28875;
  int D.28876;
  unsigned int D.28880;
  struct MonoInst * ins;
  struct MonoInst * temp;
  struct MonoInst * last_ins;
  int rot_amount;
  int imm8;
  int low_imm;
  void loop_start = <<< error >>>;

  try
    {
      last_ins = 0B;
      ins = bb->code;
      goto <D.25600>;
      <D.25599>:
      loop_start:
      D.28759 = ins->opcode;
      D.28760 = (int) D.28759;
      switch (D.28760) <default: <D.28879>, case 323: <D.25542>, case 324: <D.25590>, case 327: <D.25543>, case 339: <D.25568>, case 374: <D.25579>, case 375: <D.25581>, case 376: <D.25582>, case 377: <D.25580>, case 379: <D.25583>, case 380: <D.25584>, case 381: <D.25586>, case 382: <D.25587>, case 383: <D.25588>, case 384: <D.25589>, case 388: <D.25569>, case 389: <D.25575>, case 390: <D.25572>, case 391: <D.25573>, case 392: <D.25574>, case 393: <D.25570>, case 394: <D.25571>, case 396: <D.25576>, case 397: <D.25577>, case 429: <D.25539>, case 430: <D.25540>, case 431: <D.25558>, case 436: <D.25541>, case 437: <D.25548>, case 438: <D.25549>, case 620: <D.25553>, case 621: <D.25561>, case 622: <D.25554>, case 624: <D.25563>, case 625: <D.25550>, case 626: <D.25551>, case 627: <D.25559>, case 628: <D.25564>, case 629: <D.25565>, case 630: <D.25566>, case 631: <D.25567>, case 632: <D.25552>, case 633: <D.25555>, case 634: <D.25556>, case 752: <D.25545>, case 753: <D.25560>, case 754: <D.25547>, case 756: <D.25544>, case 757: <D.25562>, case 758: <D.25546>>
      <D.25539>:
      <D.25540>:
      <D.25541>:
      <D.25542>:
      <D.25543>:
      <D.25544>:
      <D.25545>:
      <D.25546>:
      <D.25547>:
      <D.25548>:
      <D.25549>:
      <D.25550>:
      <D.25551>:
      <D.25552>:
      <D.25553>:
      <D.25554>:
      <D.25555>:
      <D.25556>:
      D.28761 = ins->data.op[1].const_val;
      D.28762 = (unsigned int) D.28761;
      imm8 = mono_arm_is_rotated_imm8 (D.28762, &rot_amount);
      if (imm8 < 0) goto <D.28763>; else goto <D.28764>;
      <D.28763>:
      D.28765 = cfg->mempool;
      temp = mono_mempool_alloc (D.28765, 56);
      temp->data.op[1].const_val = 0;
      D.28766 = temp->data.op[1].const_val;
      temp->data.op[0].const_val = D.28766;
      temp->prev = 0B;
      D.28767 = temp->prev;
      temp->next = D.28767;
      temp->opcode = 362;
      temp->flags = 0;
      temp->type = 0;
      temp->dreg = -1;
      temp->sreg3 = -1;
      D.28768 = temp->sreg3;
      temp->sreg2 = D.28768;
      D.28769 = temp->sreg2;
      temp->sreg1 = D.28769;
      D.28770 = cfg->ip;
      temp->cil_code = D.28770;
      mono_bblock_insert_before_ins (bb, ins, temp);
      D.28761 = ins->data.op[1].const_val;
      temp->data.op[0].const_val = D.28761;
      D.28771 = mono_alloc_ireg (cfg);
      D.28772 = (int) D.28771;
      temp->dreg = D.28772;
      D.28773 = temp->dreg;
      ins->sreg2 = D.28773;
      D.28759 = ins->opcode;
      D.28760 = (int) D.28759;
      D.28774 = mono_op_imm_to_op (D.28760);
      D.28775 = (short unsigned int) D.28774;
      ins->opcode = D.28775;
      <D.28764>:
      D.28776 = ins->opcode;
      D.28777 = D.28776 == 753;
      D.28778 = D.28776 == 621;
      D.28779 = D.28777 | D.28778;
      if (D.28779 != 0) goto loop_start; else goto <D.28780>;
      <D.28780>:
      D.28759 = ins->opcode;
      if (D.28759 == 757) goto loop_start; else goto <D.25557>;
      <D.25558>:
      <D.25559>:
      D.28761 = ins->data.op[1].const_val;
      if (D.28761 == 1) goto <D.28781>; else goto <D.28782>;
      <D.28781>:
      ins->opcode = 424;
      goto <D.25557>;
      <D.28782>:
      D.28761 = ins->data.op[1].const_val;
      if (D.28761 == 0) goto <D.28783>; else goto <D.28784>;
      <D.28783>:
      ins->opcode = 362;
      ins->data.op[0].const_val = 0;
      goto <D.25557>;
      <D.28784>:
      D.28761 = ins->data.op[1].const_val;
      D.28762 = (unsigned int) D.28761;
      imm8 = mono_is_power_of_two (D.28762);
      if (imm8 > 0) goto <D.28785>; else goto <D.28786>;
      <D.28785>:
      ins->opcode = 439;
      ins->data.op[1].const_val = imm8;
      goto <D.25557>;
      <D.28786>:
      D.28765 = cfg->mempool;
      temp = mono_mempool_alloc (D.28765, 56);
      temp->data.op[1].const_val = 0;
      D.28766 = temp->data.op[1].const_val;
      temp->data.op[0].const_val = D.28766;
      temp->prev = 0B;
      D.28767 = temp->prev;
      temp->next = D.28767;
      temp->opcode = 362;
      temp->flags = 0;
      temp->type = 0;
      temp->dreg = -1;
      temp->sreg3 = -1;
      D.28768 = temp->sreg3;
      temp->sreg2 = D.28768;
      D.28769 = temp->sreg2;
      temp->sreg1 = D.28769;
      D.28770 = cfg->ip;
      temp->cil_code = D.28770;
      mono_bblock_insert_before_ins (bb, ins, temp);
      D.28761 = ins->data.op[1].const_val;
      temp->data.op[0].const_val = D.28761;
      D.28787 = mono_alloc_ireg (cfg);
      D.28788 = (int) D.28787;
      temp->dreg = D.28788;
      D.28773 = temp->dreg;
      ins->sreg2 = D.28773;
      ins->opcode = 567;
      goto <D.25557>;
      <D.25560>:
      <D.25561>:
      <D.25562>:
      <D.25563>:
      D.28789 = ins->next;
      if (D.28789 != 0B) goto <D.28790>; else goto <D.28791>;
      <D.28790>:
      D.28789 = ins->next;
      D.28792 = D.28789->opcode;
      D.28793 = D.28792 == 463;
      D.28794 = D.28792 == 477;
      D.28795 = D.28793 | D.28794;
      if (D.28795 != 0) goto <D.28796>; else goto <D.28797>;
      <D.28796>:
      D.28789 = ins->next;
      D.28789->opcode = 464;
      <D.28797>:
      <D.28791>:
      goto <D.25557>;
      <D.25564>:
      <D.25565>:
      <D.25566>:
      <D.25567>:
      D.28765 = cfg->mempool;
      temp = mono_mempool_alloc (D.28765, 56);
      temp->data.op[1].const_val = 0;
      D.28766 = temp->data.op[1].const_val;
      temp->data.op[0].const_val = D.28766;
      temp->prev = 0B;
      D.28767 = temp->prev;
      temp->next = D.28767;
      temp->opcode = 362;
      temp->flags = 0;
      temp->type = 0;
      temp->dreg = -1;
      temp->sreg3 = -1;
      D.28768 = temp->sreg3;
      temp->sreg2 = D.28768;
      D.28769 = temp->sreg2;
      temp->sreg1 = D.28769;
      D.28770 = cfg->ip;
      temp->cil_code = D.28770;
      mono_bblock_insert_before_ins (bb, ins, temp);
      D.28761 = ins->data.op[1].const_val;
      temp->data.op[0].const_val = D.28761;
      D.28798 = mono_alloc_ireg (cfg);
      D.28799 = (int) D.28798;
      temp->dreg = D.28799;
      D.28773 = temp->dreg;
      ins->sreg2 = D.28773;
      D.28759 = ins->opcode;
      D.28760 = (int) D.28759;
      D.28800 = mono_op_imm_to_op (D.28760);
      D.28801 = (short unsigned int) D.28800;
      ins->opcode = D.28801;
      goto <D.25557>;
      <D.25568>:
      D.28765 = cfg->mempool;
      temp = mono_mempool_alloc (D.28765, 56);
      temp->data.op[1].const_val = 0;
      D.28766 = temp->data.op[1].const_val;
      temp->data.op[0].const_val = D.28766;
      temp->prev = 0B;
      D.28767 = temp->prev;
      temp->next = D.28767;
      temp->opcode = 362;
      temp->flags = 0;
      temp->type = 0;
      temp->dreg = -1;
      temp->sreg3 = -1;
      D.28768 = temp->sreg3;
      temp->sreg2 = D.28768;
      D.28769 = temp->sreg2;
      temp->sreg1 = D.28769;
      D.28770 = cfg->ip;
      temp->cil_code = D.28770;
      mono_bblock_insert_before_ins (bb, ins, temp);
      D.28761 = ins->data.op[1].const_val;
      temp->data.op[0].const_val = D.28761;
      D.28802 = mono_alloc_ireg (cfg);
      D.28803 = (int) D.28802;
      temp->dreg = D.28803;
      D.28773 = temp->dreg;
      ins->sreg1 = D.28773;
      ins->opcode = 338;
      goto <D.25557>;
      <D.25569>:
      <D.25570>:
      <D.25571>:
      <D.25572>:
      D.28804 = ins->data.op[0].const_val;
      D.28805 = (unsigned int) D.28804;
      D.28806 = D.28805 + 4095;
      if (D.28806 <= 8190) goto <D.25557>; else goto <D.28807>;
      <D.28807>:
      D.28765 = cfg->mempool;
      temp = mono_mempool_alloc (D.28765, 56);
      temp->data.op[1].const_val = 0;
      D.28766 = temp->data.op[1].const_val;
      temp->data.op[0].const_val = D.28766;
      temp->prev = 0B;
      D.28767 = temp->prev;
      temp->next = D.28767;
      temp->opcode = 362;
      temp->flags = 0;
      temp->type = 0;
      temp->dreg = -1;
      temp->sreg3 = -1;
      D.28768 = temp->sreg3;
      temp->sreg2 = D.28768;
      D.28769 = temp->sreg2;
      temp->sreg1 = D.28769;
      D.28770 = cfg->ip;
      temp->cil_code = D.28770;
      mono_bblock_insert_before_ins (bb, ins, temp);
      D.28804 = ins->data.op[0].const_val;
      temp->data.op[0].const_val = D.28804;
      D.28808 = mono_alloc_ireg (cfg);
      D.28809 = (int) D.28808;
      temp->dreg = D.28809;
      D.28773 = temp->dreg;
      ins->sreg2 = D.28773;
      D.28759 = ins->opcode;
      D.28760 = (int) D.28759;
      D.28810 = map_to_reg_reg_op (D.28760);
      D.28811 = (short unsigned int) D.28810;
      ins->opcode = D.28811;
      goto <D.25557>;
      <D.25573>:
      <D.25574>:
      <D.25575>:
      D.28804 = ins->data.op[0].const_val;
      D.28805 = (unsigned int) D.28804;
      D.28812 = D.28805 + 255;
      if (D.28812 <= 510) goto <D.25557>; else goto <D.28813>;
      <D.28813>:
      D.28765 = cfg->mempool;
      temp = mono_mempool_alloc (D.28765, 56);
      temp->data.op[1].const_val = 0;
      D.28766 = temp->data.op[1].const_val;
      temp->data.op[0].const_val = D.28766;
      temp->prev = 0B;
      D.28767 = temp->prev;
      temp->next = D.28767;
      temp->opcode = 362;
      temp->flags = 0;
      temp->type = 0;
      temp->dreg = -1;
      temp->sreg3 = -1;
      D.28768 = temp->sreg3;
      temp->sreg2 = D.28768;
      D.28769 = temp->sreg2;
      temp->sreg1 = D.28769;
      D.28770 = cfg->ip;
      temp->cil_code = D.28770;
      mono_bblock_insert_before_ins (bb, ins, temp);
      D.28804 = ins->data.op[0].const_val;
      temp->data.op[0].const_val = D.28804;
      D.28814 = mono_alloc_ireg (cfg);
      D.28815 = (int) D.28814;
      temp->dreg = D.28815;
      D.28773 = temp->dreg;
      ins->sreg2 = D.28773;
      D.28759 = ins->opcode;
      D.28760 = (int) D.28759;
      D.28816 = map_to_reg_reg_op (D.28760);
      D.28817 = (short unsigned int) D.28816;
      ins->opcode = D.28817;
      goto <D.25557>;
      <D.25576>:
      <D.25577>:
      D.28804 = ins->data.op[0].const_val;
      D.28805 = (unsigned int) D.28804;
      D.28818 = D.28805 + 1020;
      if (D.28818 <= 2040) goto <D.25557>; else goto <D.28819>;
      <D.28819>:
      D.28804 = ins->data.op[0].const_val;
      low_imm = D.28804 & 511;
      D.28804 = ins->data.op[0].const_val;
      D.28820 = (unsigned int) D.28804;
      D.28821 = D.28820 & 4294966784;
      imm8 = mono_arm_is_rotated_imm8 (D.28821, &rot_amount);
      if (imm8 >= 0) goto <D.28822>; else goto <D.28823>;
      <D.28822>:
      D.28765 = cfg->mempool;
      temp = mono_mempool_alloc (D.28765, 56);
      temp->data.op[1].const_val = 0;
      D.28766 = temp->data.op[1].const_val;
      temp->data.op[0].const_val = D.28766;
      temp->prev = 0B;
      D.28767 = temp->prev;
      temp->next = D.28767;
      temp->opcode = 429;
      temp->flags = 0;
      temp->type = 0;
      temp->dreg = -1;
      temp->sreg3 = -1;
      D.28768 = temp->sreg3;
      temp->sreg2 = D.28768;
      D.28769 = temp->sreg2;
      temp->sreg1 = D.28769;
      D.28770 = cfg->ip;
      temp->cil_code = D.28770;
      mono_bblock_insert_before_ins (bb, ins, temp);
      D.28804 = ins->data.op[0].const_val;
      D.28824 = D.28804 & -512;
      temp->data.op[1].const_val = D.28824;
      D.28825 = ins->sreg1;
      temp->sreg1 = D.28825;
      D.28826 = mono_alloc_ireg (cfg);
      D.28827 = (int) D.28826;
      temp->dreg = D.28827;
      D.28773 = temp->dreg;
      ins->sreg1 = D.28773;
      ins->data.op[0].const_val = low_imm;
      goto <D.28828>;
      <D.28823>:
      {
        struct MonoInst * add_ins;

        D.28765 = cfg->mempool;
        temp = mono_mempool_alloc (D.28765, 56);
        temp->data.op[1].const_val = 0;
        D.28766 = temp->data.op[1].const_val;
        temp->data.op[0].const_val = D.28766;
        temp->prev = 0B;
        D.28767 = temp->prev;
        temp->next = D.28767;
        temp->opcode = 362;
        temp->flags = 0;
        temp->type = 0;
        temp->dreg = -1;
        temp->sreg3 = -1;
        D.28768 = temp->sreg3;
        temp->sreg2 = D.28768;
        D.28769 = temp->sreg2;
        temp->sreg1 = D.28769;
        D.28770 = cfg->ip;
        temp->cil_code = D.28770;
        mono_bblock_insert_before_ins (bb, ins, temp);
        D.28804 = ins->data.op[0].const_val;
        temp->data.op[0].const_val = D.28804;
        D.28829 = mono_alloc_ireg (cfg);
        D.28830 = (int) D.28829;
        temp->dreg = D.28830;
        D.28765 = cfg->mempool;
        add_ins = mono_mempool_alloc (D.28765, 56);
        add_ins->data.op[1].const_val = 0;
        D.28831 = add_ins->data.op[1].const_val;
        add_ins->data.op[0].const_val = D.28831;
        add_ins->prev = 0B;
        D.28832 = add_ins->prev;
        add_ins->next = D.28832;
        add_ins->opcode = 565;
        add_ins->flags = 0;
        add_ins->type = 0;
        add_ins->dreg = -1;
        add_ins->sreg3 = -1;
        D.28833 = add_ins->sreg3;
        add_ins->sreg2 = D.28833;
        D.28834 = add_ins->sreg2;
        add_ins->sreg1 = D.28834;
        D.28770 = cfg->ip;
        add_ins->cil_code = D.28770;
        mono_bblock_insert_before_ins (bb, ins, add_ins);
        D.28825 = ins->sreg1;
        add_ins->sreg1 = D.28825;
        D.28773 = temp->dreg;
        add_ins->sreg2 = D.28773;
        D.28835 = mono_alloc_ireg (cfg);
        D.28836 = (int) D.28835;
        add_ins->dreg = D.28836;
        D.28837 = add_ins->dreg;
        ins->sreg1 = D.28837;
        ins->data.op[0].const_val = 0;
      }
      <D.28828>:
      goto <D.25557>;
      <D.25579>:
      <D.25580>:
      <D.25581>:
      D.28804 = ins->data.op[0].const_val;
      D.28805 = (unsigned int) D.28804;
      D.28806 = D.28805 + 4095;
      if (D.28806 <= 8190) goto <D.25557>; else goto <D.28838>;
      <D.28838>:
      D.28765 = cfg->mempool;
      temp = mono_mempool_alloc (D.28765, 56);
      temp->data.op[1].const_val = 0;
      D.28766 = temp->data.op[1].const_val;
      temp->data.op[0].const_val = D.28766;
      temp->prev = 0B;
      D.28767 = temp->prev;
      temp->next = D.28767;
      temp->opcode = 362;
      temp->flags = 0;
      temp->type = 0;
      temp->dreg = -1;
      temp->sreg3 = -1;
      D.28768 = temp->sreg3;
      temp->sreg2 = D.28768;
      D.28769 = temp->sreg2;
      temp->sreg1 = D.28769;
      D.28770 = cfg->ip;
      temp->cil_code = D.28770;
      mono_bblock_insert_before_ins (bb, ins, temp);
      D.28804 = ins->data.op[0].const_val;
      temp->data.op[0].const_val = D.28804;
      D.28839 = mono_alloc_ireg (cfg);
      D.28840 = (int) D.28839;
      temp->dreg = D.28840;
      D.28773 = temp->dreg;
      ins->sreg2 = D.28773;
      D.28759 = ins->opcode;
      D.28760 = (int) D.28759;
      D.28841 = map_to_reg_reg_op (D.28760);
      D.28842 = (short unsigned int) D.28841;
      ins->opcode = D.28842;
      goto <D.25557>;
      <D.25582>:
      D.28804 = ins->data.op[0].const_val;
      D.28805 = (unsigned int) D.28804;
      D.28812 = D.28805 + 255;
      if (D.28812 <= 510) goto <D.25557>; else goto <D.28843>;
      <D.28843>:
      D.28765 = cfg->mempool;
      temp = mono_mempool_alloc (D.28765, 56);
      temp->data.op[1].const_val = 0;
      D.28766 = temp->data.op[1].const_val;
      temp->data.op[0].const_val = D.28766;
      temp->prev = 0B;
      D.28767 = temp->prev;
      temp->next = D.28767;
      temp->opcode = 362;
      temp->flags = 0;
      temp->type = 0;
      temp->dreg = -1;
      temp->sreg3 = -1;
      D.28768 = temp->sreg3;
      temp->sreg2 = D.28768;
      D.28769 = temp->sreg2;
      temp->sreg1 = D.28769;
      D.28770 = cfg->ip;
      temp->cil_code = D.28770;
      mono_bblock_insert_before_ins (bb, ins, temp);
      D.28804 = ins->data.op[0].const_val;
      temp->data.op[0].const_val = D.28804;
      D.28844 = mono_alloc_ireg (cfg);
      D.28845 = (int) D.28844;
      temp->dreg = D.28845;
      D.28773 = temp->dreg;
      ins->sreg2 = D.28773;
      D.28759 = ins->opcode;
      D.28760 = (int) D.28759;
      D.28846 = map_to_reg_reg_op (D.28760);
      D.28847 = (short unsigned int) D.28846;
      ins->opcode = D.28847;
      goto <D.25557>;
      <D.25583>:
      <D.25584>:
      D.28804 = ins->data.op[0].const_val;
      D.28805 = (unsigned int) D.28804;
      D.28818 = D.28805 + 1020;
      if (D.28818 <= 2040) goto <D.25557>; else goto <D.28848>;
      <D.28848>:
      D.28804 = ins->data.op[0].const_val;
      low_imm = D.28804 & 511;
      D.28804 = ins->data.op[0].const_val;
      D.28820 = (unsigned int) D.28804;
      D.28821 = D.28820 & 4294966784;
      imm8 = mono_arm_is_rotated_imm8 (D.28821, &rot_amount);
      if (imm8 >= 0) goto <D.28851>; else goto <D.28849>;
      <D.28851>:
      low_imm.125 = (unsigned int) low_imm;
      D.28853 = low_imm.125 + 1020;
      if (D.28853 <= 2040) goto <D.28854>; else goto <D.28849>;
      <D.28854>:
      D.28765 = cfg->mempool;
      temp = mono_mempool_alloc (D.28765, 56);
      temp->data.op[1].const_val = 0;
      D.28766 = temp->data.op[1].const_val;
      temp->data.op[0].const_val = D.28766;
      temp->prev = 0B;
      D.28767 = temp->prev;
      temp->next = D.28767;
      temp->opcode = 429;
      temp->flags = 0;
      temp->type = 0;
      temp->dreg = -1;
      temp->sreg3 = -1;
      D.28768 = temp->sreg3;
      temp->sreg2 = D.28768;
      D.28769 = temp->sreg2;
      temp->sreg1 = D.28769;
      D.28770 = cfg->ip;
      temp->cil_code = D.28770;
      mono_bblock_insert_before_ins (bb, ins, temp);
      D.28804 = ins->data.op[0].const_val;
      D.28824 = D.28804 & -512;
      temp->data.op[1].const_val = D.28824;
      D.28855 = ins->dreg;
      temp->sreg1 = D.28855;
      D.28856 = mono_alloc_ireg (cfg);
      D.28857 = (int) D.28856;
      temp->dreg = D.28857;
      D.28773 = temp->dreg;
      ins->dreg = D.28773;
      ins->data.op[0].const_val = low_imm;
      goto <D.28850>;
      <D.28849>:
      {
        struct MonoInst * add_ins;

        D.28765 = cfg->mempool;
        temp = mono_mempool_alloc (D.28765, 56);
        temp->data.op[1].const_val = 0;
        D.28766 = temp->data.op[1].const_val;
        temp->data.op[0].const_val = D.28766;
        temp->prev = 0B;
        D.28767 = temp->prev;
        temp->next = D.28767;
        temp->opcode = 362;
        temp->flags = 0;
        temp->type = 0;
        temp->dreg = -1;
        temp->sreg3 = -1;
        D.28768 = temp->sreg3;
        temp->sreg2 = D.28768;
        D.28769 = temp->sreg2;
        temp->sreg1 = D.28769;
        D.28770 = cfg->ip;
        temp->cil_code = D.28770;
        mono_bblock_insert_before_ins (bb, ins, temp);
        D.28804 = ins->data.op[0].const_val;
        temp->data.op[0].const_val = D.28804;
        D.28858 = mono_alloc_ireg (cfg);
        D.28859 = (int) D.28858;
        temp->dreg = D.28859;
        D.28765 = cfg->mempool;
        add_ins = mono_mempool_alloc (D.28765, 56);
        add_ins->data.op[1].const_val = 0;
        D.28860 = add_ins->data.op[1].const_val;
        add_ins->data.op[0].const_val = D.28860;
        add_ins->prev = 0B;
        D.28861 = add_ins->prev;
        add_ins->next = D.28861;
        add_ins->opcode = 565;
        add_ins->flags = 0;
        add_ins->type = 0;
        add_ins->dreg = -1;
        add_ins->sreg3 = -1;
        D.28862 = add_ins->sreg3;
        add_ins->sreg2 = D.28862;
        D.28863 = add_ins->sreg2;
        add_ins->sreg1 = D.28863;
        D.28770 = cfg->ip;
        add_ins->cil_code = D.28770;
        mono_bblock_insert_before_ins (bb, ins, add_ins);
        D.28855 = ins->dreg;
        add_ins->sreg1 = D.28855;
        D.28773 = temp->dreg;
        add_ins->sreg2 = D.28773;
        D.28864 = mono_alloc_ireg (cfg);
        D.28865 = (int) D.28864;
        add_ins->dreg = D.28865;
        D.28866 = add_ins->dreg;
        ins->dreg = D.28866;
        ins->data.op[0].const_val = 0;
      }
      <D.28850>:
      goto <D.25557>;
      <D.25586>:
      <D.25587>:
      <D.25588>:
      <D.25589>:
      D.28765 = cfg->mempool;
      temp = mono_mempool_alloc (D.28765, 56);
      temp->data.op[1].const_val = 0;
      D.28766 = temp->data.op[1].const_val;
      temp->data.op[0].const_val = D.28766;
      temp->prev = 0B;
      D.28767 = temp->prev;
      temp->next = D.28767;
      temp->opcode = 362;
      temp->flags = 0;
      temp->type = 0;
      temp->dreg = -1;
      temp->sreg3 = -1;
      D.28768 = temp->sreg3;
      temp->sreg2 = D.28768;
      D.28769 = temp->sreg2;
      temp->sreg1 = D.28769;
      D.28770 = cfg->ip;
      temp->cil_code = D.28770;
      mono_bblock_insert_before_ins (bb, ins, temp);
      D.28761 = ins->data.op[1].const_val;
      temp->data.op[0].const_val = D.28761;
      D.28867 = mono_alloc_ireg (cfg);
      D.28868 = (int) D.28867;
      temp->dreg = D.28868;
      D.28773 = temp->dreg;
      ins->sreg1 = D.28773;
      D.28759 = ins->opcode;
      D.28760 = (int) D.28759;
      D.28869 = map_to_reg_reg_op (D.28760);
      D.28870 = (short unsigned int) D.28869;
      ins->opcode = D.28870;
      last_ins = temp;
      goto loop_start;
      <D.25590>:
      {
        gboolean swap;
        int reg;

        swap = 0;
        D.28789 = ins->next;
        if (D.28789 == 0B) goto <D.28871>; else goto <D.28872>;
        <D.28871>:
        ins->opcode = 316;
        ins->dreg = -1;
        ins->sreg3 = -1;
        D.28873 = ins->sreg3;
        ins->sreg2 = D.28873;
        D.28874 = ins->sreg2;
        ins->sreg1 = D.28874;
        goto <D.25557>;
        <D.28872>:
        D.28789 = ins->next;
        D.28875 = D.28789->opcode;
        D.28876 = (int) D.28875;
        switch (D.28876) <default: <D.25598>, case 660: <D.25593>, case 661: <D.25596>, case 665: <D.25595>, case 666: <D.25597>>
        <D.25593>:
        D.28789 = ins->next;
        D.28789->opcode = 662;
        swap = 1;
        goto <D.25594>;
        <D.25595>:
        D.28789 = ins->next;
        D.28789->opcode = 667;
        swap = 1;
        goto <D.25594>;
        <D.25596>:
        D.28789 = ins->next;
        D.28789->opcode = 659;
        swap = 1;
        goto <D.25594>;
        <D.25597>:
        D.28789 = ins->next;
        D.28789->opcode = 664;
        swap = 1;
        goto <D.25594>;
        <D.25598>:
        goto <D.25594>;
        <D.25594>:
        if (swap != 0) goto <D.28877>; else goto <D.28878>;
        <D.28877>:
        reg = ins->sreg1;
        D.28874 = ins->sreg2;
        ins->sreg1 = D.28874;
        ins->sreg2 = reg;
        <D.28878>:
        goto <D.25557>;
      }
      <D.28879>:
      <D.25557>:
      last_ins = ins;
      ins = ins->next;
      <D.25600>:
      if (ins != 0B) goto <D.25599>; else goto <D.25601>;
      <D.25601>:
      bb->last_ins = last_ins;
      D.28880 = cfg->next_vreg;
      bb->max_vreg = D.28880;
    }
  finally
    {
      rot_amount = {CLOBBER};
    }
}


map_to_reg_reg_op (int op)
{
  int D.28882;

  switch (op) <default: <D.28883>, case 323: <D.25503>, case 327: <D.25504>, case 374: <D.25521>, case 375: <D.25518>, case 376: <D.25519>, case 377: <D.25520>, case 379: <D.25522>, case 380: <D.25523>, case 381: <D.25524>, case 382: <D.25525>, case 383: <D.25526>, case 384: <D.25527>, case 388: <D.25511>, case 389: <D.25517>, case 390: <D.25514>, case 391: <D.25515>, case 392: <D.25516>, case 393: <D.25512>, case 394: <D.25513>, case 429: <D.25500>, case 430: <D.25501>, case 436: <D.25502>, case 437: <D.25509>, case 438: <D.25510>, case 752: <D.25506>, case 754: <D.25508>, case 756: <D.25505>, case 758: <D.25507>>
  <D.25500>:
  D.28882 = 565;
  return D.28882;
  <D.25501>:
  D.28882 = 566;
  return D.28882;
  <D.25502>:
  D.28882 = 572;
  return D.28882;
  <D.25503>:
  D.28882 = 322;
  return D.28882;
  <D.25504>:
  D.28882 = 326;
  return D.28882;
  <D.25505>:
  D.28882 = 755;
  return D.28882;
  <D.25506>:
  D.28882 = 751;
  return D.28882;
  <D.25507>:
  D.28882 = 757;
  return D.28882;
  <D.25508>:
  D.28882 = 753;
  return D.28882;
  <D.25509>:
  D.28882 = 573;
  return D.28882;
  <D.25510>:
  D.28882 = 574;
  return D.28882;
  <D.25511>:
  D.28882 = 400;
  return D.28882;
  <D.25512>:
  D.28882 = 405;
  return D.28882;
  <D.25513>:
  D.28882 = 406;
  return D.28882;
  <D.25514>:
  D.28882 = 402;
  return D.28882;
  <D.25515>:
  D.28882 = 403;
  return D.28882;
  <D.25516>:
  D.28882 = 404;
  return D.28882;
  <D.25517>:
  D.28882 = 401;
  return D.28882;
  <D.25518>:
  D.28882 = 411;
  return D.28882;
  <D.25519>:
  D.28882 = 412;
  return D.28882;
  <D.25520>:
  D.28882 = 413;
  return D.28882;
  <D.25521>:
  D.28882 = 410;
  return D.28882;
  <D.25522>:
  D.28882 = 415;
  return D.28882;
  <D.25523>:
  D.28882 = 416;
  return D.28882;
  <D.25524>:
  D.28882 = 374;
  return D.28882;
  <D.25525>:
  D.28882 = 375;
  return D.28882;
  <D.25526>:
  D.28882 = 376;
  return D.28882;
  <D.25527>:
  D.28882 = 377;
  return D.28882;
  <D.28883>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 3227);
}


mono_arch_decompose_long_opts (struct MonoCompile * cfg, struct MonoInst * long_ins)
{
  short unsigned int D.28885;
  struct MonoMemPool * D.28888;
  int D.28889;
  struct MonoInst * D.28890;
  int D.28891;
  int D.28892;
  const unsigned char * D.28893;
  int D.28894;
  int D.28895;
  int D.28896;
  int D.28897;
  struct MonoBasicBlock * D.28898;
  struct MonoInst * D.28899;
  int D.28903;
  struct MonoInst * D.28904;
  int D.28905;
  int D.28906;
  int D.28907;
  int D.28908;
  int D.28912;
  int D.28913;
  struct MonoInst * ins;

  D.28885 = long_ins->opcode;
  if (D.28885 == 492) goto <D.28886>; else goto <D.28887>;
  <D.28886>:
  ins = long_ins;
  {
    struct MonoInst * inst;

    D.28888 = cfg->mempool;
    inst = mono_mempool_alloc (D.28888, 56);
    inst->data.op[1].const_val = 0;
    D.28889 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28889;
    inst->prev = 0B;
    D.28890 = inst->prev;
    inst->next = D.28890;
    inst->opcode = 843;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28891 = inst->sreg3;
    inst->sreg2 = D.28891;
    D.28892 = inst->sreg2;
    inst->sreg1 = D.28892;
    D.28893 = cfg->ip;
    inst->cil_code = D.28893;
    D.28894 = ins->dreg;
    D.28895 = D.28894 + 1;
    inst->dreg = D.28895;
    D.28896 = ins->sreg1;
    D.28897 = D.28896 + 1;
    inst->sreg1 = D.28897;
    inst->data.op[1].const_val = 0;
    D.28898 = cfg->cbb;
    D.28899 = D.28898->last_ins;
    if (D.28899 != 0B) goto <D.28900>; else goto <D.28901>;
    <D.28900>:
    D.28898 = cfg->cbb;
    D.28899 = D.28898->last_ins;
    D.28899->next = inst;
    D.28898 = cfg->cbb;
    D.28899 = D.28898->last_ins;
    inst->prev = D.28899;
    D.28898 = cfg->cbb;
    D.28898->last_ins = inst;
    goto <D.28902>;
    <D.28901>:
    D.28898 = cfg->cbb;
    D.28898 = cfg->cbb;
    D.28898->last_ins = inst;
    D.28899 = D.28898->last_ins;
    D.28898->code = D.28899;
    <D.28902>:
  }
  {
    struct MonoInst * inst;

    D.28888 = cfg->mempool;
    inst = mono_mempool_alloc (D.28888, 56);
    inst->data.op[1].const_val = 0;
    D.28903 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.28903;
    inst->prev = 0B;
    D.28904 = inst->prev;
    inst->next = D.28904;
    inst->opcode = 844;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.28905 = inst->sreg3;
    inst->sreg2 = D.28905;
    D.28906 = inst->sreg2;
    inst->sreg1 = D.28906;
    D.28893 = cfg->ip;
    inst->cil_code = D.28893;
    D.28894 = ins->dreg;
    D.28907 = D.28894 + 2;
    inst->dreg = D.28907;
    D.28896 = ins->sreg1;
    D.28908 = D.28896 + 2;
    inst->sreg1 = D.28908;
    inst->data.op[1].const_val = 0;
    D.28898 = cfg->cbb;
    D.28899 = D.28898->last_ins;
    if (D.28899 != 0B) goto <D.28909>; else goto <D.28910>;
    <D.28909>:
    D.28898 = cfg->cbb;
    D.28899 = D.28898->last_ins;
    D.28899->next = inst;
    D.28898 = cfg->cbb;
    D.28899 = D.28898->last_ins;
    inst->prev = D.28899;
    D.28898 = cfg->cbb;
    D.28898->last_ins = inst;
    goto <D.28911>;
    <D.28910>:
    D.28898 = cfg->cbb;
    D.28898 = cfg->cbb;
    D.28898->last_ins = inst;
    D.28899 = D.28898->last_ins;
    D.28898->code = D.28899;
    <D.28911>:
  }
  ins->opcode = 316;
  ins->dreg = -1;
  ins->sreg3 = -1;
  D.28912 = ins->sreg3;
  ins->sreg2 = D.28912;
  D.28913 = ins->sreg2;
  ins->sreg1 = D.28913;
  <D.28887>:
}


arm_patch (guchar * code, const guchar * target)
{
  arm_patch_general (0B, code, target, 0B);
}


arm_patch_general (struct MonoDomain * domain, guchar * code, const guchar * target, struct MonoCodeManager * dyn_code_mp)
{
  unsigned int D.28914;
  int target.126;
  int code.127;
  int D.28919;
  unsigned int D.28920;
  const guchar * D.28923;
  int D.28924;
  int D.28925;
  int thumb_supported.128;
  _Bool D.28927;
  long int D.28928;
  long int D.28929;
  unsigned int D.28932;
  _Bool D.28933;
  long int D.28934;
  long int D.28935;
  int D.28938;
  unsigned int D.28946;
  unsigned int diff.129;
  unsigned int tmask.130;
  unsigned int tbits.131;
  unsigned int D.28950;
  unsigned int D.28954;
  unsigned int D.28955;
  unsigned int D.28958;
  guint32 * D.28961;
  unsigned int D.28962;
  unsigned int D.28963;
  _Bool D.28964;
  long int D.28965;
  long int D.28966;
  guint32 * D.28969;
  unsigned int D.28970;
  unsigned int D.28971;
  _Bool D.28972;
  long int D.28973;
  long int D.28974;
  guint32 * D.28977;
  unsigned int D.28978;
  unsigned int D.28979;
  _Bool D.28980;
  long int D.28981;
  long int D.28982;
  guint32 * D.28985;
  unsigned int target.132;
  guint32 * D.28989;
  unsigned int D.28990;
  _Bool D.28991;
  long int D.28992;
  long int D.28993;
  guint32 * D.28996;
  unsigned int D.28997;
  _Bool D.28998;
  long int D.28999;
  long int D.29000;
  guint32 * D.29003;
  unsigned int D.29004;
  _Bool D.29005;
  long int D.29006;
  long int D.29007;
  guint32 * D.29010;
  unsigned int D.29013;
  _Bool D.29014;
  long int D.29015;
  long int D.29016;
  unsigned int D.29019;
  unsigned int D.29020;
  _Bool D.29021;
  long int D.29022;
  long int D.29023;
  unsigned int D.29026;
  unsigned int D.29027;
  _Bool D.29028;
  long int D.29029;
  long int D.29030;
  unsigned int D.29034;
  unsigned int D.29037;
  guint32 * code32;
  guint32 ins;
  guint32 prim;
  guint32 tval;

  code32 = code;
  ins = *code32;
  D.28914 = ins >> 25;
  prim = D.28914 & 7;
  tval = (guint32) target;
  if (prim == 5) goto <D.28915>; else goto <D.28916>;
  <D.28915>:
  {
    gint diff;
    gint tbits;
    gint tmask;

    target.126 = (int) target;
    code.127 = (int) code;
    D.28919 = target.126 - code.127;
    diff = D.28919 + -8;
    tmask = -1;
    D.28920 = tval & 1;
    if (D.28920 != 0) goto <D.28921>; else goto <D.28922>;
    <D.28921>:
    D.28923 = target + 4294967295;
    D.28924 = (int) D.28923;
    code.127 = (int) code;
    D.28925 = D.28924 - code.127;
    diff = D.28925 + -8;
    thumb_supported.128 = thumb_supported;
    D.28927 = thumb_supported.128 == 0;
    D.28928 = (long int) D.28927;
    D.28929 = __builtin_expect (D.28928, 0);
    if (D.28929 != 0) goto <D.28930>; else goto <D.28931>;
    <D.28930>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3671, "thumb_supported");
    <D.28931>:
    tbits = -268435456;
    D.28932 = ins & 16777216;
    D.28933 = D.28932 == 0;
    D.28934 = (long int) D.28933;
    D.28935 = __builtin_expect (D.28934, 0);
    if (D.28935 != 0) goto <D.28936>; else goto <D.28937>;
    <D.28936>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3673, "(ins & (1 << 24))");
    <D.28937>:
    D.28938 = diff & 2;
    if (D.28938 != 0) goto <D.28939>; else goto <D.28940>;
    <D.28939>:
    tbits = tbits | 16777216;
    <D.28940>:
    tmask = -16777217;
    goto <D.28941>;
    <D.28922>:
    tbits = 0;
    <D.28941>:
    if (diff >= 0) goto <D.28942>; else goto <D.28943>;
    <D.28942>:
    if (diff <= 33554431) goto <D.28944>; else goto <D.28945>;
    <D.28944>:
    diff = diff >> 2;
    D.28946 = ins & 4278190080;
    diff.129 = (unsigned int) diff;
    ins = D.28946 | diff.129;
    tmask.130 = (unsigned int) tmask;
    ins = ins & tmask.130;
    tbits.131 = (unsigned int) tbits;
    D.28950 = ins | tbits.131;
    *code32 = D.28950;
    return;
    <D.28945>:
    goto <D.28951>;
    <D.28943>:
    if (diff >= -33554432) goto <D.28952>; else goto <D.28953>;
    <D.28952>:
    diff = diff >> 2;
    D.28946 = ins & 4278190080;
    diff.129 = (unsigned int) diff;
    D.28954 = diff.129 & 16777215;
    ins = D.28946 | D.28954;
    tmask.130 = (unsigned int) tmask;
    ins = ins & tmask.130;
    tbits.131 = (unsigned int) tbits;
    D.28950 = ins | tbits.131;
    *code32 = D.28950;
    return;
    <D.28953>:
    <D.28951>:
    handle_thunk (domain, 1, code, target, dyn_code_mp);
    return;
  }
  <D.28916>:
  D.28955 = ins & 268435440;
  if (D.28955 == 19922704) goto <D.28956>; else goto <D.28957>;
  <D.28956>:
  {
    guint32 ccode[4];
    guint8 * emit;

    try
      {
        emit = &ccode;
        {
          arminstr_t * __ainstrp;

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

          __ainstrp = emit;
          *__ainstrp = 3925868544;
          emit = __ainstrp + 4;
        }
        {
          arminstr_t * __ainstrp;

          __ainstrp = emit;
          *__ainstrp = 3785416719;
          emit = __ainstrp + 4;
        }
        {
          arminstr_t * __ainstrp;

          __ainstrp = emit;
          *__ainstrp = 3778019100;
          emit = __ainstrp + 4;
        }
        D.28958 = ccode[3];
        if (D.28958 == ins) goto <D.28959>; else goto <D.28960>;
        <D.28959>:
        D.28961 = code32 + 4294967280;
        D.28962 = *D.28961;
        D.28963 = ccode[0];
        D.28964 = D.28962 != D.28963;
        D.28965 = (long int) D.28964;
        D.28966 = __builtin_expect (D.28965, 0);
        if (D.28966 != 0) goto <D.28967>; else goto <D.28968>;
        <D.28967>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3753, "code32 [-4] == ccode [0]");
        <D.28968>:
        D.28969 = code32 + 4294967284;
        D.28970 = *D.28969;
        D.28971 = ccode[1];
        D.28972 = D.28970 != D.28971;
        D.28973 = (long int) D.28972;
        D.28974 = __builtin_expect (D.28973, 0);
        if (D.28974 != 0) goto <D.28975>; else goto <D.28976>;
        <D.28975>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3754, "code32 [-3] == ccode [1]");
        <D.28976>:
        D.28977 = code32 + 4294967292;
        D.28978 = *D.28977;
        D.28979 = ccode[2];
        D.28980 = D.28978 != D.28979;
        D.28981 = (long int) D.28980;
        D.28982 = __builtin_expect (D.28981, 0);
        if (D.28982 != 0) goto <D.28983>; else goto <D.28984>;
        <D.28983>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3755, "code32 [-1] == ccode [2]");
        <D.28984>:
        D.28985 = code32 + 4294967288;
        target.132 = (unsigned int) target;
        *D.28985 = target.132;
        return;
        <D.28960>:
        D.28963 = ccode[0];
        if (D.28963 == ins) goto <D.28987>; else goto <D.28988>;
        <D.28987>:
        D.28989 = code32 + 4;
        D.28990 = *D.28989;
        D.28971 = ccode[1];
        D.28991 = D.28990 != D.28971;
        D.28992 = (long int) D.28991;
        D.28993 = __builtin_expect (D.28992, 0);
        if (D.28993 != 0) goto <D.28994>; else goto <D.28995>;
        <D.28994>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3761, "code32 [1] == ccode [1]");
        <D.28995>:
        D.28996 = code32 + 12;
        D.28997 = *D.28996;
        D.28979 = ccode[2];
        D.28998 = D.28997 != D.28979;
        D.28999 = (long int) D.28998;
        D.29000 = __builtin_expect (D.28999, 0);
        if (D.29000 != 0) goto <D.29001>; else goto <D.29002>;
        <D.29001>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3762, "code32 [3] == ccode [2]");
        <D.29002>:
        D.29003 = code32 + 16;
        D.29004 = *D.29003;
        D.28958 = ccode[3];
        D.29005 = D.29004 != D.28958;
        D.29006 = (long int) D.29005;
        D.29007 = __builtin_expect (D.29006, 0);
        if (D.29007 != 0) goto <D.29008>; else goto <D.29009>;
        <D.29008>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3763, "code32 [4] == ccode [3]");
        <D.29009>:
        D.29010 = code32 + 8;
        target.132 = (unsigned int) target;
        *D.29010 = target.132;
        return;
        <D.28988>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 3767);
      }
    finally
      {
        ccode = {CLOBBER};
      }
  }
  <D.28957>:
  D.28955 = ins & 268435440;
  if (D.28955 == 19922736) goto <D.29011>; else goto <D.29012>;
  <D.29011>:
  {
    guint32 ccode[4];
    guint8 * emit;

    try
      {
        emit = &ccode;
        {
          arminstr_t * __ainstrp;

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

          __ainstrp = emit;
          *__ainstrp = 3925868544;
          emit = __ainstrp + 4;
        }
        {
          arminstr_t * __ainstrp;

          __ainstrp = emit;
          *__ainstrp = 3778019132;
          emit = __ainstrp + 4;
        }
        D.28969 = code32 + 4294967284;
        D.28970 = *D.28969;
        D.29013 = ccode[0];
        D.29014 = D.28970 != D.29013;
        D.29015 = (long int) D.29014;
        D.29016 = __builtin_expect (D.29015, 0);
        if (D.29016 != 0) goto <D.29017>; else goto <D.29018>;
        <D.29017>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3781, "code32 [-3] == ccode [0]");
        <D.29018>:
        D.28985 = code32 + 4294967288;
        D.29019 = *D.28985;
        D.29020 = ccode[1];
        D.29021 = D.29019 != D.29020;
        D.29022 = (long int) D.29021;
        D.29023 = __builtin_expect (D.29022, 0);
        if (D.29023 != 0) goto <D.29024>; else goto <D.29025>;
        <D.29024>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3782, "code32 [-2] == ccode [1]");
        <D.29025>:
        D.29026 = *code32;
        D.29027 = ccode[2];
        D.29028 = D.29026 != D.29027;
        D.29029 = (long int) D.29028;
        D.29030 = __builtin_expect (D.29029, 0);
        if (D.29030 != 0) goto <D.29031>; else goto <D.29032>;
        <D.29031>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3783, "code32 [0] == ccode [2]");
        <D.29032>:
        D.28977 = code32 + 4294967292;
        target.132 = (unsigned int) target;
        *D.28977 = target.132;
      }
    finally
      {
        ccode = {CLOBBER};
      }
  }
  goto <D.29033>;
  <D.29012>:
  {
    guint32 ccode[4];
    guint32 * tmp;
    guint8 * emit;

    try
      {
        tmp = &ccode;
        emit = tmp;
        {
          arminstr_t * __ainstrp;

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

          __ainstrp = emit;
          *__ainstrp = 3785416719;
          emit = __ainstrp + 4;
        }
        {
          arminstr_t * __ainstrp;

          __ainstrp = emit;
          *__ainstrp = 3785420812;
          emit = __ainstrp + 4;
        }
        {
          arminstr_t * __ainstrp;

          __ainstrp = emit;
          *__ainstrp = 3778019100;
          emit = __ainstrp + 4;
        }
        D.29034 = ccode[2];
        if (D.29034 == ins) goto <D.29035>; else goto <D.29036>;
        <D.29035>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 3795);
        D.28977 = code32 + 4294967292;
        target.132 = (unsigned int) target;
        *D.28977 = target.132;
        return;
        <D.29036>:
        D.29037 = ccode[0];
        if (D.29037 == ins) goto <D.29038>; else goto <D.29039>;
        <D.29038>:
        D.29010 = code32 + 8;
        target.132 = (unsigned int) target;
        *D.29010 = target.132;
        return;
        <D.29039>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 3804);
      }
    finally
      {
        ccode = {CLOBBER};
      }
  }
  <D.29033>:
}


handle_thunk (struct MonoDomain * domain, int absolute, guchar * code, const guchar * target, struct MonoCodeManager * dyn_code_mp)
{
  int D.29047;
  union mono_mutex_t * D.29050;
  _Bool D.29053;
  long int D.29054;
  long int D.29055;
  _Bool D.29062;
  long int D.29063;
  long int D.29064;
  _Bool D.29071;
  long int D.29072;
  long int D.29073;
  void * D.29076;
  struct MonoJitDynamicMethodInfo * ji.133;
  struct MonoCodeManager * D.29080;
  int D.29082;
  _Bool D.29085;
  long int D.29086;
  long int D.29087;
  _Bool D.29092;
  long int D.29093;
  long int D.29094;
  struct PatchData pdata;

  try
    {
      if (domain == 0B) goto <D.29043>; else goto <D.29044>;
      <D.29043>:
      domain = mono_domain_get ();
      <D.29044>:
      pdata.code = code;
      pdata.target = target;
      pdata.absolute = absolute;
      pdata.found = 0;
      if (dyn_code_mp != 0B) goto <D.29045>; else goto <D.29046>;
      <D.29045>:
      mono_code_manager_foreach (dyn_code_mp, search_thunk_slot, &pdata);
      <D.29046>:
      D.29047 = pdata.found;
      if (D.29047 != 1) goto <D.29048>; else goto <D.29049>;
      <D.29048>:
      {
        int ret;

        D.29050 = &domain->lock.mutex;
        ret = pthread_mutex_lock (D.29050);
        if (ret != 0) goto <D.29051>; else goto <D.29052>;
        <D.29051>:
        monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
        <D.29052>:
        D.29053 = ret != 0;
        D.29054 = (long int) D.29053;
        D.29055 = __builtin_expect (D.29054, 0);
        if (D.29055 != 0) goto <D.29056>; else goto <D.29057>;
        <D.29056>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3615, "ret == 0");
        <D.29057>:
      }
      mono_domain_code_foreach (domain, search_thunk_slot, &pdata);
      D.29047 = pdata.found;
      if (D.29047 == 0) goto <D.29058>; else goto <D.29059>;
      <D.29058>:
      pdata.found = 2;
      mono_domain_code_foreach (domain, search_thunk_slot, &pdata);
      <D.29059>:
      {
        int ret;

        D.29050 = &domain->lock.mutex;
        ret = pthread_mutex_unlock (D.29050);
        if (ret != 0) goto <D.29060>; else goto <D.29061>;
        <D.29060>:
        monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
        <D.29061>:
        D.29062 = ret != 0;
        D.29063 = (long int) D.29062;
        D.29064 = __builtin_expect (D.29063, 0);
        if (D.29064 != 0) goto <D.29065>; else goto <D.29066>;
        <D.29065>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3623, "ret == 0");
        <D.29066>:
      }
      <D.29049>:
      D.29047 = pdata.found;
      if (D.29047 != 1) goto <D.29067>; else goto <D.29068>;
      <D.29067>:
      {
        struct GHashTable * hash;
        struct GHashTableIter iter;
        struct MonoJitDynamicMethodInfo * ji;

        try
          {
            pdata.found = 0;
            {
              int ret;

              D.29050 = &domain->lock.mutex;
              ret = pthread_mutex_lock (D.29050);
              if (ret != 0) goto <D.29069>; else goto <D.29070>;
              <D.29069>:
              monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
              <D.29070>:
              D.29071 = ret != 0;
              D.29072 = (long int) D.29071;
              D.29073 = __builtin_expect (D.29072, 0);
              if (D.29073 != 0) goto <D.29074>; else goto <D.29075>;
              <D.29074>:
              monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3637, "ret == 0");
              <D.29075>:
            }
            D.29076 = domain->runtime_info;
            hash = MEM[(struct MonoJitDomainInfo *)D.29076].dynamic_code_hash;
            if (hash != 0B) goto <D.29077>; else goto <D.29078>;
            <D.29077>:
            monoeg_g_hash_table_iter_init (&iter, hash);
            goto <D.25668>;
            <D.25667>:
            ji.133 = ji;
            D.29080 = ji.133->code_mp;
            mono_code_manager_foreach (D.29080, search_thunk_slot, &pdata);
            D.29047 = pdata.found;
            if (D.29047 == 1) goto <D.25666>; else goto <D.29081>;
            <D.29081>:
            <D.25668>:
            D.29082 = monoeg_g_hash_table_iter_next (&iter, 0B, &ji);
            if (D.29082 != 0) goto <D.25667>; else goto <D.25666>;
            <D.25666>:
            <D.29078>:
            {
              int ret;

              D.29050 = &domain->lock.mutex;
              ret = pthread_mutex_unlock (D.29050);
              if (ret != 0) goto <D.29083>; else goto <D.29084>;
              <D.29083>:
              monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
              <D.29084>:
              D.29085 = ret != 0;
              D.29086 = (long int) D.29085;
              D.29087 = __builtin_expect (D.29086, 0);
              if (D.29087 != 0) goto <D.29088>; else goto <D.29089>;
              <D.29088>:
              monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3648, "ret == 0");
              <D.29089>:
            }
          }
        finally
          {
            iter = {CLOBBER};
            ji = {CLOBBER};
          }
      }
      <D.29068>:
      D.29047 = pdata.found;
      if (D.29047 != 1) goto <D.29090>; else goto <D.29091>;
      <D.29090>:
      monoeg_g_print ("thunk failed for %p from %p\n", target, code);
      <D.29091>:
      D.29047 = pdata.found;
      D.29092 = D.29047 != 1;
      D.29093 = (long int) D.29092;
      D.29094 = __builtin_expect (D.29093, 0);
      if (D.29094 != 0) goto <D.29095>; else goto <D.29096>;
      <D.29095>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3652, "pdata.found == 1");
      <D.29096>:
    }
  finally
    {
      pdata = {CLOBBER};
    }
}


search_thunk_slot (void * data, int csize, int bsize, void * user_data)
{
  sizetype bsize.134;
  guchar * D.29098;
  int D.29099;
  int thunks.135;
  int endthunks.136;
  unsigned int thunks.137;
  unsigned int D.29106;
  unsigned int endthunks.138;
  unsigned int D.29109;
  unsigned int difflow.139;
  unsigned int D.29111;
  unsigned int diffhigh.140;
  unsigned int D.29114;
  int D.29115;
  int D.29117;
  sizetype csize.141;
  guchar * D.29121;
  guint32 * D.29122;
  unsigned int D.29123;
  const guchar * D.29124;
  unsigned int D.29125;
  unsigned int D.29128;
  guint32 * D.29131;
  unsigned int D.29132;
  int thumb_supported.142;
  unsigned int D.29141;
  struct PatchData * pdata;
  guchar * code;
  guint32 * thunks;
  guint32 * endthunks;
  int count;
  int difflow;
  int diffhigh;

  pdata = user_data;
  code = data;
  thunks = data;
  bsize.134 = (sizetype) bsize;
  endthunks = code + bsize.134;
  count = 0;
  D.29098 = pdata->code;
  D.29099 = (int) D.29098;
  thunks.135 = (int) thunks;
  difflow = D.29099 - thunks.135;
  D.29098 = pdata->code;
  D.29099 = (int) D.29098;
  endthunks.136 = (int) endthunks;
  diffhigh = D.29099 - endthunks.136;
  thunks.137 = (unsigned int) thunks;
  D.29106 = thunks.137 + 33554432;
  if (D.29106 > 67108863) goto <D.29104>; else goto <D.29107>;
  <D.29107>:
  endthunks.138 = (unsigned int) endthunks;
  D.29109 = endthunks.138 + 33554432;
  if (D.29109 > 67108863) goto <D.29104>; else goto <D.29103>;
  <D.29104>:
  difflow.139 = (unsigned int) difflow;
  D.29111 = difflow.139 + 33554432;
  if (D.29111 > 67108863) goto <D.29102>; else goto <D.29112>;
  <D.29112>:
  diffhigh.140 = (unsigned int) diffhigh;
  D.29114 = diffhigh.140 + 33554432;
  if (D.29114 > 67108863) goto <D.29102>; else goto <D.29103>;
  <D.29102>:
  D.29115 = 0;
  return D.29115;
  <D.29103>:
  D.29117 = pdata->found;
  if (D.29117 == 2) goto <D.29116>; else goto <D.29118>;
  <D.29118>:
  D.29098 = pdata->code;
  if (D.29098 >= code) goto <D.29119>; else goto <D.25651>;
  <D.29119>:
  D.29098 = pdata->code;
  csize.141 = (sizetype) csize;
  D.29121 = code + csize.141;
  if (D.29098 <= D.29121) goto <D.29116>; else goto <D.25651>;
  <D.29116>:
  goto <D.25650>;
  <D.25649>:
  D.29122 = thunks + 8;
  D.29123 = *D.29122;
  D.29124 = pdata->target;
  D.29125 = (unsigned int) D.29124;
  if (D.29123 == D.29125) goto <D.29126>; else goto <D.29127>;
  <D.29126>:
  D.29098 = pdata->code;
  arm_patch (D.29098, thunks);
  D.29098 = pdata->code;
  mono_arch_flush_icache (D.29098, 4);
  pdata->found = 1;
  D.29115 = 1;
  return D.29115;
  <D.29127>:
  D.29128 = *thunks;
  if (D.29128 == 0) goto <D.29129>; else goto <D.29130>;
  <D.29129>:
  D.29131 = thunks + 4;
  D.29132 = *D.29131;
  if (D.29132 == 0) goto <D.29133>; else goto <D.29134>;
  <D.29133>:
  D.29122 = thunks + 8;
  D.29123 = *D.29122;
  if (D.29123 == 0) goto <D.29135>; else goto <D.29136>;
  <D.29135>:
  code = thunks;
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3852451840;
    code = __ainstrp + 4;
  }
  thumb_supported.142 = thumb_supported;
  if (thumb_supported.142 != 0) goto <D.29138>; else goto <D.29139>;
  <D.29138>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3778019100;
    code = __ainstrp + 4;
  }
  goto <D.29140>;
  <D.29139>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785420812;
    code = __ainstrp + 4;
  }
  <D.29140>:
  D.29122 = thunks + 8;
  D.29124 = pdata->target;
  D.29141 = (unsigned int) D.29124;
  *D.29122 = D.29141;
  mono_arch_flush_icache (thunks, 12);
  D.29098 = pdata->code;
  arm_patch (D.29098, thunks);
  D.29098 = pdata->code;
  mono_arch_flush_icache (D.29098, 4);
  pdata->found = 1;
  D.29115 = 1;
  return D.29115;
  <D.29136>:
  <D.29134>:
  <D.29130>:
  thunks = thunks + 12;
  count = count + 1;
  <D.25650>:
  if (thunks < endthunks) goto <D.25649>; else goto <D.25651>;
  <D.25651>:
  D.29115 = 0;
  return D.29115;
}


mono_arm_is_rotated_imm8 (guint32 val, gint * rot_amount)
{
  unsigned int D.29143;
  gint iftmp.143;
  unsigned int D.29149;
  int D.29151;
  guint32 res;
  guint32 i;

  i = 0;
  goto <D.25713>;
  <D.25712>:
  res = val r>> i;
  D.29143 = res & 4294967040;
  if (D.29143 != 0) goto <D.29144>; else goto <D.29145>;
  <D.29144>:
  // predicted unlikely by continue predictor.
  goto <D.25711>;
  <D.29145>:
  if (i != 0) goto <D.29147>; else goto <D.29148>;
  <D.29147>:
  D.29149 = 32 - i;
  iftmp.143 = (gint) D.29149;
  goto <D.29150>;
  <D.29148>:
  iftmp.143 = 0;
  <D.29150>:
  *rot_amount = iftmp.143;
  D.29151 = (int) res;
  return D.29151;
  <D.25711>:
  i = i + 2;
  <D.25713>:
  if (i <= 30) goto <D.25712>; else goto <D.25714>;
  <D.25714>:
  D.29151 = -1;
  return D.29151;
}


mono_arm_emit_load_imm (guint8 * code, int dreg, guint32 val)
{
  int D.29155;
  int rot_amount.144;
  int D.29157;
  int D.29158;
  int D.29159;
  int D.29160;
  int D.29161;
  int D.29162;
  int D.29163;
  unsigned int D.29164;
  unsigned int D.29166;
  int D.29169;
  unsigned int D.29170;
  int v7_supported.145;
  unsigned int D.29175;
  unsigned int D.29176;
  unsigned int D.29177;
  unsigned int D.29178;
  unsigned int D.29179;
  unsigned int D.29180;
  unsigned int D.29181;
  unsigned int D.29182;
  unsigned int D.29183;
  unsigned int D.29186;
  unsigned int D.29187;
  unsigned int D.29188;
  unsigned int D.29189;
  unsigned int D.29190;
  unsigned int D.29191;
  guint8 * D.29192;
  unsigned int D.29193;
  unsigned int D.29196;
  unsigned int D.29197;
  unsigned int D.29198;
  unsigned int D.29201;
  unsigned int D.29202;
  unsigned int D.29203;
  int D.29204;
  unsigned int D.29205;
  unsigned int D.29206;
  unsigned int D.29207;
  unsigned int D.29208;
  unsigned int D.29211;
  unsigned int D.29212;
  unsigned int D.29213;
  unsigned int D.29214;
  unsigned int D.29215;
  unsigned int D.29216;
  unsigned int D.29219;
  unsigned int D.29220;
  unsigned int D.29221;
  unsigned int D.29222;
  unsigned int D.29226;
  unsigned int D.29234;
  int imm8;
  int rot_amount;

  try
    {
      imm8 = mono_arm_is_rotated_imm8 (val, &rot_amount);
      if (imm8 >= 0) goto <D.29153>; else goto <D.29154>;
      <D.29153>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29155 = imm8 & 255;
        rot_amount.144 = rot_amount;
        D.29157 = rot_amount.144 >> 1;
        D.29158 = D.29157 & 15;
        D.29159 = D.29158 << 8;
        D.29160 = D.29155 | D.29159;
        D.29161 = dreg << 12;
        D.29162 = D.29160 | D.29161;
        D.29163 = D.29162 | -476053504;
        D.29164 = (unsigned int) D.29163;
        *__ainstrp = D.29164;
        code = __ainstrp + 4;
      }
      goto <D.29165>;
      <D.29154>:
      D.29166 = ~val;
      imm8 = mono_arm_is_rotated_imm8 (D.29166, &rot_amount);
      if (imm8 >= 0) goto <D.29167>; else goto <D.29168>;
      <D.29167>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29155 = imm8 & 255;
        rot_amount.144 = rot_amount;
        D.29157 = rot_amount.144 >> 1;
        D.29158 = D.29157 & 15;
        D.29159 = D.29158 << 8;
        D.29160 = D.29155 | D.29159;
        D.29161 = dreg << 12;
        D.29162 = D.29160 | D.29161;
        D.29169 = D.29162 | -471859200;
        D.29170 = (unsigned int) D.29169;
        *__ainstrp = D.29170;
        code = __ainstrp + 4;
      }
      goto <D.29171>;
      <D.29168>:
      v7_supported.145 = v7_supported;
      if (v7_supported.145 != 0) goto <D.29173>; else goto <D.29174>;
      <D.29173>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29175 = val & 65535;
        D.29176 = D.29175 >> 12;
        D.29177 = D.29176 << 16;
        D.29161 = dreg << 12;
        D.29178 = (unsigned int) D.29161;
        D.29179 = D.29177 | D.29178;
        D.29180 = val & 4095;
        D.29181 = D.29179 | D.29180;
        D.29182 = D.29181 | 3808428032;
        *__ainstrp = D.29182;
        code = __ainstrp + 4;
      }
      D.29183 = val >> 16;
      if (D.29183 != 0) goto <D.29184>; else goto <D.29185>;
      <D.29184>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29186 = val >> 28;
        D.29187 = D.29186 << 16;
        D.29161 = dreg << 12;
        D.29178 = (unsigned int) D.29161;
        D.29188 = D.29187 | D.29178;
        D.29183 = val >> 16;
        D.29189 = D.29183 & 4095;
        D.29190 = D.29188 | D.29189;
        D.29191 = D.29190 | 3812622336;
        *__ainstrp = D.29191;
        code = __ainstrp + 4;
      }
      <D.29185>:
      D.29192 = code;
      return D.29192;
      <D.29174>:
      D.29193 = val & 255;
      if (D.29193 != 0) goto <D.29194>; else goto <D.29195>;
      <D.29194>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29193 = val & 255;
        D.29161 = dreg << 12;
        D.29178 = (unsigned int) D.29161;
        D.29196 = D.29193 | D.29178;
        D.29197 = D.29196 | 3818913792;
        *__ainstrp = D.29197;
        code = __ainstrp + 4;
      }
      D.29198 = val & 65280;
      if (D.29198 != 0) goto <D.29199>; else goto <D.29200>;
      <D.29199>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29198 = val & 65280;
        D.29201 = D.29198 >> 8;
        D.29202 = D.29201 & 255;
        D.29161 = dreg << 12;
        D.29178 = (unsigned int) D.29161;
        D.29203 = D.29202 | D.29178;
        D.29204 = dreg << 16;
        D.29205 = (unsigned int) D.29204;
        D.29206 = D.29203 | D.29205;
        D.29207 = D.29206 | 3800042496;
        *__ainstrp = D.29207;
        code = __ainstrp + 4;
      }
      <D.29200>:
      D.29208 = val & 16711680;
      if (D.29208 != 0) goto <D.29209>; else goto <D.29210>;
      <D.29209>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29208 = val & 16711680;
        D.29211 = D.29208 >> 16;
        D.29212 = D.29211 & 255;
        D.29161 = dreg << 12;
        D.29178 = (unsigned int) D.29161;
        D.29213 = D.29212 | D.29178;
        D.29204 = dreg << 16;
        D.29205 = (unsigned int) D.29204;
        D.29214 = D.29213 | D.29205;
        D.29215 = D.29214 | 3800041472;
        *__ainstrp = D.29215;
        code = __ainstrp + 4;
      }
      <D.29210>:
      D.29216 = val & 4278190080;
      if (D.29216 != 0) goto <D.29217>; else goto <D.29218>;
      <D.29217>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29219 = val >> 24;
        D.29161 = dreg << 12;
        D.29178 = (unsigned int) D.29161;
        D.29220 = D.29219 | D.29178;
        D.29204 = dreg << 16;
        D.29205 = (unsigned int) D.29204;
        D.29221 = D.29220 | D.29205;
        D.29222 = D.29221 | 3800040448;
        *__ainstrp = D.29222;
        code = __ainstrp + 4;
      }
      <D.29218>:
      goto <D.29223>;
      <D.29195>:
      D.29198 = val & 65280;
      if (D.29198 != 0) goto <D.29224>; else goto <D.29225>;
      <D.29224>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29198 = val & 65280;
        D.29201 = D.29198 >> 8;
        D.29202 = D.29201 & 255;
        D.29161 = dreg << 12;
        D.29178 = (unsigned int) D.29161;
        D.29203 = D.29202 | D.29178;
        D.29226 = D.29203 | 3818916864;
        *__ainstrp = D.29226;
        code = __ainstrp + 4;
      }
      D.29208 = val & 16711680;
      if (D.29208 != 0) goto <D.29227>; else goto <D.29228>;
      <D.29227>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29208 = val & 16711680;
        D.29211 = D.29208 >> 16;
        D.29212 = D.29211 & 255;
        D.29161 = dreg << 12;
        D.29178 = (unsigned int) D.29161;
        D.29213 = D.29212 | D.29178;
        D.29204 = dreg << 16;
        D.29205 = (unsigned int) D.29204;
        D.29214 = D.29213 | D.29205;
        D.29215 = D.29214 | 3800041472;
        *__ainstrp = D.29215;
        code = __ainstrp + 4;
      }
      <D.29228>:
      D.29216 = val & 4278190080;
      if (D.29216 != 0) goto <D.29229>; else goto <D.29230>;
      <D.29229>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29219 = val >> 24;
        D.29161 = dreg << 12;
        D.29178 = (unsigned int) D.29161;
        D.29220 = D.29219 | D.29178;
        D.29204 = dreg << 16;
        D.29205 = (unsigned int) D.29204;
        D.29221 = D.29220 | D.29205;
        D.29222 = D.29221 | 3800040448;
        *__ainstrp = D.29222;
        code = __ainstrp + 4;
      }
      <D.29230>:
      goto <D.29231>;
      <D.29225>:
      D.29208 = val & 16711680;
      if (D.29208 != 0) goto <D.29232>; else goto <D.29233>;
      <D.29232>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29208 = val & 16711680;
        D.29211 = D.29208 >> 16;
        D.29212 = D.29211 & 255;
        D.29161 = dreg << 12;
        D.29178 = (unsigned int) D.29161;
        D.29213 = D.29212 | D.29178;
        D.29234 = D.29213 | 3818915840;
        *__ainstrp = D.29234;
        code = __ainstrp + 4;
      }
      D.29216 = val & 4278190080;
      if (D.29216 != 0) goto <D.29235>; else goto <D.29236>;
      <D.29235>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29219 = val >> 24;
        D.29161 = dreg << 12;
        D.29178 = (unsigned int) D.29161;
        D.29220 = D.29219 | D.29178;
        D.29204 = dreg << 16;
        D.29205 = (unsigned int) D.29204;
        D.29221 = D.29220 | D.29205;
        D.29222 = D.29221 | 3800040448;
        *__ainstrp = D.29222;
        code = __ainstrp + 4;
      }
      <D.29236>:
      <D.29233>:
      <D.29231>:
      <D.29223>:
      <D.29171>:
      <D.29165>:
      D.29192 = code;
      return D.29192;
    }
  finally
    {
      rot_amount = {CLOBBER};
    }
}


mono_arm_thumb_supported ()
{
  gboolean D.29239;

  D.29239 = thumb_supported;
  return D.29239;
}


mono_arch_output_basic_block (struct MonoCompile * cfg, struct MonoBasicBlock * bb)
{
  unsigned char * D.29241;
  unsigned int D.29242;
  unsigned int D.29243;
  int D.29246;
  int D.29247;
  unsigned int D.29248;
  unsigned int D.29249;
  struct MonoMethodDesc * mono_break_at_bb_method.146;
  struct MonoMethod * D.29255;
  int D.29256;
  int mono_break_at_bb_bb_num.147;
  int code.148;
  int D.29263;
  int D.29264;
  unsigned int offset.149;
  short unsigned int D.29266;
  int D.29267;
  int D.29268;
  short unsigned int D.29269;
  sizetype D.29270;
  sizetype D.29271;
  guint8 * D.29272;
  unsigned char D.29273;
  int max_len.150;
  unsigned int D.29275;
  int max_len.151;
  unsigned int max_len.152;
  unsigned int D.29278;
  unsigned int D.29279;
  unsigned int offset.153;
  unsigned int D.29283;
  void * D.29284;
  int v6_supported.154;
  int D.29288;
  int D.29289;
  int D.29290;
  int D.29291;
  int D.29292;
  int D.29293;
  int iftmp.155;
  int D.29298;
  int D.29299;
  unsigned int D.29300;
  int D.29301;
  unsigned int D.29302;
  unsigned int D.29303;
  unsigned int D.29304;
  unsigned int D.29305;
  _Bool D.29306;
  long int D.29307;
  long int D.29308;
  int D.29311;
  int D.29312;
  int D.29313;
  int D.29314;
  int iftmp.156;
  int D.29319;
  int D.29320;
  unsigned int D.29321;
  unsigned int D.29322;
  unsigned int D.29323;
  _Bool D.29324;
  long int D.29325;
  long int D.29326;
  int iftmp.157;
  int D.29332;
  int D.29333;
  int D.29335;
  int iftmp.158;
  int D.29339;
  int D.29341;
  int D.29342;
  int D.29343;
  int D.29344;
  int D.29345;
  int iftmp.159;
  int D.29350;
  int D.29351;
  unsigned int D.29352;
  int iftmp.160;
  int D.29359;
  int D.29360;
  int D.29361;
  int iftmp.161;
  int D.29366;
  int D.29367;
  unsigned int D.29368;
  int D.29371;
  int D.29372;
  int D.29373;
  int D.29374;
  int D.29375;
  int iftmp.162;
  int D.29380;
  int D.29381;
  unsigned int D.29382;
  int iftmp.163;
  int iftmp.164;
  int D.29393;
  int D.29394;
  int D.29395;
  int D.29396;
  int iftmp.165;
  int D.29401;
  int D.29402;
  unsigned int D.29403;
  int iftmp.166;
  int D.29410;
  int D.29411;
  int D.29412;
  int iftmp.167;
  int D.29417;
  int D.29418;
  unsigned int D.29419;
  unsigned int D.29421;
  int D.29422;
  int D.29423;
  int D.29424;
  unsigned int D.29425;
  int D.29426;
  int D.29427;
  int D.29428;
  int D.29429;
  unsigned int D.29430;
  int D.29431;
  int D.29432;
  int D.29433;
  int D.29434;
  int D.29435;
  int D.29436;
  unsigned int D.29437;
  int D.29438;
  unsigned int D.29439;
  int D.29440;
  int D.29441;
  int D.29442;
  int D.29443;
  unsigned int D.29444;
  int D.29445;
  int D.29446;
  int D.29447;
  int D.29448;
  int D.29449;
  unsigned int D.29450;
  int D.29451;
  unsigned int D.29452;
  int D.29453;
  int D.29454;
  int D.29455;
  int D.29456;
  unsigned int D.29457;
  int D.29458;
  int D.29459;
  int D.29460;
  int D.29461;
  unsigned int D.29462;
  int D.29465;
  int D.29466;
  int iftmp.168;
  int D.29471;
  int D.29472;
  unsigned int D.29473;
  int D.29475;
  int D.29476;
  int D.29477;
  unsigned int D.29478;
  int iftmp.169;
  int iftmp.170;
  int D.29489;
  int D.29490;
  int D.29491;
  int D.29492;
  int iftmp.171;
  int D.29497;
  int D.29498;
  unsigned int D.29499;
  int D.29502;
  int iftmp.172;
  int D.29507;
  int D.29508;
  unsigned int D.29509;
  int iftmp.173;
  int iftmp.174;
  int D.29520;
  int D.29521;
  int D.29522;
  int D.29523;
  int iftmp.175;
  int D.29528;
  int D.29529;
  unsigned int D.29530;
  int iftmp.176;
  int iftmp.177;
  int D.29541;
  int D.29542;
  int D.29543;
  int D.29544;
  int iftmp.178;
  int D.29549;
  int D.29550;
  unsigned int D.29551;
  int D.29552;
  int D.29553;
  int D.29554;
  unsigned int D.29555;
  int D.29556;
  int D.29557;
  int D.29558;
  unsigned int D.29559;
  int D.29560;
  int D.29561;
  int D.29562;
  unsigned int D.29563;
  int D.29564;
  int D.29565;
  int D.29566;
  unsigned int D.29567;
  int D.29568;
  int D.29569;
  int D.29570;
  unsigned int D.29571;
  int D.29572;
  int D.29573;
  int D.29574;
  unsigned int D.29575;
  int D.29576;
  int D.29577;
  unsigned int D.29578;
  _Bool D.29579;
  long int D.29580;
  long int D.29581;
  int D.29584;
  int rot_amount.179;
  int D.29586;
  int D.29587;
  int D.29588;
  int D.29589;
  int D.29590;
  int D.29591;
  unsigned int D.29592;
  unsigned char D.29593;
  unsigned char D.29594;
  unsigned char D.29597;
  unsigned char D.29598;
  _Bool D.29599;
  long int D.29600;
  long int D.29601;
  _Bool D.29606;
  long int D.29607;
  long int D.29608;
  short unsigned int D.29611;
  _Bool D.29612;
  long int D.29613;
  long int D.29614;
  int D.29617;
  unsigned int D.29618;
  unsigned int D.29619;
  _Bool D.29620;
  long int D.29621;
  long int D.29622;
  void * ss_trigger_page.180;
  unsigned int ss_trigger_page.181;
  long long unsigned int D.29629;
  long long unsigned int D.29630;
  _Bool D.29631;
  long int D.29632;
  long int D.29633;
  unsigned char D.29636;
  int D.29637;
  int D.29638;
  _Bool D.29643;
  long int D.29644;
  long int D.29645;
  short unsigned int D.29648;
  _Bool D.29649;
  long int D.29650;
  long int D.29651;
  int D.29654;
  unsigned int D.29655;
  unsigned int D.29656;
  _Bool D.29657;
  long int D.29658;
  long int D.29659;
  int D.29662;
  int D.29663;
  int D.29664;
  int D.29665;
  int D.29666;
  int D.29667;
  int D.29668;
  int iftmp.182;
  int D.29673;
  int D.29674;
  unsigned int D.29675;
  int D.29676;
  int D.29677;
  int D.29678;
  unsigned int D.29679;
  int D.29680;
  unsigned int D.29681;
  int iftmp.183;
  int D.29692;
  int D.29693;
  unsigned int D.29694;
  int D.29695;
  unsigned int D.29696;
  int iftmp.184;
  int D.29710;
  int D.29711;
  unsigned int D.29712;
  int D.29714;
  unsigned int D.29715;
  int ss_trigger_page.185;
  int iftmp.186;
  int D.29729;
  int D.29730;
  unsigned int D.29731;
  int D.29735;
  int D.29736;
  int D.29737;
  int D.29738;
  int D.29739;
  int D.29740;
  int iftmp.187;
  int D.29745;
  int D.29746;
  unsigned int D.29747;
  unsigned int D.29748;
  unsigned int D.29749;
  int val.188;
  _Bool D.29751;
  _Bool D.29752;
  _Bool D.29753;
  guint32 iftmp.189;
  int D.29759;
  unsigned int D.29761;
  unsigned int D.29762;
  unsigned int D.29763;
  unsigned int D.29764;
  guint32 iftmp.190;
  unsigned int D.29769;
  unsigned int D.29770;
  unsigned int D.29772;
  unsigned int D.29773;
  unsigned int D.29774;
  unsigned int D.29775;
  unsigned int D.29776;
  unsigned int D.29779;
  unsigned int D.29780;
  unsigned int D.29781;
  unsigned int D.29782;
  unsigned int D.29783;
  unsigned int D.29784;
  unsigned int D.29787;
  unsigned int D.29788;
  unsigned int D.29789;
  unsigned int D.29790;
  unsigned int D.29791;
  unsigned int D.29792;
  _Bool D.29793;
  long int D.29794;
  long int D.29795;
  int D.29798;
  unsigned int D.29799;
  int D.29801;
  unsigned int D.29802;
  int D.29803;
  unsigned int D.29804;
  int D.29805;
  unsigned int D.29806;
  int D.29809;
  int D.29810;
  int D.29811;
  unsigned int D.29812;
  int D.29815;
  unsigned int D.29816;
  int D.29819;
  unsigned int D.29820;
  int D.29821;
  unsigned int D.29822;
  int D.29823;
  unsigned int D.29824;
  int D.29825;
  unsigned int D.29826;
  int D.29829;
  unsigned int D.29830;
  int D.29833;
  unsigned int D.29834;
  int D.29837;
  unsigned int D.29838;
  int D.29841;
  unsigned int D.29842;
  int D.29845;
  unsigned int D.29846;
  int D.29847;
  unsigned int D.29848;
  int D.29851;
  unsigned int D.29852;
  int v7s_supported.191;
  _Bool D.29854;
  long int D.29855;
  long int D.29856;
  int D.29859;
  int D.29860;
  int D.29861;
  int D.29862;
  int D.29863;
  unsigned int D.29864;
  int D.29867;
  int D.29868;
  int D.29869;
  int D.29870;
  unsigned int D.29871;
  int D.29874;
  int D.29875;
  unsigned int D.29876;
  int D.29877;
  int D.29878;
  int D.29879;
  int D.29880;
  unsigned int D.29881;
  int D.29884;
  int D.29885;
  unsigned int D.29886;
  int D.29887;
  unsigned int D.29888;
  int D.29891;
  unsigned int D.29892;
  int D.29893;
  unsigned int D.29894;
  int D.29897;
  unsigned int D.29898;
  int D.29899;
  int D.29900;
  int D.29901;
  int D.29902;
  unsigned int D.29903;
  int D.29906;
  int D.29907;
  int D.29908;
  int D.29909;
  int D.29910;
  unsigned int D.29911;
  int D.29915;
  int D.29916;
  unsigned int D.29917;
  int D.29918;
  int D.29919;
  int D.29920;
  int D.29921;
  unsigned int D.29922;
  int D.29925;
  int D.29926;
  int D.29927;
  int D.29928;
  unsigned int D.29929;
  int D.29935;
  int D.29936;
  int D.29937;
  int D.29938;
  unsigned int D.29939;
  int D.29943;
  int D.29944;
  int D.29945;
  int D.29946;
  unsigned int D.29947;
  int D.29948;
  unsigned int D.29949;
  int D.29950;
  int D.29951;
  unsigned int D.29952;
  int D.29955;
  int D.29956;
  int D.29957;
  unsigned int D.29958;
  int D.29960;
  int D.29961;
  int D.29962;
  int D.29963;
  unsigned int D.29964;
  int offset.192;
  struct MonoInst * D.29966;
  <unnamed type> D.29967;
  void * D.29968;
  int D.29969;
  unsigned int D.29970;
  int D.29971;
  int D.29972;
  unsigned int D.29973;
  int D.29978;
  unsigned int D.29979;
  int D.29982;
  unsigned int D.29983;
  int D.29986;
  unsigned int D.29987;
  int D.29990;
  int D.29991;
  int D.29992;
  int D.29993;
  int D.29994;
  int D.29995;
  int D.29996;
  int D.29997;
  int D.29998;
  int D.29999;
  int D.30000;
  int D.30001;
  unsigned int D.30002;
  int D.30005;
  int D.30006;
  int D.30007;
  int D.30008;
  int D.30009;
  unsigned int D.30010;
  int D.30011;
  int D.30012;
  int D.30013;
  int D.30014;
  int D.30015;
  int D.30016;
  unsigned int D.30017;
  unsigned char D.30018;
  unsigned char D.30019;
  _Bool D.30020;
  long int D.30021;
  long int D.30022;
  unsigned int D.30025;
  int D.30026;
  unsigned int D.30027;
  int D.30028;
  int iphone_abi.193;
  unsigned int D.30032;
  unsigned int D.30035;
  unsigned int D.30037;
  int D.30041;
  unsigned int D.30042;
  int D.30043;
  _Bool D.30044;
  long int D.30045;
  long int D.30046;
  int D.30049;
  unsigned int D.30050;
  unsigned int D.30051;
  unsigned int D.30052;
  guint32 iftmp.194;
  unsigned int D.30057;
  unsigned int D.30058;
  int D.30059;
  int D.30060;
  int D.30061;
  int iftmp.195;
  int D.30066;
  int D.30067;
  unsigned int D.30068;
  struct MonoMethod * D.30073;
  const void * D.30075;
  unsigned char D.30076;
  _Bool D.30079;
  long int D.30080;
  long int D.30081;
  unsigned char D.30088;
  unsigned char D.30089;
  struct MonoClass * D.30091;
  unsigned int D.30092;
  unsigned int D.30093;
  int D.30101;
  unsigned int D.30102;
  int D.30104;
  int D.30105;
  int D.30106;
  int iftmp.196;
  int D.30111;
  int D.30112;
  unsigned int D.30113;
  unsigned int D.30119;
  int D.30120;
  int D.30121;
  int D.30122;
  unsigned int D.30123;
  int D.30124;
  int D.30125;
  unsigned int D.30126;
  int D.30129;
  int D.30130;
  int D.30131;
  int D.30132;
  unsigned int D.30133;
  int D.30134;
  unsigned int D.30135;
  int D.30138;
  unsigned int D.30139;
  unsigned int D.30140;
  unsigned int D.30141;
  unsigned int D.30142;
  unsigned int D.30143;
  guchar * D.30144;
  int D.30145;
  unsigned int D.30146;
  short unsigned int D.30147;
  _Bool D.30148;
  long int D.30149;
  long int D.30150;
  int D.30153;
  unsigned int D.30154;
  unsigned int D.30155;
  _Bool D.30156;
  long int D.30157;
  long int D.30158;
  int D.30161;
  unsigned int D.30162;
  int D.30163;
  unsigned int D.30164;
  int iftmp.197;
  int D.30169;
  int D.30170;
  int D.30171;
  int D.30172;
  int D.30173;
  int iftmp.198;
  int D.30178;
  int D.30179;
  unsigned int D.30180;
  int D.30181;
  unsigned int D.30182;
  unsigned int D.30183;
  unsigned int iftmp.199;
  int D.30185;
  unsigned int D.30189;
  unsigned int D.30190;
  int iftmp.200;
  unsigned int i.201;
  unsigned int D.30193;
  int D.30194;
  int D.30198;
  int D.30199;
  int iftmp.202;
  int D.30204;
  int D.30205;
  unsigned int D.30206;
  int D.30207;
  unsigned int D.30208;
  unsigned int D.30209;
  unsigned int iftmp.203;
  unsigned int D.30214;
  unsigned int D.30215;
  int D.30216;
  int D.30217;
  int D.30218;
  int D.30219;
  int iftmp.204;
  int D.30224;
  int D.30225;
  unsigned int D.30226;
  int D.30227;
  int D.30228;
  int iftmp.205;
  int D.30233;
  int D.30234;
  unsigned int D.30235;
  int D.30236;
  int D.30237;
  int iftmp.206;
  int D.30242;
  int D.30243;
  unsigned int D.30244;
  unsigned int D.30249;
  int D.30250;
  int D.30255;
  int rot_amount.207;
  int D.30257;
  int D.30258;
  int D.30259;
  int D.30260;
  int D.30261;
  unsigned int D.30262;
  int D.30264;
  unsigned int D.30265;
  unsigned int D.30266;
  int iftmp.208;
  int D.30273;
  int D.30274;
  int D.30275;
  int D.30276;
  int D.30277;
  int iftmp.209;
  int D.30282;
  int D.30283;
  unsigned int D.30284;
  unsigned int D.30286;
  int D.30287;
  unsigned int D.30288;
  int D.30293;
  int rot_amount.210;
  int D.30295;
  int D.30296;
  int D.30297;
  int D.30298;
  int D.30299;
  unsigned int D.30300;
  int D.30304;
  unsigned int D.30305;
  unsigned int D.30306;
  int D.30309;
  int D.30310;
  int D.30311;
  int D.30312;
  int D.30313;
  int D.30314;
  int iftmp.211;
  int D.30319;
  int D.30320;
  unsigned int D.30321;
  _Bool D.30323;
  long int D.30324;
  long int D.30325;
  unsigned int D.30328;
  int D.30329;
  unsigned int D.30330;
  int D.30335;
  int rot_amount.212;
  int D.30337;
  int D.30338;
  int D.30339;
  int D.30340;
  int D.30341;
  unsigned int D.30342;
  int D.30344;
  unsigned int D.30345;
  unsigned int D.30346;
  int D.30349;
  int D.30350;
  int D.30351;
  int D.30352;
  int D.30353;
  int D.30354;
  int iftmp.213;
  int D.30359;
  int D.30360;
  unsigned int D.30361;
  _Bool D.30363;
  long int D.30364;
  long int D.30365;
  unsigned int D.30368;
  int D.30369;
  unsigned int D.30370;
  struct MonoBasicBlock * D.30371;
  struct MonoExceptionClause * D.30372;
  int D.30373;
  unsigned int D.30374;
  struct MonoClass * D.30375;
  int D.30376;
  int D.30377;
  int max_len.214;
  unsigned int D.30379;
  unsigned int D.30380;
  unsigned int D.30383;
  void * D.30384;
  int D.30385;
  unsigned int D.30386;
  sizetype D.30387;
  int D.30388;
  unsigned int D.30389;
  int D.30390;
  unsigned int D.30391;
  int D.30392;
  unsigned int D.30393;
  int D.30394;
  unsigned int D.30395;
  int D.30396;
  unsigned int D.30397;
  int D.30398;
  unsigned int D.30399;
  int D.30400;
  unsigned int D.30401;
  void * D.30402;
  int D.30403;
  unsigned char D.30404;
  int D.30405;
  int D.30406;
  int D.30407;
  unsigned int D.30408;
  int D.30409;
  unsigned char D.30410;
  int D.30411;
  int D.30412;
  int D.30413;
  unsigned int D.30414;
  struct MonoBasicBlock * * D.30417;
  struct MonoBasicBlock * D.30418;
  int D.30419;
  int D.30420;
  int D.30421;
  int D.30422;
  int D.30423;
  unsigned char D.30424;
  int D.30425;
  int D.30426;
  int D.30427;
  unsigned int D.30428;
  int D.30430;
  unsigned int D.30431;
  int D.30434;
  int D.30435;
  int D.30436;
  unsigned int D.30437;
  unsigned int D.30438;
  unsigned int D.30439;
  unsigned int D.30441;
  int D.30442;
  unsigned int D.30443;
  int D.30446;
  int D.30447;
  int D.30448;
  unsigned int D.30449;
  int D.30451;
  unsigned int D.30452;
  unsigned int D.30453;
  int D.30456;
  unsigned int D.30457;
  int D.30458;
  int D.30459;
  int D.30460;
  int D.30461;
  int D.30462;
  unsigned int D.30463;
  gint32 iftmp.215;
  int D.30468;
  int D.30470;
  int D.30471;
  int D.30472;
  int D.30473;
  int iftmp.216;
  int D.30478;
  int D.30479;
  unsigned int D.30480;
  int D.30483;
  unsigned int D.30484;
  gint32 iftmp.217;
  int D.30490;
  int D.30491;
  int D.30492;
  int D.30493;
  int iftmp.218;
  int D.30498;
  int D.30499;
  unsigned int D.30500;
  _Bool D.30501;
  long int D.30502;
  long int D.30503;
  int vfp_scratch1.219;
  int D.30507;
  int D.30508;
  int D.30509;
  int D.30510;
  int D.30511;
  int D.30512;
  int D.30513;
  int D.30514;
  int D.30515;
  unsigned int D.30516;
  int iftmp.220;
  int D.30521;
  int D.30522;
  int D.30523;
  int iftmp.221;
  int D.30528;
  int D.30529;
  unsigned int D.30530;
  int iftmp.222;
  int D.30537;
  int D.30538;
  int D.30539;
  int D.30540;
  int iftmp.223;
  int D.30545;
  int D.30546;
  unsigned int D.30547;
  int D.30548;
  int D.30549;
  int D.30550;
  int D.30551;
  unsigned int D.30552;
  int D.30553;
  int D.30554;
  int D.30555;
  int D.30556;
  int D.30557;
  int D.30558;
  int D.30559;
  unsigned int D.30560;
  int D.30561;
  int D.30562;
  int D.30563;
  int D.30564;
  int D.30565;
  unsigned int D.30566;
  int D.30567;
  int D.30568;
  int D.30569;
  int D.30570;
  int D.30571;
  unsigned int D.30572;
  struct MonoMethodSignature * D.30573;
  struct MonoType * D.30574;
  unsigned char D.30575;
  int D.30578;
  int D.30579;
  int D.30580;
  unsigned int D.30581;
  int D.30587;
  int D.30588;
  int D.30589;
  unsigned int D.30590;
  int D.30592;
  unsigned int D.30593;
  int D.30594;
  unsigned int D.30595;
  int D.30596;
  unsigned int D.30597;
  int D.30598;
  unsigned int D.30599;
  int D.30602;
  int D.30603;
  int D.30604;
  int D.30605;
  int D.30606;
  int D.30607;
  int D.30608;
  int D.30609;
  int D.30610;
  int D.30611;
  int D.30612;
  int D.30613;
  int D.30614;
  unsigned int D.30615;
  int D.30616;
  int D.30617;
  int D.30618;
  int D.30619;
  int D.30620;
  int D.30621;
  int D.30622;
  unsigned int D.30623;
  int D.30624;
  int D.30625;
  int D.30626;
  int D.30627;
  int D.30628;
  int D.30629;
  int D.30630;
  unsigned int D.30631;
  int D.30632;
  int D.30633;
  int D.30634;
  int D.30635;
  int D.30636;
  int D.30637;
  int D.30638;
  unsigned int D.30639;
  int D.30640;
  int D.30641;
  int D.30642;
  int D.30643;
  int D.30644;
  unsigned int D.30645;
  int D.30648;
  int D.30649;
  int D.30650;
  int D.30651;
  int D.30652;
  unsigned int D.30653;
  int D.30658;
  unsigned int D.30659;
  int D.30662;
  unsigned int D.30663;
  int D.30666;
  int D.30667;
  int D.30668;
  int D.30669;
  int D.30670;
  int D.30671;
  int D.30672;
  unsigned int D.30673;
  unsigned char D.30678;
  int D.30679;
  int D.30680;
  int D.30681;
  unsigned int D.30682;
  int D.30684;
  unsigned int D.30685;
  unsigned char D.30688;
  int D.30689;
  int D.30690;
  int D.30691;
  unsigned int D.30692;
  int D.30694;
  unsigned int D.30695;
  int D.30698;
  unsigned int D.30699;
  int D.30703;
  unsigned int D.30704;
  int D.30713;
  unsigned int D.30714;
  unsigned int D.30719;
  int D.30723;
  unsigned int D.30724;
  int vfp_scratch2.224;
  int D.30735;
  int D.30736;
  int D.30737;
  int D.30738;
  int D.30739;
  int D.30740;
  int D.30741;
  int D.30742;
  int D.30743;
  unsigned int D.30744;
  int D.30745;
  int D.30746;
  int D.30747;
  unsigned int D.30748;
  int D.30749;
  int D.30750;
  int D.30751;
  int D.30752;
  int D.30753;
  unsigned int D.30754;
  int D.30755;
  int D.30756;
  int D.30757;
  unsigned int D.30758;
  struct MonoMemPool * D.30759;
  struct GSList * D.30760;
  struct GSList * D.30761;
  const char * D.30762;
  unsigned int D.30763;
  unsigned int D.30764;
  unsigned int D.30767;
  const char * D.30770;
  struct MonoInst * ins;
  struct MonoCallInst * call;
  guint offset;
  guint8 * code;
  struct MonoInst * last_ins;
  guint last_offset;
  int max_len;
  int cpos;
  int imm8;
  int rot_amount;
  static const char __FUNCTION__[29] = "mono_arch_output_basic_block";

  try
    {
      D.29241 = cfg->native_code;
      D.29242 = cfg->code_len;
      code = D.29241 + D.29242;
      last_ins = 0B;
      last_offset = 0;
      D.29243 = cfg->verbose_level;
      if (D.29243 > 2) goto <D.29244>; else goto <D.29245>;
      <D.29244>:
      D.29246 = bb->block_num;
      D.29247 = bb->native_offset;
      monoeg_g_print ("Basic block %d starting at offset 0x%x\n", D.29246, D.29247);
      <D.29245>:
      cpos = bb->max_offset;
      D.29248 = cfg->prof_options;
      D.29249 = D.29248 & 8192;
      if (D.29249 != 0) goto <D.29250>; else goto <D.29251>;
      <D.29250>:
      <D.29251>:
      mono_break_at_bb_method.146 = mono_break_at_bb_method;
      if (mono_break_at_bb_method.146 != 0B) goto <D.29253>; else goto <D.29254>;
      <D.29253>:
      mono_break_at_bb_method.146 = mono_break_at_bb_method;
      D.29255 = cfg->method;
      D.29256 = mono_method_desc_full_match (mono_break_at_bb_method.146, D.29255);
      if (D.29256 != 0) goto <D.29257>; else goto <D.29258>;
      <D.29257>:
      D.29246 = bb->block_num;
      mono_break_at_bb_bb_num.147 = mono_break_at_bb_bb_num;
      if (D.29246 == mono_break_at_bb_bb_num.147) goto <D.29260>; else goto <D.29261>;
      <D.29260>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      mono_add_patch_info (cfg, D.29264, 7, "mono_break");
      code = emit_call_seq (cfg, code);
      <D.29261>:
      <D.29258>:
      <D.29254>:
      ins = bb->code;
      goto <D.26365>;
      <D.26364>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      offset.149 = (unsigned int) D.29264;
      offset = offset.149;
      D.29266 = ins->opcode;
      D.29267 = (int) D.29266;
      D.29268 = D.29267 + -313;
      D.29269 = arm_cpu_desc_idx[D.29268];
      D.29270 = (sizetype) D.29269;
      D.29271 = D.29270 + 4;
      D.29272 = &arm_cpu_desc + D.29271;
      D.29273 = *D.29272;
      max_len.150 = (int) D.29273;
      max_len = max_len.150;
      D.29275 = cfg->code_size;
      max_len.151 = max_len;
      max_len.152 = (unsigned int) max_len.151;
      D.29278 = D.29275 - max_len.152;
      D.29279 = D.29278 + 4294967280;
      offset.153 = offset;
      if (D.29279 < offset.153) goto <D.29281>; else goto <D.29282>;
      <D.29281>:
      D.29275 = cfg->code_size;
      D.29283 = D.29275 * 2;
      cfg->code_size = D.29283;
      D.29241 = cfg->native_code;
      D.29275 = cfg->code_size;
      D.29284 = monoeg_realloc (D.29241, D.29275);
      cfg->native_code = D.29284;
      D.29241 = cfg->native_code;
      offset.153 = offset;
      code = D.29241 + offset.153;
      <D.29282>:
      offset.153 = offset;
      mono_debug_record_line_number (cfg, ins, offset.153);
      D.29266 = ins->opcode;
      D.29267 = (int) D.29266;
      switch (D.29267) <default: <D.26362>, case 316: <D.25863>, case 318: <D.25861>, case 322: <D.25854>, case 323: <D.25857>, case 324: <D.26287>, case 326: <D.25855>, case 327: <D.25858>, case 336: <D.26246>, case 337: <D.26024>, case 338: <D.26070>, case 340: <D.26041>, case 341: <D.25868>, case 343: <D.26051>, case 344: <D.26057>, case 345: <D.26063>, case 346: <D.26052>, case 347: <D.26058>, case 348: <D.26064>, case 349: <D.26047>, case 350: <D.26053>, case 351: <D.26059>, case 352: <D.26048>, case 353: <D.26054>, case 354: <D.26060>, case 355: <D.26049>, case 356: <D.26055>, case 357: <D.26061>, case 358: <D.26050>, case 359: <D.26056>, case 360: <D.26062>, case 361: <D.26084>, case 362: <D.26011>, case 364: <D.26218>, case 365: <D.26214>, case 369: <D.26141>, case 370: <D.26145>, case 371: <D.26108>, case 372: <D.26110>, case 373: <D.26043>, case 374: <D.25805>, case 375: <D.25801>, case 376: <D.25803>, case 377: <D.25806>, case 379: <D.26232>, case 380: <D.26224>, case 381: <D.25797>, case 382: <D.25793>, case 383: <D.25795>, case 384: <D.25798>, case 388: <D.25830>, case 389: <D.25835>, case 390: <D.25837>, case 391: <D.25841>, case 392: <D.25839>, case 393: <D.25831>, case 394: <D.25832>, case 396: <D.26235>, case 397: <D.26228>, case 400: <D.25818>, case 401: <D.25822>, case 402: <D.25824>, case 403: <D.25826>, case 404: <D.25828>, case 405: <D.25819>, case 406: <D.25820>, case 410: <D.25814>, case 411: <D.25810>, case 412: <D.25812>, case 413: <D.25815>, case 421: <D.25817>, case 424: <D.26022>, case 426: <D.26029>, case 429: <D.25912>, case 430: <D.25944>, case 431: <D.26006>, case 432: <D.25969>, case 434: <D.25970>, case 436: <D.25956>, case 437: <D.25973>, case 438: <D.25978>, case 439: <D.25983>, case 440: <D.25989>, case 441: <D.25993>, case 442: <D.26142>, case 443: <D.26034>, case 445: <D.25860>, case 446: <D.26148>, case 447: <D.26160>, case 448: <D.26164>, case 449: <D.26152>, case 450: <D.26156>, case 451: <D.26168>, case 452: <D.26174>, case 453: <D.26172>, case 454: <D.26176>, case 455: <D.26170>, case 456: <D.26169>, case 457: <D.26175>, case 458: <D.26173>, case 459: <D.26177>, case 460: <D.26171>, case 461: <D.26193>, case 462: <D.26199>, case 463: <D.26190>, case 464: <D.26196>, case 465: <D.26179>, case 466: <D.26185>, case 467: <D.26183>, case 468: <D.26187>, case 469: <D.26181>, case 470: <D.26180>, case 471: <D.26186>, case 472: <D.26184>, case 473: <D.26188>, case 474: <D.26182>, case 475: <D.26194>, case 476: <D.26200>, case 477: <D.26191>, case 478: <D.26197>, case 536: <D.26261>, case 564: <D.26262>, case 565: <D.25905>, case 566: <D.25939>, case 567: <D.26003>, case 568: <D.25959>, case 569: <D.25961>, case 570: <D.25963>, case 571: <D.25966>, case 572: <D.25954>, case 573: <D.25971>, case 574: <D.25976>, case 575: <D.25981>, case 576: <D.25987>, case 577: <D.25997>, case 578: <D.26001>, case 579: <D.25999>, case 580: <D.25843>, case 581: <D.25846>, case 582: <D.26020>, case 584: <D.26239>, case 585: <D.26243>, case 586: <D.26021>, case 588: <D.26238>, case 590: <D.25851>, case 591: <D.25849>, case 595: <D.25918>, case 596: <D.25920>, case 597: <D.26007>, case 598: <D.26009>, case 599: <D.25922>, case 600: <D.25924>, case 619: <D.25908>, case 620: <D.25916>, case 621: <D.25942>, case 622: <D.25948>, case 623: <D.25903>, case 624: <D.25935>, case 625: <D.25913>, case 626: <D.25945>, case 632: <D.25957>, case 633: <D.25974>, case 634: <D.25979>, case 635: <D.25984>, case 636: <D.25990>, case 637: <D.25994>, case 638: <D.26149>, case 639: <D.26161>, case 640: <D.26165>, case 641: <D.26153>, case 642: <D.26157>, case 648: <D.26202>, case 649: <D.26208>, case 650: <D.26206>, case 651: <D.26210>, case 652: <D.26204>, case 653: <D.26203>, case 654: <D.26209>, case 655: <D.26207>, case 656: <D.26211>, case 657: <D.26205>, case 658: <D.26317>, case 659: <D.26335>, case 660: <D.26331>, case 661: <D.26333>, case 662: <D.26323>, case 663: <D.26320>, case 664: <D.26342>, case 665: <D.26332>, case 666: <D.26334>, case 667: <D.26326>, case 668: <D.26276>, case 669: <D.26278>, case 670: <D.26280>, case 671: <D.26282>, case 673: <D.26286>, case 675: <D.26284>, case 677: <D.26251>, case 678: <D.26253>, case 679: <D.26255>, case 680: <D.26259>, case 681: <D.26031>, case 683: <D.26257>, case 684: <D.26260>, case 685: <D.26254>, case 686: <D.26252>, case 687: <D.26256>, case 714: <D.26290>, case 715: <D.26306>, case 716: <D.26311>, case 717: <D.26295>, case 718: <D.26300>, case 727: <D.26258>, case 728: <D.26347>, case 732: <D.26012>, case 735: <D.26140>, case 736: <D.26112>, case 737: <D.26121>, case 738: <D.26131>, case 751: <D.25907>, case 752: <D.25915>, case 753: <D.25941>, case 754: <D.25947>, case 755: <D.25902>, case 756: <D.25910>, case 757: <D.25934>, case 758: <D.25937>, case 759: <D.26143>, case 768: <D.25926>, case 769: <D.25930>, case 770: <D.25928>, case 771: <D.25932>, case 791: <D.25791>, case 796: <D.25864>, case 797: <D.25865>, case 798: <D.25866>, case 799: <D.25867>, case 813: <D.25787>, case 838: <D.26358>, case 839: <D.26359>, case 840: <D.26361>, case 841: <D.26360>, case 843: <D.25950>, case 844: <D.25952>, case 845: <D.26016>>
      <D.25787>:
      v6_supported.154 = v6_supported;
      if (v6_supported.154 != 0) goto <D.29286>; else goto <D.29287>;
      <D.29286>:
      {
        arminstr_t * __ainstrp;

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

        __ainstrp = code;
        *__ainstrp = 3993440186;
        code = __ainstrp + 4;
      }
      <D.29287>:
      goto <D.25790>;
      <D.25791>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      mono_add_patch_info (cfg, D.29264, 7, "__aeabi_read_tp");
      code = emit_call_seq (cfg, code);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29288 = ins->data.op[0].const_val;
        D.29289 = ABS_EXPR <D.29288>;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29292 = D.29289 | D.29291;
        D.29293 = D.29292 | 1048576;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.29295>; else goto <D.29296>;
        <D.29295>:
        iftmp.155 = 8388608;
        goto <D.29297>;
        <D.29296>:
        iftmp.155 = 0;
        <D.29297>:
        D.29298 = D.29293 | iftmp.155;
        D.29299 = D.29298 | -452984832;
        D.29300 = (unsigned int) D.29299;
        *__ainstrp = D.29300;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25793>:
      D.29301 = ins->data.op[1].const_val;
      D.29302 = (unsigned int) D.29301;
      D.29303 = D.29302 & 255;
      code = mono_arm_emit_load_imm (code, 14, D.29303);
      D.29288 = ins->data.op[0].const_val;
      D.29304 = (unsigned int) D.29288;
      D.29305 = D.29304 + 4095;
      D.29306 = D.29305 > 8190;
      D.29307 = (long int) D.29306;
      D.29308 = __builtin_expect (D.29307, 0);
      if (D.29308 != 0) goto <D.29309>; else goto <D.29310>;
      <D.29309>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4098, "arm_is_imm12 (ins->inst_offset)");
      <D.29310>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29288 = ins->data.op[0].const_val;
        D.29289 = ABS_EXPR <D.29288>;
        D.29311 = D.29289 | 57344;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.29313 = D.29311 | D.29312;
        D.29314 = D.29313 | 4194304;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.29316>; else goto <D.29317>;
        <D.29316>:
        iftmp.156 = 8388608;
        goto <D.29318>;
        <D.29317>:
        iftmp.156 = 0;
        <D.29318>:
        D.29319 = D.29314 | iftmp.156;
        D.29320 = D.29319 | -452984832;
        D.29321 = (unsigned int) D.29320;
        *__ainstrp = D.29321;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25795>:
      D.29301 = ins->data.op[1].const_val;
      D.29302 = (unsigned int) D.29301;
      D.29322 = D.29302 & 65535;
      code = mono_arm_emit_load_imm (code, 14, D.29322);
      D.29288 = ins->data.op[0].const_val;
      D.29304 = (unsigned int) D.29288;
      D.29323 = D.29304 + 255;
      D.29324 = D.29323 > 510;
      D.29325 = (long int) D.29324;
      D.29326 = __builtin_expect (D.29325, 0);
      if (D.29326 != 0) goto <D.29327>; else goto <D.29328>;
      <D.29327>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4103, "arm_is_imm8 (ins->inst_offset)");
      <D.29328>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 < 0) goto <D.29330>; else goto <D.29331>;
        <D.29330>:
        D.29288 = ins->data.op[0].const_val;
        D.29332 = -D.29288;
        D.29333 = D.29332 & 15;
        iftmp.157 = D.29333 | 32;
        goto <D.29334>;
        <D.29331>:
        D.29288 = ins->data.op[0].const_val;
        D.29335 = D.29288 & 15;
        iftmp.157 = D.29335 | 32;
        <D.29334>:
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 < 0) goto <D.29337>; else goto <D.29338>;
        <D.29337>:
        D.29288 = ins->data.op[0].const_val;
        D.29332 = -D.29288;
        D.29339 = D.29332 << 4;
        iftmp.158 = D.29339 & 3840;
        goto <D.29340>;
        <D.29338>:
        D.29288 = ins->data.op[0].const_val;
        D.29341 = D.29288 << 4;
        iftmp.158 = D.29341 & 3840;
        <D.29340>:
        D.29342 = iftmp.157 | iftmp.158;
        D.29343 = D.29342 | 57344;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.29344 = D.29343 | D.29312;
        D.29345 = D.29344 | 4194304;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.29347>; else goto <D.29348>;
        <D.29347>:
        iftmp.159 = 8388608;
        goto <D.29349>;
        <D.29348>:
        iftmp.159 = 0;
        <D.29349>:
        D.29350 = D.29345 | iftmp.159;
        D.29351 = D.29350 | -520093552;
        D.29352 = (unsigned int) D.29351;
        *__ainstrp = D.29352;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25797>:
      <D.25798>:
      D.29301 = ins->data.op[1].const_val;
      D.29302 = (unsigned int) D.29301;
      code = mono_arm_emit_load_imm (code, 14, D.29302);
      D.29288 = ins->data.op[0].const_val;
      D.29304 = (unsigned int) D.29288;
      D.29305 = D.29304 + 4095;
      D.29306 = D.29305 > 8190;
      D.29307 = (long int) D.29306;
      D.29308 = __builtin_expect (D.29307, 0);
      if (D.29308 != 0) goto <D.29353>; else goto <D.29354>;
      <D.29353>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4109, "arm_is_imm12 (ins->inst_offset)");
      <D.29354>:
      {
        int _imm12;

        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= -4095) goto <D.29356>; else goto <D.29357>;
        <D.29356>:
        D.29288 = ins->data.op[0].const_val;
        iftmp.160 = MIN_EXPR <D.29288, 4095>;
        goto <D.29358>;
        <D.29357>:
        iftmp.160 = -4095;
        <D.29358>:
        _imm12 = iftmp.160;
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29359 = ABS_EXPR <_imm12>;
          D.29360 = D.29359 | 57344;
          D.29290 = ins->dreg;
          D.29312 = D.29290 << 16;
          D.29361 = D.29360 | D.29312;
          if (_imm12 >= 0) goto <D.29363>; else goto <D.29364>;
          <D.29363>:
          iftmp.161 = 8388608;
          goto <D.29365>;
          <D.29364>:
          iftmp.161 = 0;
          <D.29365>:
          D.29366 = D.29361 | iftmp.161;
          D.29367 = D.29366 | -452984832;
          D.29368 = (unsigned int) D.29367;
          *__ainstrp = D.29368;
          code = __ainstrp + 4;
        }
      }
      goto <D.25790>;
      <D.25801>:
      D.29288 = ins->data.op[0].const_val;
      D.29304 = (unsigned int) D.29288;
      D.29305 = D.29304 + 4095;
      D.29306 = D.29305 > 8190;
      D.29307 = (long int) D.29306;
      D.29308 = __builtin_expect (D.29307, 0);
      if (D.29308 != 0) goto <D.29369>; else goto <D.29370>;
      <D.29369>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4113, "arm_is_imm12 (ins->inst_offset)");
      <D.29370>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29288 = ins->data.op[0].const_val;
        D.29289 = ABS_EXPR <D.29288>;
        D.29371 = ins->sreg1;
        D.29372 = D.29371 << 12;
        D.29373 = D.29289 | D.29372;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.29374 = D.29373 | D.29312;
        D.29375 = D.29374 | 4194304;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.29377>; else goto <D.29378>;
        <D.29377>:
        iftmp.162 = 8388608;
        goto <D.29379>;
        <D.29378>:
        iftmp.162 = 0;
        <D.29379>:
        D.29380 = D.29375 | iftmp.162;
        D.29381 = D.29380 | -452984832;
        D.29382 = (unsigned int) D.29381;
        *__ainstrp = D.29382;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25803>:
      D.29288 = ins->data.op[0].const_val;
      D.29304 = (unsigned int) D.29288;
      D.29323 = D.29304 + 255;
      D.29324 = D.29323 > 510;
      D.29325 = (long int) D.29324;
      D.29326 = __builtin_expect (D.29325, 0);
      if (D.29326 != 0) goto <D.29383>; else goto <D.29384>;
      <D.29383>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4117, "arm_is_imm8 (ins->inst_offset)");
      <D.29384>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 < 0) goto <D.29386>; else goto <D.29387>;
        <D.29386>:
        D.29288 = ins->data.op[0].const_val;
        D.29332 = -D.29288;
        D.29333 = D.29332 & 15;
        iftmp.163 = D.29333 | 32;
        goto <D.29388>;
        <D.29387>:
        D.29288 = ins->data.op[0].const_val;
        D.29335 = D.29288 & 15;
        iftmp.163 = D.29335 | 32;
        <D.29388>:
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 < 0) goto <D.29390>; else goto <D.29391>;
        <D.29390>:
        D.29288 = ins->data.op[0].const_val;
        D.29332 = -D.29288;
        D.29339 = D.29332 << 4;
        iftmp.164 = D.29339 & 3840;
        goto <D.29392>;
        <D.29391>:
        D.29288 = ins->data.op[0].const_val;
        D.29341 = D.29288 << 4;
        iftmp.164 = D.29341 & 3840;
        <D.29392>:
        D.29393 = iftmp.163 | iftmp.164;
        D.29371 = ins->sreg1;
        D.29372 = D.29371 << 12;
        D.29394 = D.29393 | D.29372;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.29395 = D.29394 | D.29312;
        D.29396 = D.29395 | 4194304;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.29398>; else goto <D.29399>;
        <D.29398>:
        iftmp.165 = 8388608;
        goto <D.29400>;
        <D.29399>:
        iftmp.165 = 0;
        <D.29400>:
        D.29401 = D.29396 | iftmp.165;
        D.29402 = D.29401 | -520093552;
        D.29403 = (unsigned int) D.29402;
        *__ainstrp = D.29403;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25805>:
      <D.25806>:
      D.29288 = ins->data.op[0].const_val;
      D.29304 = (unsigned int) D.29288;
      D.29305 = D.29304 + 4095;
      if (D.29305 <= 8190) goto <D.29404>; else goto <D.29405>;
      <D.29404>:
      {
        int _imm12;

        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= -4095) goto <D.29407>; else goto <D.29408>;
        <D.29407>:
        D.29288 = ins->data.op[0].const_val;
        iftmp.166 = MIN_EXPR <D.29288, 4095>;
        goto <D.29409>;
        <D.29408>:
        iftmp.166 = -4095;
        <D.29409>:
        _imm12 = iftmp.166;
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29410 = ABS_EXPR <_imm12>;
          D.29371 = ins->sreg1;
          D.29372 = D.29371 << 12;
          D.29411 = D.29410 | D.29372;
          D.29290 = ins->dreg;
          D.29312 = D.29290 << 16;
          D.29412 = D.29411 | D.29312;
          if (_imm12 >= 0) goto <D.29414>; else goto <D.29415>;
          <D.29414>:
          iftmp.167 = 8388608;
          goto <D.29416>;
          <D.29415>:
          iftmp.167 = 0;
          <D.29416>:
          D.29417 = D.29412 | iftmp.167;
          D.29418 = D.29417 | -452984832;
          D.29419 = (unsigned int) D.29418;
          *__ainstrp = D.29419;
          code = __ainstrp + 4;
        }
      }
      goto <D.29420>;
      <D.29405>:
      D.29288 = ins->data.op[0].const_val;
      D.29421 = (unsigned int) D.29288;
      code = mono_arm_emit_load_imm (code, 14, D.29421);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29372 = D.29371 << 12;
        D.29422 = D.29372 | 14;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.29423 = D.29422 | D.29312;
        D.29424 = D.29423 | -411041792;
        D.29425 = (unsigned int) D.29424;
        *__ainstrp = D.29425;
        code = __ainstrp + 4;
      }
      <D.29420>:
      goto <D.25790>;
      <D.25810>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29371 = ins->sreg1;
        D.29372 = D.29371 << 12;
        D.29427 = D.29426 | D.29372;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.29428 = D.29427 | D.29312;
        D.29429 = D.29428 | -406847488;
        D.29430 = (unsigned int) D.29429;
        *__ainstrp = D.29430;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25812>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29431 = D.29290 & 15;
        D.29432 = D.29431 | 32;
        D.29371 = ins->sreg1;
        D.29372 = D.29371 << 12;
        D.29433 = D.29432 | D.29372;
        D.29426 = ins->sreg2;
        D.29434 = D.29426 << 16;
        D.29435 = D.29433 | D.29434;
        D.29436 = D.29435 | -511704944;
        D.29437 = (unsigned int) D.29436;
        *__ainstrp = D.29437;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25814>:
      <D.25815>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29371 = ins->sreg1;
        D.29372 = D.29371 << 12;
        D.29427 = D.29426 | D.29372;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.29428 = D.29427 | D.29312;
        D.29438 = D.29428 | -411041792;
        D.29439 = (unsigned int) D.29438;
        *__ainstrp = D.29439;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25817>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 4141);
      <D.25818>:
      <D.25819>:
      <D.25820>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29443 = D.29442 | -409993216;
        D.29444 = (unsigned int) D.29443;
        *__ainstrp = D.29444;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25822>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29445 = D.29371 & 15;
        D.29446 = D.29445 | 64;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29447 = D.29446 | D.29291;
        D.29426 = ins->sreg2;
        D.29434 = D.29426 << 16;
        D.29448 = D.29447 | D.29434;
        D.29449 = D.29448 | -510656368;
        D.29450 = (unsigned int) D.29449;
        *__ainstrp = D.29450;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25824>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29451 = D.29442 | -405798912;
        D.29452 = (unsigned int) D.29451;
        *__ainstrp = D.29452;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25826>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29445 = D.29371 & 15;
        D.29453 = D.29445 | 96;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29454 = D.29453 | D.29291;
        D.29426 = ins->sreg2;
        D.29434 = D.29426 << 16;
        D.29455 = D.29454 | D.29434;
        D.29456 = D.29455 | -510656368;
        D.29457 = (unsigned int) D.29456;
        *__ainstrp = D.29457;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25828>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29445 = D.29371 & 15;
        D.29458 = D.29445 | 32;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29459 = D.29458 | D.29291;
        D.29426 = ins->sreg2;
        D.29434 = D.29426 << 16;
        D.29460 = D.29459 | D.29434;
        D.29461 = D.29460 | -510656368;
        D.29462 = (unsigned int) D.29461;
        *__ainstrp = D.29462;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25830>:
      <D.25831>:
      <D.25832>:
      D.29288 = ins->data.op[0].const_val;
      D.29304 = (unsigned int) D.29288;
      D.29305 = D.29304 + 4095;
      if (D.29305 <= 8190) goto <D.29463>; else goto <D.29464>;
      <D.29463>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29288 = ins->data.op[0].const_val;
        D.29289 = ABS_EXPR <D.29288>;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29292 = D.29289 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29465 = D.29292 | D.29441;
        D.29466 = D.29465 | 1048576;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.29468>; else goto <D.29469>;
        <D.29468>:
        iftmp.168 = 8388608;
        goto <D.29470>;
        <D.29469>:
        iftmp.168 = 0;
        <D.29470>:
        D.29471 = D.29466 | iftmp.168;
        D.29472 = D.29471 | -452984832;
        D.29473 = (unsigned int) D.29472;
        *__ainstrp = D.29473;
        code = __ainstrp + 4;
      }
      goto <D.29474>;
      <D.29464>:
      D.29288 = ins->data.op[0].const_val;
      D.29421 = (unsigned int) D.29288;
      code = mono_arm_emit_load_imm (code, 14, D.29421);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29475 = D.29291 | 14;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29476 = D.29475 | D.29441;
        D.29477 = D.29476 | -409993216;
        D.29478 = (unsigned int) D.29477;
        *__ainstrp = D.29478;
        code = __ainstrp + 4;
      }
      <D.29474>:
      goto <D.25790>;
      <D.25835>:
      D.29288 = ins->data.op[0].const_val;
      D.29304 = (unsigned int) D.29288;
      D.29323 = D.29304 + 255;
      D.29324 = D.29323 > 510;
      D.29325 = (long int) D.29324;
      D.29326 = __builtin_expect (D.29325, 0);
      if (D.29326 != 0) goto <D.29479>; else goto <D.29480>;
      <D.29479>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4172, "arm_is_imm8 (ins->inst_offset)");
      <D.29480>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 < 0) goto <D.29482>; else goto <D.29483>;
        <D.29482>:
        D.29288 = ins->data.op[0].const_val;
        D.29332 = -D.29288;
        D.29333 = D.29332 & 15;
        iftmp.169 = D.29333 | 64;
        goto <D.29484>;
        <D.29483>:
        D.29288 = ins->data.op[0].const_val;
        D.29335 = D.29288 & 15;
        iftmp.169 = D.29335 | 64;
        <D.29484>:
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 < 0) goto <D.29486>; else goto <D.29487>;
        <D.29486>:
        D.29288 = ins->data.op[0].const_val;
        D.29332 = -D.29288;
        D.29339 = D.29332 << 4;
        iftmp.170 = D.29339 & 3840;
        goto <D.29488>;
        <D.29487>:
        D.29288 = ins->data.op[0].const_val;
        D.29341 = D.29288 << 4;
        iftmp.170 = D.29341 & 3840;
        <D.29488>:
        D.29489 = iftmp.169 | iftmp.170;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29490 = D.29489 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29491 = D.29490 | D.29441;
        D.29492 = D.29491 | 5242880;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.29494>; else goto <D.29495>;
        <D.29494>:
        iftmp.171 = 8388608;
        goto <D.29496>;
        <D.29495>:
        iftmp.171 = 0;
        <D.29496>:
        D.29497 = D.29492 | iftmp.171;
        D.29498 = D.29497 | -520093552;
        D.29499 = (unsigned int) D.29498;
        *__ainstrp = D.29499;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25837>:
      D.29288 = ins->data.op[0].const_val;
      D.29304 = (unsigned int) D.29288;
      D.29305 = D.29304 + 4095;
      D.29306 = D.29305 > 8190;
      D.29307 = (long int) D.29306;
      D.29308 = __builtin_expect (D.29307, 0);
      if (D.29308 != 0) goto <D.29500>; else goto <D.29501>;
      <D.29500>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4176, "arm_is_imm12 (ins->inst_offset)");
      <D.29501>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29288 = ins->data.op[0].const_val;
        D.29289 = ABS_EXPR <D.29288>;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29292 = D.29289 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29465 = D.29292 | D.29441;
        D.29502 = D.29465 | 5242880;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.29504>; else goto <D.29505>;
        <D.29504>:
        iftmp.172 = 8388608;
        goto <D.29506>;
        <D.29505>:
        iftmp.172 = 0;
        <D.29506>:
        D.29507 = D.29502 | iftmp.172;
        D.29508 = D.29507 | -452984832;
        D.29509 = (unsigned int) D.29508;
        *__ainstrp = D.29509;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25839>:
      D.29288 = ins->data.op[0].const_val;
      D.29304 = (unsigned int) D.29288;
      D.29323 = D.29304 + 255;
      D.29324 = D.29323 > 510;
      D.29325 = (long int) D.29324;
      D.29326 = __builtin_expect (D.29325, 0);
      if (D.29326 != 0) goto <D.29510>; else goto <D.29511>;
      <D.29510>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4180, "arm_is_imm8 (ins->inst_offset)");
      <D.29511>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 < 0) goto <D.29513>; else goto <D.29514>;
        <D.29513>:
        D.29288 = ins->data.op[0].const_val;
        D.29332 = -D.29288;
        D.29333 = D.29332 & 15;
        iftmp.173 = D.29333 | 32;
        goto <D.29515>;
        <D.29514>:
        D.29288 = ins->data.op[0].const_val;
        D.29335 = D.29288 & 15;
        iftmp.173 = D.29335 | 32;
        <D.29515>:
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 < 0) goto <D.29517>; else goto <D.29518>;
        <D.29517>:
        D.29288 = ins->data.op[0].const_val;
        D.29332 = -D.29288;
        D.29339 = D.29332 << 4;
        iftmp.174 = D.29339 & 3840;
        goto <D.29519>;
        <D.29518>:
        D.29288 = ins->data.op[0].const_val;
        D.29341 = D.29288 << 4;
        iftmp.174 = D.29341 & 3840;
        <D.29519>:
        D.29520 = iftmp.173 | iftmp.174;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29521 = D.29520 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29522 = D.29521 | D.29441;
        D.29523 = D.29522 | 5242880;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.29525>; else goto <D.29526>;
        <D.29525>:
        iftmp.175 = 8388608;
        goto <D.29527>;
        <D.29526>:
        iftmp.175 = 0;
        <D.29527>:
        D.29528 = D.29523 | iftmp.175;
        D.29529 = D.29528 | -520093552;
        D.29530 = (unsigned int) D.29529;
        *__ainstrp = D.29530;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25841>:
      D.29288 = ins->data.op[0].const_val;
      D.29304 = (unsigned int) D.29288;
      D.29323 = D.29304 + 255;
      D.29324 = D.29323 > 510;
      D.29325 = (long int) D.29324;
      D.29326 = __builtin_expect (D.29325, 0);
      if (D.29326 != 0) goto <D.29531>; else goto <D.29532>;
      <D.29531>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4184, "arm_is_imm8 (ins->inst_offset)");
      <D.29532>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 < 0) goto <D.29534>; else goto <D.29535>;
        <D.29534>:
        D.29288 = ins->data.op[0].const_val;
        D.29332 = -D.29288;
        D.29333 = D.29332 & 15;
        iftmp.176 = D.29333 | 96;
        goto <D.29536>;
        <D.29535>:
        D.29288 = ins->data.op[0].const_val;
        D.29335 = D.29288 & 15;
        iftmp.176 = D.29335 | 96;
        <D.29536>:
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 < 0) goto <D.29538>; else goto <D.29539>;
        <D.29538>:
        D.29288 = ins->data.op[0].const_val;
        D.29332 = -D.29288;
        D.29339 = D.29332 << 4;
        iftmp.177 = D.29339 & 3840;
        goto <D.29540>;
        <D.29539>:
        D.29288 = ins->data.op[0].const_val;
        D.29341 = D.29288 << 4;
        iftmp.177 = D.29341 & 3840;
        <D.29540>:
        D.29541 = iftmp.176 | iftmp.177;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29542 = D.29541 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29543 = D.29542 | D.29441;
        D.29544 = D.29543 | 5242880;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.29546>; else goto <D.29547>;
        <D.29546>:
        iftmp.178 = 8388608;
        goto <D.29548>;
        <D.29547>:
        iftmp.178 = 0;
        <D.29548>:
        D.29549 = D.29544 | iftmp.178;
        D.29550 = D.29549 | -520093552;
        D.29551 = (unsigned int) D.29550;
        *__ainstrp = D.29551;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25843>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29552 = D.29371 | 3072;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29553 = D.29552 | D.29291;
        D.29554 = D.29553 | -509607936;
        D.29555 = (unsigned int) D.29554;
        *__ainstrp = D.29555;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29556 = D.29290 | 3136;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29557 = D.29556 | D.29291;
        D.29558 = D.29557 | -509607936;
        D.29559 = (unsigned int) D.29558;
        *__ainstrp = D.29559;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25846>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29560 = D.29371 | 2048;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29561 = D.29560 | D.29291;
        D.29562 = D.29561 | -509607936;
        D.29563 = (unsigned int) D.29562;
        *__ainstrp = D.29563;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29564 = D.29290 | 2112;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29565 = D.29564 | D.29291;
        D.29566 = D.29565 | -509607936;
        D.29567 = (unsigned int) D.29566;
        *__ainstrp = D.29567;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25849>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29568 = D.29291 | 255;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29569 = D.29568 | D.29441;
        D.29570 = D.29569 | -503316480;
        D.29571 = (unsigned int) D.29570;
        *__ainstrp = D.29571;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25851>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29560 = D.29371 | 2048;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29561 = D.29560 | D.29291;
        D.29562 = D.29561 | -509607936;
        D.29563 = (unsigned int) D.29562;
        *__ainstrp = D.29563;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29572 = D.29290 | 2080;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29573 = D.29572 | D.29291;
        D.29574 = D.29573 | -509607936;
        D.29575 = (unsigned int) D.29574;
        *__ainstrp = D.29575;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25854>:
      <D.25855>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29576 = D.29426 | D.29441;
        D.29577 = D.29576 | -514850816;
        D.29578 = (unsigned int) D.29577;
        *__ainstrp = D.29578;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25857>:
      <D.25858>:
      D.29301 = ins->data.op[1].const_val;
      D.29302 = (unsigned int) D.29301;
      imm8 = mono_arm_is_rotated_imm8 (D.29302, &rot_amount);
      D.29579 = imm8 < 0;
      D.29580 = (long int) D.29579;
      D.29581 = __builtin_expect (D.29580, 0);
      if (D.29581 != 0) goto <D.29582>; else goto <D.29583>;
      <D.29582>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4209, "imm8 >= 0");
      <D.29583>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29584 = imm8 & 255;
        rot_amount.179 = rot_amount;
        D.29586 = rot_amount.179 >> 1;
        D.29587 = D.29586 & 15;
        D.29588 = D.29587 << 8;
        D.29589 = D.29584 | D.29588;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29590 = D.29589 | D.29441;
        D.29591 = D.29590 | -481296384;
        D.29592 = (unsigned int) D.29591;
        *__ainstrp = D.29592;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25860>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      mono_add_patch_info (cfg, D.29264, 7, "mono_break");
      code = emit_call_seq (cfg, code);
      goto <D.25790>;
      <D.25861>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3785359360;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25863>:
      <D.25864>:
      <D.25865>:
      <D.25866>:
      <D.25867>:
      goto <D.25790>;
      <D.25868>:
      {
        int i;
        struct MonoInst * info_var;
        struct MonoInst * ss_trigger_page_var;
        struct MonoInst * ss_read_var;
        struct MonoInst * ss_method_var;
        struct MonoInst * bp_method_var;
        struct MonoInst * var;
        int dreg;

        info_var = cfg->arch.seq_point_info_var;
        ss_trigger_page_var = cfg->arch.ss_trigger_page_var;
        ss_read_var = cfg->arch.seq_point_read_var;
        ss_method_var = cfg->arch.seq_point_ss_method_var;
        bp_method_var = cfg->arch.seq_point_bp_method_var;
        dreg = 14;
        D.29593 = BIT_FIELD_REF <*cfg, 8, 3432>;
        D.29594 = D.29593 & 1;
        if (D.29594 != 0) goto <D.29595>; else goto <D.29596>;
        <D.29595>:
        D.29597 = BIT_FIELD_REF <*cfg, 8, 3392>;
        D.29598 = D.29597 & 64;
        D.29599 = D.29598 != 0;
        D.29600 = (long int) D.29599;
        D.29601 = __builtin_expect (D.29600, 0);
        if (D.29601 != 0) goto <D.29602>; else goto <D.29603>;
        <D.29602>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4245, "!cfg->compile_aot");
        <D.29603>:
        <D.29596>:
        D.29597 = BIT_FIELD_REF <*cfg, 8, 3392>;
        D.29598 = D.29597 & 64;
        if (D.29598 != 0) goto <D.29604>; else goto <D.29605>;
        <D.29604>:
        D.29606 = info_var == 0B;
        D.29607 = (long int) D.29606;
        D.29608 = __builtin_expect (D.29607, 0);
        if (D.29608 != 0) goto <D.29609>; else goto <D.29610>;
        <D.29609>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4254, "info_var");
        <D.29610>:
        D.29611 = info_var->opcode;
        D.29612 = D.29611 != 367;
        D.29613 = (long int) D.29612;
        D.29614 = __builtin_expect (D.29613, 0);
        if (D.29614 != 0) goto <D.29615>; else goto <D.29616>;
        <D.29615>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4255, "info_var->opcode == OP_REGOFFSET");
        <D.29616>:
        D.29617 = info_var->data.op[0].const_val;
        D.29618 = (unsigned int) D.29617;
        D.29619 = D.29618 + 4095;
        D.29620 = D.29619 > 8190;
        D.29621 = (long int) D.29620;
        D.29622 = __builtin_expect (D.29621, 0);
        if (D.29622 != 0) goto <D.29623>; else goto <D.29624>;
        <D.29623>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4256, "arm_is_imm12 (info_var->inst_offset)");
        <D.29624>:
        <D.29605>:
        D.29593 = BIT_FIELD_REF <*cfg, 8, 3432>;
        D.29594 = D.29593 & 1;
        if (D.29594 == 0) goto <D.29625>; else goto <D.29626>;
        <D.29625>:
        ss_trigger_page.180 = ss_trigger_page;
        ss_trigger_page.181 = (unsigned int) ss_trigger_page.180;
        D.29629 = (long long unsigned int) ss_trigger_page.181;
        D.29630 = D.29629 >> 32;
        D.29631 = D.29630 != 0;
        D.29632 = (long int) D.29631;
        D.29633 = __builtin_expect (D.29632, 0);
        if (D.29633 != 0) goto <D.29634>; else goto <D.29635>;
        <D.29634>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4266, "((guint64)(gsize)ss_trigger_page >> 32) == 0");
        <D.29635>:
        <D.29626>:
        D.29636 = ins->flags;
        D.29637 = (int) D.29636;
        D.29638 = D.29637 & 1;
        if (D.29638 != 0) goto <D.29639>; else goto <D.29640>;
        <D.29639>:
        D.29593 = BIT_FIELD_REF <*cfg, 8, 3432>;
        D.29594 = D.29593 & 1;
        if (D.29594 != 0) goto <D.29641>; else goto <D.29642>;
        <D.29641>:
        var = ss_read_var;
        D.29643 = var == 0B;
        D.29644 = (long int) D.29643;
        D.29645 = __builtin_expect (D.29644, 0);
        if (D.29645 != 0) goto <D.29646>; else goto <D.29647>;
        <D.29646>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4273, "var");
        <D.29647>:
        D.29648 = var->opcode;
        D.29649 = D.29648 != 367;
        D.29650 = (long int) D.29649;
        D.29651 = __builtin_expect (D.29650, 0);
        if (D.29651 != 0) goto <D.29652>; else goto <D.29653>;
        <D.29652>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4274, "var->opcode == OP_REGOFFSET");
        <D.29653>:
        D.29654 = var->data.op[0].const_val;
        D.29655 = (unsigned int) D.29654;
        D.29656 = D.29655 + 4095;
        D.29657 = D.29656 > 8190;
        D.29658 = (long int) D.29657;
        D.29659 = __builtin_expect (D.29658, 0);
        if (D.29659 != 0) goto <D.29660>; else goto <D.29661>;
        <D.29660>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4275, "arm_is_imm12 (var->inst_offset)");
        <D.29661>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29654 = var->data.op[0].const_val;
          D.29662 = ABS_EXPR <D.29654>;
          D.29663 = dreg << 12;
          D.29664 = D.29662 | D.29663;
          D.29665 = var->sreg1;
          D.29666 = D.29665 << 16;
          D.29667 = D.29664 | D.29666;
          D.29668 = D.29667 | 1048576;
          D.29654 = var->data.op[0].const_val;
          if (D.29654 >= 0) goto <D.29670>; else goto <D.29671>;
          <D.29670>:
          iftmp.182 = 8388608;
          goto <D.29672>;
          <D.29671>:
          iftmp.182 = 0;
          <D.29672>:
          D.29673 = D.29668 | iftmp.182;
          D.29674 = D.29673 | -452984832;
          D.29675 = (unsigned int) D.29674;
          *__ainstrp = D.29675;
          code = __ainstrp + 4;
        }
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29663 = dreg << 12;
          D.29676 = dreg << 16;
          D.29677 = D.29663 | D.29676;
          D.29678 = D.29677 | -443547648;
          D.29679 = (unsigned int) D.29678;
          *__ainstrp = D.29679;
          code = __ainstrp + 4;
        }
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29676 = dreg << 16;
          D.29680 = D.29676 | -481296384;
          D.29681 = (unsigned int) D.29680;
          *__ainstrp = D.29681;
          code = __ainstrp + 4;
        }
        var = ss_method_var;
        D.29643 = var == 0B;
        D.29644 = (long int) D.29643;
        D.29645 = __builtin_expect (D.29644, 0);
        if (D.29645 != 0) goto <D.29682>; else goto <D.29683>;
        <D.29682>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4284, "var");
        <D.29683>:
        D.29648 = var->opcode;
        D.29649 = D.29648 != 367;
        D.29650 = (long int) D.29649;
        D.29651 = __builtin_expect (D.29650, 0);
        if (D.29651 != 0) goto <D.29684>; else goto <D.29685>;
        <D.29684>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4285, "var->opcode == OP_REGOFFSET");
        <D.29685>:
        D.29654 = var->data.op[0].const_val;
        D.29655 = (unsigned int) D.29654;
        D.29656 = D.29655 + 4095;
        D.29657 = D.29656 > 8190;
        D.29658 = (long int) D.29657;
        D.29659 = __builtin_expect (D.29658, 0);
        if (D.29659 != 0) goto <D.29686>; else goto <D.29687>;
        <D.29686>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4286, "arm_is_imm12 (var->inst_offset)");
        <D.29687>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29654 = var->data.op[0].const_val;
          D.29662 = ABS_EXPR <D.29654>;
          D.29663 = dreg << 12;
          D.29664 = D.29662 | D.29663;
          D.29665 = var->sreg1;
          D.29666 = D.29665 << 16;
          D.29667 = D.29664 | D.29666;
          D.29668 = D.29667 | 1048576;
          D.29654 = var->data.op[0].const_val;
          if (D.29654 >= 0) goto <D.29689>; else goto <D.29690>;
          <D.29689>:
          iftmp.183 = 8388608;
          goto <D.29691>;
          <D.29690>:
          iftmp.183 = 0;
          <D.29691>:
          D.29692 = D.29668 | iftmp.183;
          D.29693 = D.29692 | -452984832;
          D.29694 = (unsigned int) D.29693;
          *__ainstrp = D.29694;
          code = __ainstrp + 4;
        }
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29695 = dreg | 288358192;
          D.29696 = (unsigned int) D.29695;
          *__ainstrp = D.29696;
          code = __ainstrp + 4;
        }
        goto <D.29697>;
        <D.29642>:
        D.29597 = BIT_FIELD_REF <*cfg, 8, 3392>;
        D.29598 = D.29597 & 64;
        if (D.29598 != 0) goto <D.29698>; else goto <D.29699>;
        <D.29698>:
        var = ss_trigger_page_var;
        D.29643 = var == 0B;
        D.29644 = (long int) D.29643;
        D.29645 = __builtin_expect (D.29644, 0);
        if (D.29645 != 0) goto <D.29700>; else goto <D.29701>;
        <D.29700>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4295, "var");
        <D.29701>:
        D.29648 = var->opcode;
        D.29649 = D.29648 != 367;
        D.29650 = (long int) D.29649;
        D.29651 = __builtin_expect (D.29650, 0);
        if (D.29651 != 0) goto <D.29702>; else goto <D.29703>;
        <D.29702>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4296, "var->opcode == OP_REGOFFSET");
        <D.29703>:
        D.29654 = var->data.op[0].const_val;
        D.29655 = (unsigned int) D.29654;
        D.29656 = D.29655 + 4095;
        D.29657 = D.29656 > 8190;
        D.29658 = (long int) D.29657;
        D.29659 = __builtin_expect (D.29658, 0);
        if (D.29659 != 0) goto <D.29704>; else goto <D.29705>;
        <D.29704>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4297, "arm_is_imm12 (var->inst_offset)");
        <D.29705>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29654 = var->data.op[0].const_val;
          D.29662 = ABS_EXPR <D.29654>;
          D.29663 = dreg << 12;
          D.29664 = D.29662 | D.29663;
          D.29665 = var->sreg1;
          D.29666 = D.29665 << 16;
          D.29667 = D.29664 | D.29666;
          D.29668 = D.29667 | 1048576;
          D.29654 = var->data.op[0].const_val;
          if (D.29654 >= 0) goto <D.29707>; else goto <D.29708>;
          <D.29707>:
          iftmp.184 = 8388608;
          goto <D.29709>;
          <D.29708>:
          iftmp.184 = 0;
          <D.29709>:
          D.29710 = D.29668 | iftmp.184;
          D.29711 = D.29710 | -452984832;
          D.29712 = (unsigned int) D.29711;
          *__ainstrp = D.29712;
          code = __ainstrp + 4;
        }
        goto <D.29713>;
        <D.29699>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29663 = dreg << 12;
          D.29714 = D.29663 | -442564608;
          D.29715 = (unsigned int) D.29714;
          *__ainstrp = D.29715;
          code = __ainstrp + 4;
        }
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          *__ainstrp = 3925868544;
          code = __ainstrp + 4;
        }
        ss_trigger_page.180 = ss_trigger_page;
        ss_trigger_page.185 = (int) ss_trigger_page.180;
        MEM[(int *)code] = ss_trigger_page.185;
        code = code + 4;
        <D.29713>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29663 = dreg << 12;
          D.29676 = dreg << 16;
          D.29677 = D.29663 | D.29676;
          D.29678 = D.29677 | -443547648;
          D.29679 = (unsigned int) D.29678;
          *__ainstrp = D.29679;
          code = __ainstrp + 4;
        }
        <D.29697>:
        <D.29640>:
        code.148 = (int) code;
        D.29241 = cfg->native_code;
        D.29263 = (int) D.29241;
        D.29264 = code.148 - D.29263;
        mono_add_seq_point (cfg, bb, ins, D.29264);
        D.29593 = BIT_FIELD_REF <*cfg, 8, 3432>;
        D.29594 = D.29593 & 1;
        if (D.29594 != 0) goto <D.29717>; else goto <D.29718>;
        <D.29717>:
        var = bp_method_var;
        D.29643 = var == 0B;
        D.29644 = (long int) D.29643;
        D.29645 = __builtin_expect (D.29644, 0);
        if (D.29645 != 0) goto <D.29719>; else goto <D.29720>;
        <D.29719>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4320, "var");
        <D.29720>:
        D.29648 = var->opcode;
        D.29649 = D.29648 != 367;
        D.29650 = (long int) D.29649;
        D.29651 = __builtin_expect (D.29650, 0);
        if (D.29651 != 0) goto <D.29721>; else goto <D.29722>;
        <D.29721>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4321, "var->opcode == OP_REGOFFSET");
        <D.29722>:
        D.29654 = var->data.op[0].const_val;
        D.29655 = (unsigned int) D.29654;
        D.29656 = D.29655 + 4095;
        D.29657 = D.29656 > 8190;
        D.29658 = (long int) D.29657;
        D.29659 = __builtin_expect (D.29658, 0);
        if (D.29659 != 0) goto <D.29723>; else goto <D.29724>;
        <D.29723>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4322, "arm_is_imm12 (var->inst_offset)");
        <D.29724>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29654 = var->data.op[0].const_val;
          D.29662 = ABS_EXPR <D.29654>;
          D.29663 = dreg << 12;
          D.29664 = D.29662 | D.29663;
          D.29665 = var->sreg1;
          D.29666 = D.29665 << 16;
          D.29667 = D.29664 | D.29666;
          D.29668 = D.29667 | 1048576;
          D.29654 = var->data.op[0].const_val;
          if (D.29654 >= 0) goto <D.29726>; else goto <D.29727>;
          <D.29726>:
          iftmp.186 = 8388608;
          goto <D.29728>;
          <D.29727>:
          iftmp.186 = 0;
          <D.29728>:
          D.29729 = D.29668 | iftmp.186;
          D.29730 = D.29729 | -452984832;
          D.29731 = (unsigned int) D.29730;
          *__ainstrp = D.29731;
          code = __ainstrp + 4;
        }
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          *__ainstrp = 3785359360;
          code = __ainstrp + 4;
        }
        goto <D.29732>;
        <D.29718>:
        D.29597 = BIT_FIELD_REF <*cfg, 8, 3392>;
        D.29598 = D.29597 & 64;
        if (D.29598 != 0) goto <D.29733>; else goto <D.29734>;
        <D.29733>:
        {
          guint32 offset;
          guint32 val;

          code.148 = (int) code;
          D.29241 = cfg->native_code;
          D.29263 = (int) D.29241;
          D.29264 = code.148 - D.29263;
          offset = (guint32) D.29264;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.29617 = info_var->data.op[0].const_val;
            D.29735 = ABS_EXPR <D.29617>;
            D.29663 = dreg << 12;
            D.29736 = D.29735 | D.29663;
            D.29737 = info_var->sreg1;
            D.29738 = D.29737 << 16;
            D.29739 = D.29736 | D.29738;
            D.29740 = D.29739 | 1048576;
            D.29617 = info_var->data.op[0].const_val;
            if (D.29617 >= 0) goto <D.29742>; else goto <D.29743>;
            <D.29742>:
            iftmp.187 = 8388608;
            goto <D.29744>;
            <D.29743>:
            iftmp.187 = 0;
            <D.29744>:
            D.29745 = D.29740 | iftmp.187;
            D.29746 = D.29745 | -452984832;
            D.29747 = (unsigned int) D.29746;
            *__ainstrp = D.29747;
            code = __ainstrp + 4;
          }
          D.29748 = offset / 4;
          D.29749 = D.29748 + 2;
          val = D.29749 * 4;
          val.188 = (int) val;
          D.29751 = val.188 >= -4095;
          val.188 = (int) val;
          D.29752 = val.188 <= 4095;
          D.29753 = D.29751 & D.29752;
          if (D.29753 != 0) goto <D.29754>; else goto <D.29755>;
          <D.29754>:
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            val.188 = (int) val;
            if (val.188 < 0) goto <D.29757>; else goto <D.29758>;
            <D.29757>:
            val.188 = (int) val;
            D.29759 = -val.188;
            iftmp.189 = (guint32) D.29759;
            goto <D.29760>;
            <D.29758>:
            iftmp.189 = val;
            <D.29760>:
            D.29663 = dreg << 12;
            D.29761 = (unsigned int) D.29663;
            D.29762 = iftmp.189 | D.29761;
            D.29676 = dreg << 16;
            D.29763 = (unsigned int) D.29676;
            D.29764 = D.29762 | D.29763;
            val.188 = (int) val;
            if (val.188 >= 0) goto <D.29766>; else goto <D.29767>;
            <D.29766>:
            iftmp.190 = 8388608;
            goto <D.29768>;
            <D.29767>:
            iftmp.190 = 0;
            <D.29768>:
            D.29769 = D.29764 | iftmp.190;
            D.29770 = D.29769 | 3843031040;
            *__ainstrp = D.29770;
            code = __ainstrp + 4;
          }
          goto <D.29771>;
          <D.29755>:
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.29772 = val & 255;
            D.29663 = dreg << 12;
            D.29761 = (unsigned int) D.29663;
            D.29773 = D.29772 | D.29761;
            D.29676 = dreg << 16;
            D.29763 = (unsigned int) D.29676;
            D.29774 = D.29773 | D.29763;
            D.29775 = D.29774 | 3800039424;
            *__ainstrp = D.29775;
            code = __ainstrp + 4;
          }
          D.29776 = val & 65280;
          if (D.29776 != 0) goto <D.29777>; else goto <D.29778>;
          <D.29777>:
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.29776 = val & 65280;
            D.29779 = D.29776 >> 8;
            D.29780 = D.29779 & 255;
            D.29663 = dreg << 12;
            D.29761 = (unsigned int) D.29663;
            D.29781 = D.29780 | D.29761;
            D.29676 = dreg << 16;
            D.29763 = (unsigned int) D.29676;
            D.29782 = D.29781 | D.29763;
            D.29783 = D.29782 | 3800042496;
            *__ainstrp = D.29783;
            code = __ainstrp + 4;
          }
          <D.29778>:
          D.29784 = val & 16711680;
          if (D.29784 != 0) goto <D.29785>; else goto <D.29786>;
          <D.29785>:
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.29784 = val & 16711680;
            D.29787 = D.29784 >> 16;
            D.29788 = D.29787 & 255;
            D.29663 = dreg << 12;
            D.29761 = (unsigned int) D.29663;
            D.29789 = D.29788 | D.29761;
            D.29676 = dreg << 16;
            D.29763 = (unsigned int) D.29676;
            D.29790 = D.29789 | D.29763;
            D.29791 = D.29790 | 3800041472;
            *__ainstrp = D.29791;
            code = __ainstrp + 4;
          }
          <D.29786>:
          D.29792 = val & 4278190080;
          D.29793 = D.29792 != 0;
          D.29794 = (long int) D.29793;
          D.29795 = __builtin_expect (D.29794, 0);
          if (D.29795 != 0) goto <D.29796>; else goto <D.29797>;
          <D.29796>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4346, "!(val & 0xFF000000)");
          <D.29797>:
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.29663 = dreg << 12;
            D.29676 = dreg << 16;
            D.29677 = D.29663 | D.29676;
            D.29678 = D.29677 | -443547648;
            D.29679 = (unsigned int) D.29678;
            *__ainstrp = D.29679;
            code = __ainstrp + 4;
          }
          <D.29771>:
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.29676 = dreg << 16;
            D.29680 = D.29676 | -481296384;
            D.29681 = (unsigned int) D.29680;
            *__ainstrp = D.29681;
            code = __ainstrp + 4;
          }
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.29663 = dreg << 12;
            D.29676 = dreg << 16;
            D.29677 = D.29663 | D.29676;
            D.29798 = D.29677 | 361758720;
            D.29799 = (unsigned int) D.29798;
            *__ainstrp = D.29799;
            code = __ainstrp + 4;
          }
        }
        goto <D.29800>;
        <D.29734>:
        i = 0;
        goto <D.25900>;
        <D.25899>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          *__ainstrp = 3785359360;
          code = __ainstrp + 4;
        }
        i = i + 1;
        <D.25900>:
        if (i <= 3) goto <D.25899>; else goto <D.25901>;
        <D.25901>:
        <D.29800>:
        <D.29732>:
        goto <D.25790>;
      }
      <D.25902>:
      <D.25903>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29801 = D.29442 | -527433728;
        D.29802 = (unsigned int) D.29801;
        *__ainstrp = D.29802;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25905>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29803 = D.29442 | -528482304;
        D.29804 = (unsigned int) D.29803;
        *__ainstrp = D.29804;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25907>:
      <D.25908>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29805 = D.29442 | -525336576;
        D.29806 = (unsigned int) D.29805;
        *__ainstrp = D.29806;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25910>:
      D.29301 = ins->data.op[1].const_val;
      D.29302 = (unsigned int) D.29301;
      imm8 = mono_arm_is_rotated_imm8 (D.29302, &rot_amount);
      D.29579 = imm8 < 0;
      D.29580 = (long int) D.29579;
      D.29581 = __builtin_expect (D.29580, 0);
      if (D.29581 != 0) goto <D.29807>; else goto <D.29808>;
      <D.29807>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4377, "imm8 >= 0");
      <D.29808>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29584 = imm8 & 255;
        rot_amount.179 = rot_amount;
        D.29586 = rot_amount.179 >> 1;
        D.29587 = D.29586 & 15;
        D.29588 = D.29587 << 8;
        D.29589 = D.29584 | D.29588;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29809 = D.29589 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29810 = D.29809 | D.29441;
        D.29811 = D.29810 | -493879296;
        D.29812 = (unsigned int) D.29811;
        *__ainstrp = D.29812;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25912>:
      <D.25913>:
      D.29301 = ins->data.op[1].const_val;
      D.29302 = (unsigned int) D.29301;
      imm8 = mono_arm_is_rotated_imm8 (D.29302, &rot_amount);
      D.29579 = imm8 < 0;
      D.29580 = (long int) D.29579;
      D.29581 = __builtin_expect (D.29580, 0);
      if (D.29581 != 0) goto <D.29813>; else goto <D.29814>;
      <D.29813>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4383, "imm8 >= 0");
      <D.29814>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29584 = imm8 & 255;
        rot_amount.179 = rot_amount;
        D.29586 = rot_amount.179 >> 1;
        D.29587 = D.29586 & 15;
        D.29588 = D.29587 << 8;
        D.29589 = D.29584 | D.29588;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29809 = D.29589 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29810 = D.29809 | D.29441;
        D.29815 = D.29810 | -494927872;
        D.29816 = (unsigned int) D.29815;
        *__ainstrp = D.29816;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25915>:
      <D.25916>:
      D.29301 = ins->data.op[1].const_val;
      D.29302 = (unsigned int) D.29301;
      imm8 = mono_arm_is_rotated_imm8 (D.29302, &rot_amount);
      D.29579 = imm8 < 0;
      D.29580 = (long int) D.29579;
      D.29581 = __builtin_expect (D.29580, 0);
      if (D.29581 != 0) goto <D.29817>; else goto <D.29818>;
      <D.29817>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4389, "imm8 >= 0");
      <D.29818>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29584 = imm8 & 255;
        rot_amount.179 = rot_amount;
        D.29586 = rot_amount.179 >> 1;
        D.29587 = D.29586 & 15;
        D.29588 = D.29587 << 8;
        D.29589 = D.29584 | D.29588;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29809 = D.29589 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29810 = D.29809 | D.29441;
        D.29819 = D.29810 | -491782144;
        D.29820 = (unsigned int) D.29819;
        *__ainstrp = D.29820;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25918>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29803 = D.29442 | -528482304;
        D.29804 = (unsigned int) D.29803;
        *__ainstrp = D.29804;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25920>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29803 = D.29442 | -528482304;
        D.29804 = (unsigned int) D.29803;
        *__ainstrp = D.29804;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25922>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29821 = D.29442 | -532676608;
        D.29822 = (unsigned int) D.29821;
        *__ainstrp = D.29822;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25924>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29821 = D.29442 | -532676608;
        D.29822 = (unsigned int) D.29821;
        *__ainstrp = D.29822;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25926>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29805 = D.29442 | -525336576;
        D.29806 = (unsigned int) D.29805;
        *__ainstrp = D.29806;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25928>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29805 = D.29442 | -525336576;
        D.29806 = (unsigned int) D.29805;
        *__ainstrp = D.29806;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25930>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29823 = D.29442 | -523239424;
        D.29824 = (unsigned int) D.29823;
        *__ainstrp = D.29824;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25932>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29823 = D.29442 | -523239424;
        D.29824 = (unsigned int) D.29823;
        *__ainstrp = D.29824;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25934>:
      <D.25935>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29825 = D.29442 | -531628032;
        D.29826 = (unsigned int) D.29825;
        *__ainstrp = D.29826;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25937>:
      D.29301 = ins->data.op[1].const_val;
      D.29302 = (unsigned int) D.29301;
      imm8 = mono_arm_is_rotated_imm8 (D.29302, &rot_amount);
      D.29579 = imm8 < 0;
      D.29580 = (long int) D.29579;
      D.29581 = __builtin_expect (D.29580, 0);
      if (D.29581 != 0) goto <D.29827>; else goto <D.29828>;
      <D.29827>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4430, "imm8 >= 0");
      <D.29828>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29584 = imm8 & 255;
        rot_amount.179 = rot_amount;
        D.29586 = rot_amount.179 >> 1;
        D.29587 = D.29586 & 15;
        D.29588 = D.29587 << 8;
        D.29589 = D.29584 | D.29588;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29809 = D.29589 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29810 = D.29809 | D.29441;
        D.29829 = D.29810 | -498073600;
        D.29830 = (unsigned int) D.29829;
        *__ainstrp = D.29830;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25939>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29821 = D.29442 | -532676608;
        D.29822 = (unsigned int) D.29821;
        *__ainstrp = D.29822;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25941>:
      <D.25942>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29823 = D.29442 | -523239424;
        D.29824 = (unsigned int) D.29823;
        *__ainstrp = D.29824;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25944>:
      <D.25945>:
      D.29301 = ins->data.op[1].const_val;
      D.29302 = (unsigned int) D.29301;
      imm8 = mono_arm_is_rotated_imm8 (D.29302, &rot_amount);
      D.29579 = imm8 < 0;
      D.29580 = (long int) D.29579;
      D.29581 = __builtin_expect (D.29580, 0);
      if (D.29581 != 0) goto <D.29831>; else goto <D.29832>;
      <D.29831>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4443, "imm8 >= 0");
      <D.29832>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29584 = imm8 & 255;
        rot_amount.179 = rot_amount;
        D.29586 = rot_amount.179 >> 1;
        D.29587 = D.29586 & 15;
        D.29588 = D.29587 << 8;
        D.29589 = D.29584 | D.29588;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29809 = D.29589 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29810 = D.29809 | D.29441;
        D.29833 = D.29810 | -499122176;
        D.29834 = (unsigned int) D.29833;
        *__ainstrp = D.29834;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25947>:
      <D.25948>:
      D.29301 = ins->data.op[1].const_val;
      D.29302 = (unsigned int) D.29301;
      imm8 = mono_arm_is_rotated_imm8 (D.29302, &rot_amount);
      D.29579 = imm8 < 0;
      D.29580 = (long int) D.29579;
      D.29581 = __builtin_expect (D.29580, 0);
      if (D.29581 != 0) goto <D.29835>; else goto <D.29836>;
      <D.29835>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4449, "imm8 >= 0");
      <D.29836>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29584 = imm8 & 255;
        rot_amount.179 = rot_amount;
        D.29586 = rot_amount.179 >> 1;
        D.29587 = D.29586 & 15;
        D.29588 = D.29587 << 8;
        D.29589 = D.29584 | D.29588;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29809 = D.29589 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29810 = D.29809 | D.29441;
        D.29837 = D.29810 | -489684992;
        D.29838 = (unsigned int) D.29837;
        *__ainstrp = D.29838;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25950>:
      D.29301 = ins->data.op[1].const_val;
      D.29302 = (unsigned int) D.29301;
      imm8 = mono_arm_is_rotated_imm8 (D.29302, &rot_amount);
      D.29579 = imm8 < 0;
      D.29580 = (long int) D.29579;
      D.29581 = __builtin_expect (D.29580, 0);
      if (D.29581 != 0) goto <D.29839>; else goto <D.29840>;
      <D.29839>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4454, "imm8 >= 0");
      <D.29840>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29584 = imm8 & 255;
        rot_amount.179 = rot_amount;
        D.29586 = rot_amount.179 >> 1;
        D.29587 = D.29586 & 15;
        D.29588 = D.29587 << 8;
        D.29589 = D.29584 | D.29588;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29809 = D.29589 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29810 = D.29809 | D.29441;
        D.29841 = D.29810 | -495976448;
        D.29842 = (unsigned int) D.29841;
        *__ainstrp = D.29842;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25952>:
      D.29301 = ins->data.op[1].const_val;
      D.29302 = (unsigned int) D.29301;
      imm8 = mono_arm_is_rotated_imm8 (D.29302, &rot_amount);
      D.29579 = imm8 < 0;
      D.29580 = (long int) D.29579;
      D.29581 = __builtin_expect (D.29580, 0);
      if (D.29581 != 0) goto <D.29843>; else goto <D.29844>;
      <D.29843>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4459, "imm8 >= 0");
      <D.29844>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29584 = imm8 & 255;
        rot_amount.179 = rot_amount;
        D.29586 = rot_amount.179 >> 1;
        D.29587 = D.29586 & 15;
        D.29588 = D.29587 << 8;
        D.29589 = D.29584 | D.29588;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29809 = D.29589 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29810 = D.29809 | D.29441;
        D.29845 = D.29810 | -488636416;
        D.29846 = (unsigned int) D.29845;
        *__ainstrp = D.29846;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25954>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29847 = D.29442 | -536870912;
        D.29848 = (unsigned int) D.29847;
        *__ainstrp = D.29848;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25956>:
      <D.25957>:
      D.29301 = ins->data.op[1].const_val;
      D.29302 = (unsigned int) D.29301;
      imm8 = mono_arm_is_rotated_imm8 (D.29302, &rot_amount);
      D.29579 = imm8 < 0;
      D.29580 = (long int) D.29579;
      D.29581 = __builtin_expect (D.29580, 0);
      if (D.29581 != 0) goto <D.29849>; else goto <D.29850>;
      <D.29849>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4468, "imm8 >= 0");
      <D.29850>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29584 = imm8 & 255;
        rot_amount.179 = rot_amount;
        D.29586 = rot_amount.179 >> 1;
        D.29587 = D.29586 & 15;
        D.29588 = D.29587 << 8;
        D.29589 = D.29584 | D.29588;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29809 = D.29589 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29810 = D.29809 | D.29441;
        D.29851 = D.29810 | -503316480;
        D.29852 = (unsigned int) D.29851;
        *__ainstrp = D.29852;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25959>:
      v7s_supported.191 = v7s_supported;
      D.29854 = v7s_supported.191 == 0;
      D.29855 = (long int) D.29854;
      D.29856 = __builtin_expect (D.29855, 0);
      if (D.29856 != 0) goto <D.29857>; else goto <D.29858>;
      <D.29857>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4472, "v7s_supported");
      <D.29858>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.29859 = D.29312 | -418320384;
        D.29426 = ins->sreg2;
        D.29860 = D.29426 << 8;
        D.29861 = D.29859 | D.29860;
        D.29862 = D.29861 | 16;
        D.29371 = ins->sreg1;
        D.29863 = D.29862 | D.29371;
        D.29864 = (unsigned int) D.29863;
        *__ainstrp = D.29864;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25961>:
      v7s_supported.191 = v7s_supported;
      D.29854 = v7s_supported.191 == 0;
      D.29855 = (long int) D.29854;
      D.29856 = __builtin_expect (D.29855, 0);
      if (D.29856 != 0) goto <D.29865>; else goto <D.29866>;
      <D.29865>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4476, "v7s_supported");
      <D.29866>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.29867 = D.29312 | -416223232;
        D.29426 = ins->sreg2;
        D.29860 = D.29426 << 8;
        D.29868 = D.29867 | D.29860;
        D.29869 = D.29868 | 16;
        D.29371 = ins->sreg1;
        D.29870 = D.29869 | D.29371;
        D.29871 = (unsigned int) D.29870;
        *__ainstrp = D.29871;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25963>:
      v7s_supported.191 = v7s_supported;
      D.29854 = v7s_supported.191 == 0;
      D.29855 = (long int) D.29854;
      D.29856 = __builtin_expect (D.29855, 0);
      if (D.29856 != 0) goto <D.29872>; else goto <D.29873>;
      <D.29872>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4480, "v7s_supported");
      <D.29873>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29860 = D.29426 << 8;
        D.29874 = D.29860 | -417402864;
        D.29371 = ins->sreg1;
        D.29875 = D.29874 | D.29371;
        D.29876 = (unsigned int) D.29875;
        *__ainstrp = D.29876;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.29877 = D.29312 | -530579456;
        D.29371 = ins->sreg1;
        D.29372 = D.29371 << 12;
        D.29878 = D.29877 | D.29372;
        D.29426 = ins->sreg2;
        D.29860 = D.29426 << 8;
        D.29879 = D.29878 | D.29860;
        D.29880 = D.29879 | 158;
        D.29881 = (unsigned int) D.29880;
        *__ainstrp = D.29881;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25966>:
      v7s_supported.191 = v7s_supported;
      D.29854 = v7s_supported.191 == 0;
      D.29855 = (long int) D.29854;
      D.29856 = __builtin_expect (D.29855, 0);
      if (D.29856 != 0) goto <D.29882>; else goto <D.29883>;
      <D.29882>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4485, "v7s_supported");
      <D.29883>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29860 = D.29426 << 8;
        D.29884 = D.29860 | -415305712;
        D.29371 = ins->sreg1;
        D.29885 = D.29884 | D.29371;
        D.29886 = (unsigned int) D.29885;
        *__ainstrp = D.29886;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.29877 = D.29312 | -530579456;
        D.29371 = ins->sreg1;
        D.29372 = D.29371 << 12;
        D.29878 = D.29877 | D.29372;
        D.29426 = ins->sreg2;
        D.29860 = D.29426 << 8;
        D.29879 = D.29878 | D.29860;
        D.29880 = D.29879 | 158;
        D.29881 = (unsigned int) D.29880;
        *__ainstrp = D.29881;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25969>:
      <D.25970>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 4491);
      <D.25971>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29887 = D.29442 | -511705088;
        D.29888 = (unsigned int) D.29887;
        *__ainstrp = D.29888;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25973>:
      <D.25974>:
      D.29301 = ins->data.op[1].const_val;
      D.29302 = (unsigned int) D.29301;
      imm8 = mono_arm_is_rotated_imm8 (D.29302, &rot_amount);
      D.29579 = imm8 < 0;
      D.29580 = (long int) D.29579;
      D.29581 = __builtin_expect (D.29580, 0);
      if (D.29581 != 0) goto <D.29889>; else goto <D.29890>;
      <D.29889>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4498, "imm8 >= 0");
      <D.29890>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29584 = imm8 & 255;
        rot_amount.179 = rot_amount;
        D.29586 = rot_amount.179 >> 1;
        D.29587 = D.29586 & 15;
        D.29588 = D.29587 << 8;
        D.29589 = D.29584 | D.29588;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29809 = D.29589 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29810 = D.29809 | D.29441;
        D.29891 = D.29810 | -478150656;
        D.29892 = (unsigned int) D.29891;
        *__ainstrp = D.29892;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25976>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29440 = D.29426 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29442 = D.29440 | D.29441;
        D.29893 = D.29442 | -534773760;
        D.29894 = (unsigned int) D.29893;
        *__ainstrp = D.29894;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25978>:
      <D.25979>:
      D.29301 = ins->data.op[1].const_val;
      D.29302 = (unsigned int) D.29301;
      imm8 = mono_arm_is_rotated_imm8 (D.29302, &rot_amount);
      D.29579 = imm8 < 0;
      D.29580 = (long int) D.29579;
      D.29581 = __builtin_expect (D.29580, 0);
      if (D.29581 != 0) goto <D.29895>; else goto <D.29896>;
      <D.29895>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4507, "imm8 >= 0");
      <D.29896>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29584 = imm8 & 255;
        rot_amount.179 = rot_amount;
        D.29586 = rot_amount.179 >> 1;
        D.29587 = D.29586 & 15;
        D.29588 = D.29587 << 8;
        D.29589 = D.29584 | D.29588;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29809 = D.29589 | D.29291;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29810 = D.29809 | D.29441;
        D.29897 = D.29810 | -501219328;
        D.29898 = (unsigned int) D.29897;
        *__ainstrp = D.29898;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25981>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29899 = D.29371 | 16;
        D.29426 = ins->sreg2;
        D.29860 = D.29426 << 8;
        D.29900 = D.29899 | D.29860;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29901 = D.29900 | D.29291;
        D.29902 = D.29901 | -509607936;
        D.29903 = (unsigned int) D.29902;
        *__ainstrp = D.29903;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25983>:
      <D.25984>:
      D.29301 = ins->data.op[1].const_val;
      if (D.29301 != 0) goto <D.29904>; else goto <D.29905>;
      <D.29904>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29301 = ins->data.op[1].const_val;
        D.29906 = D.29301 & 31;
        D.29907 = D.29906 << 7;
        D.29908 = D.29371 | D.29907;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29909 = D.29908 | D.29291;
        D.29910 = D.29909 | -509607936;
        D.29911 = (unsigned int) D.29910;
        *__ainstrp = D.29911;
        code = __ainstrp + 4;
      }
      goto <D.29912>;
      <D.29905>:
      D.29290 = ins->dreg;
      D.29371 = ins->sreg1;
      if (D.29290 != D.29371) goto <D.29913>; else goto <D.29914>;
      <D.29913>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29915 = D.29371 | D.29291;
        D.29916 = D.29915 | -509607936;
        D.29917 = (unsigned int) D.29916;
        *__ainstrp = D.29917;
        code = __ainstrp + 4;
      }
      <D.29914>:
      <D.29912>:
      goto <D.25790>;
      <D.25987>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29918 = D.29371 | 80;
        D.29426 = ins->sreg2;
        D.29860 = D.29426 << 8;
        D.29919 = D.29918 | D.29860;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29920 = D.29919 | D.29291;
        D.29921 = D.29920 | -509607936;
        D.29922 = (unsigned int) D.29921;
        *__ainstrp = D.29922;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25989>:
      <D.25990>:
      D.29301 = ins->data.op[1].const_val;
      if (D.29301 != 0) goto <D.29923>; else goto <D.29924>;
      <D.29923>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29925 = D.29371 | 64;
        D.29301 = ins->data.op[1].const_val;
        D.29906 = D.29301 & 31;
        D.29907 = D.29906 << 7;
        D.29926 = D.29925 | D.29907;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29927 = D.29926 | D.29291;
        D.29928 = D.29927 | -509607936;
        D.29929 = (unsigned int) D.29928;
        *__ainstrp = D.29929;
        code = __ainstrp + 4;
      }
      goto <D.29930>;
      <D.29924>:
      D.29290 = ins->dreg;
      D.29371 = ins->sreg1;
      if (D.29290 != D.29371) goto <D.29931>; else goto <D.29932>;
      <D.29931>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29915 = D.29371 | D.29291;
        D.29916 = D.29915 | -509607936;
        D.29917 = (unsigned int) D.29916;
        *__ainstrp = D.29917;
        code = __ainstrp + 4;
      }
      <D.29932>:
      <D.29930>:
      goto <D.25790>;
      <D.25993>:
      <D.25994>:
      D.29301 = ins->data.op[1].const_val;
      if (D.29301 != 0) goto <D.29933>; else goto <D.29934>;
      <D.29933>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29935 = D.29371 | 32;
        D.29301 = ins->data.op[1].const_val;
        D.29906 = D.29301 & 31;
        D.29907 = D.29906 << 7;
        D.29936 = D.29935 | D.29907;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29937 = D.29936 | D.29291;
        D.29938 = D.29937 | -509607936;
        D.29939 = (unsigned int) D.29938;
        *__ainstrp = D.29939;
        code = __ainstrp + 4;
      }
      goto <D.29940>;
      <D.29934>:
      D.29290 = ins->dreg;
      D.29371 = ins->sreg1;
      if (D.29290 != D.29371) goto <D.29941>; else goto <D.29942>;
      <D.29941>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29915 = D.29371 | D.29291;
        D.29916 = D.29915 | -509607936;
        D.29917 = (unsigned int) D.29916;
        *__ainstrp = D.29917;
        code = __ainstrp + 4;
      }
      <D.29942>:
      <D.29940>:
      goto <D.25790>;
      <D.25997>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29943 = D.29371 | 48;
        D.29426 = ins->sreg2;
        D.29860 = D.29426 << 8;
        D.29944 = D.29943 | D.29860;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29945 = D.29944 | D.29291;
        D.29946 = D.29945 | -509607936;
        D.29947 = (unsigned int) D.29946;
        *__ainstrp = D.29947;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.25999>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29915 = D.29371 | D.29291;
        D.29948 = D.29915 | -505413632;
        D.29949 = (unsigned int) D.29948;
        *__ainstrp = D.29949;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26001>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.29950 = D.29291 | D.29441;
        D.29951 = D.29950 | -497025024;
        D.29952 = (unsigned int) D.29951;
        *__ainstrp = D.29952;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26003>:
      D.29290 = ins->dreg;
      D.29426 = ins->sreg2;
      if (D.29290 == D.29426) goto <D.29953>; else goto <D.29954>;
      <D.29953>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29426 = ins->sreg2;
        D.29860 = D.29426 << 8;
        D.29955 = D.29371 | D.29860;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.29956 = D.29955 | D.29312;
        D.29957 = D.29956 | -536870768;
        D.29958 = (unsigned int) D.29957;
        *__ainstrp = D.29958;
        code = __ainstrp + 4;
      }
      goto <D.29959>;
      <D.29954>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.29371 = ins->sreg1;
        D.29960 = D.29371 << 8;
        D.29961 = D.29426 | D.29960;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.29962 = D.29961 | D.29312;
        D.29963 = D.29962 | -536870768;
        D.29964 = (unsigned int) D.29963;
        *__ainstrp = D.29964;
        code = __ainstrp + 4;
      }
      <D.29959>:
      goto <D.25790>;
      <D.26006>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 4553);
      <D.26007>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29426 = ins->sreg2;
        D.29860 = D.29426 << 8;
        D.29955 = D.29371 | D.29860;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.29956 = D.29955 | D.29312;
        D.29957 = D.29956 | -536870768;
        D.29958 = (unsigned int) D.29957;
        *__ainstrp = D.29958;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26009>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29426 = ins->sreg2;
        D.29860 = D.29426 << 8;
        D.29955 = D.29371 | D.29860;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.29956 = D.29955 | D.29312;
        D.29957 = D.29956 | -536870768;
        D.29958 = (unsigned int) D.29957;
        *__ainstrp = D.29958;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26011>:
      D.29290 = ins->dreg;
      D.29288 = ins->data.op[0].const_val;
      D.29421 = (unsigned int) D.29288;
      code = mono_arm_emit_load_imm (code, D.29290, D.29421);
      goto <D.25790>;
      <D.26012>:
      offset.153 = offset;
      offset.192 = (int) offset.153;
      D.29966 = ins->data.op[1].src;
      D.29967 = (<unnamed type>) D.29966;
      D.29968 = ins->data.op[0].p;
      mono_add_patch_info (cfg, offset.192, D.29967, D.29968);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29969 = D.29291 | -442564608;
        D.29970 = (unsigned int) D.29969;
        *__ainstrp = D.29970;
        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;
        D.29290 = ins->dreg;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29971 = D.29290 | D.29291;
        D.29972 = D.29971 | -409010176;
        D.29973 = (unsigned int) D.29972;
        *__ainstrp = D.29973;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26016>:
      offset.153 = offset;
      offset.192 = (int) offset.153;
      D.29968 = ins->data.op[0].p;
      mono_add_patch_info (cfg, offset.192, 49, D.29968);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29969 = D.29291 | -442564608;
        D.29970 = (unsigned int) D.29969;
        *__ainstrp = D.29970;
        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;
        D.29290 = ins->dreg;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29971 = D.29290 | D.29291;
        D.29972 = D.29971 | -409010176;
        D.29973 = (unsigned int) D.29972;
        *__ainstrp = D.29973;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26020>:
      <D.26021>:
      <D.26022>:
      D.29290 = ins->dreg;
      D.29371 = ins->sreg1;
      if (D.29290 != D.29371) goto <D.29974>; else goto <D.29975>;
      <D.29974>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.29915 = D.29371 | D.29291;
        D.29916 = D.29915 | -509607936;
        D.29917 = (unsigned int) D.29916;
        *__ainstrp = D.29917;
        code = __ainstrp + 4;
      }
      <D.29975>:
      goto <D.25790>;
      <D.26024>:
      {
        int saved;

        saved = ins->sreg2;
        D.29426 = ins->sreg2;
        if (D.29426 == 0) goto <D.29976>; else goto <D.29977>;
        <D.29976>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29426 = ins->sreg2;
          D.29978 = D.29426 | -509550592;
          D.29979 = (unsigned int) D.29978;
          *__ainstrp = D.29979;
          code = __ainstrp + 4;
        }
        saved = 14;
        <D.29977>:
        D.29371 = ins->sreg1;
        if (D.29371 != 0) goto <D.29980>; else goto <D.29981>;
        <D.29980>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29371 = ins->sreg1;
          D.29982 = D.29371 | -509607936;
          D.29983 = (unsigned int) D.29982;
          *__ainstrp = D.29983;
          code = __ainstrp + 4;
        }
        <D.29981>:
        if (saved != 1) goto <D.29984>; else goto <D.29985>;
        <D.29984>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29986 = saved | -509603840;
          D.29987 = (unsigned int) D.29986;
          *__ainstrp = D.29987;
          code = __ainstrp + 4;
        }
        <D.29985>:
        goto <D.25790>;
      }
      <D.26029>:
      if (1 != 0) goto <D.29988>; else goto <D.29989>;
      <D.29988>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.29992 = D.29991 | 246418240;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.29995 = D.29992 | D.29994;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.29997 = D.29995 | D.29996;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.29999 = D.29998 << 5;
        D.30000 = D.29997 | D.29999;
        D.30001 = D.30000 | -536870912;
        D.30002 = (unsigned int) D.30001;
        *__ainstrp = D.30002;
        code = __ainstrp + 4;
      }
      <D.29989>:
      goto <D.25790>;
      <D.26031>:
      if (1 != 0) goto <D.30003>; else goto <D.30004>;
      <D.30003>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30005 = D.29991 | 246877120;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30006 = D.30005 | D.29994;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30007 = D.30006 | D.29996;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.29999 = D.29998 << 5;
        D.30008 = D.30007 | D.29999;
        D.30009 = D.30008 | -536870912;
        D.30010 = (unsigned int) D.30009;
        *__ainstrp = D.30010;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30011 = D.29991 | 246876864;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30012 = D.30011 | D.29994;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.30013 = D.30012 | D.29990;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.30014 = D.29993 << 5;
        D.30015 = D.30013 | D.30014;
        D.30016 = D.30015 | -536870912;
        D.30017 = (unsigned int) D.30016;
        *__ainstrp = D.30017;
        code = __ainstrp + 4;
      }
      <D.30004>:
      goto <D.25790>;
      <D.26034>:
      D.29255 = cfg->method;
      D.30018 = BIT_FIELD_REF <*D.29255, 8, 168>;
      D.30019 = D.30018 & 1;
      D.30020 = D.30019 != 0;
      D.30021 = (long int) D.30020;
      D.30022 = __builtin_expect (D.30021, 0);
      if (D.30022 != 0) goto <D.30023>; else goto <D.30024>;
      <D.30023>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4618, "!cfg->method->save_lmf");
      <D.30024>:
      code = emit_load_volatile_arguments (cfg, code);
      D.30025 = cfg->frame_reg;
      D.30026 = (int) D.30025;
      D.30027 = cfg->stack_usage;
      D.30028 = (int) D.30027;
      code = emit_big_add (code, 13, D.30026, D.30028);
      iphone_abi.193 = iphone_abi;
      if (iphone_abi.193 != 0) goto <D.30030>; else goto <D.30031>;
      <D.30030>:
      D.30032 = cfg->used_int_regs;
      if (D.30032 != 0) goto <D.30033>; else goto <D.30034>;
      <D.30033>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.30032 = cfg->used_int_regs;
        D.30035 = D.30032 | 3904700416;
        *__ainstrp = D.30035;
        code = __ainstrp + 4;
      }
      <D.30034>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3904716928;
        code = __ainstrp + 4;
      }
      goto <D.30036>;
      <D.30031>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.30032 = cfg->used_int_regs;
        D.30037 = D.30032 | 3904716800;
        *__ainstrp = D.30037;
        code = __ainstrp + 4;
      }
      <D.30036>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.29968 = ins->data.op[0].p;
      mono_add_patch_info (cfg, D.29264, 4, D.29968);
      D.29597 = BIT_FIELD_REF <*cfg, 8, 3392>;
      D.29598 = D.29597 & 64;
      if (D.29598 != 0) goto <D.30038>; else goto <D.30039>;
      <D.30038>:
      {
        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 = 3886018572;
        code = __ainstrp + 4;
      }
      goto <D.30040>;
      <D.30039>:
      code = mono_arm_patchable_b (code, 14);
      <D.30040>:
      goto <D.25790>;
      <D.26041>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.30041 = D.29441 | -439296000;
        D.30042 = (unsigned int) D.30041;
        *__ainstrp = D.30042;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26043>:
      D.30043 = cfg->sig_cookie;
      D.30044 = D.30043 > 127;
      D.30045 = (long int) D.30044;
      D.30046 = __builtin_expect (D.30045, 0);
      if (D.30046 != 0) goto <D.30047>; else goto <D.30048>;
      <D.30047>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4646, "cfg->sig_cookie < 128");
      <D.30048>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.30043 = cfg->sig_cookie;
        D.30049 = ABS_EXPR <D.30043>;
        D.30050 = (unsigned int) D.30049;
        D.30025 = cfg->frame_reg;
        D.30051 = D.30025 << 16;
        D.30052 = D.30050 | D.30051;
        D.30043 = cfg->sig_cookie;
        if (D.30043 >= 0) goto <D.30054>; else goto <D.30055>;
        <D.30054>:
        iftmp.194 = 8388608;
        goto <D.30056>;
        <D.30055>:
        iftmp.194 = 0;
        <D.30056>:
        D.30057 = D.30052 | iftmp.194;
        D.30058 = D.30057 | 3843080192;
        *__ainstrp = D.30058;
        code = __ainstrp + 4;
      }
      {
        int _imm12;

        _imm12 = 0;
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.30059 = ABS_EXPR <_imm12>;
          D.30060 = D.30059 | 49152;
          D.29371 = ins->sreg1;
          D.29441 = D.29371 << 16;
          D.30061 = D.30060 | D.29441;
          if (_imm12 >= 0) goto <D.30063>; else goto <D.30064>;
          <D.30063>:
          iftmp.195 = 8388608;
          goto <D.30065>;
          <D.30064>:
          iftmp.195 = 0;
          <D.30065>:
          D.30066 = D.30061 | iftmp.195;
          D.30067 = D.30066 | -452984832;
          D.30068 = (unsigned int) D.30067;
          *__ainstrp = D.30068;
          code = __ainstrp + 4;
        }
      }
      goto <D.25790>;
      <D.26047>:
      <D.26048>:
      <D.26049>:
      <D.26050>:
      <D.26051>:
      <D.26052>:
      call = ins;
      if (1 != 0) goto <D.30069>; else goto <D.30070>;
      <D.30069>:
      code = emit_float_args (cfg, call, code, &max_len, &offset);
      <D.30070>:
      D.29636 = ins->flags;
      D.29637 = (int) D.29636;
      D.29638 = D.29637 & 1;
      if (D.29638 != 0) goto <D.30071>; else goto <D.30072>;
      <D.30071>:
      offset.153 = offset;
      offset.192 = (int) offset.153;
      D.30073 = call->method;
      mono_add_patch_info (cfg, offset.192, 3, D.30073);
      goto <D.30074>;
      <D.30072>:
      offset.153 = offset;
      offset.192 = (int) offset.153;
      D.30075 = call->fptr;
      mono_add_patch_info (cfg, offset.192, 1, D.30075);
      <D.30074>:
      code = emit_call_seq (cfg, code);
      D.29636 = ins->flags;
      D.30076 = D.29636 | 128;
      ins->flags = D.30076;
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      ins->backend.pc_offset = D.29264;
      code = emit_move_return_value (cfg, ins, code);
      goto <D.25790>;
      <D.26053>:
      <D.26054>:
      <D.26055>:
      <D.26056>:
      <D.26057>:
      <D.26058>:
      if (1 != 0) goto <D.30077>; else goto <D.30078>;
      <D.30077>:
      code = emit_float_args (cfg, ins, code, &max_len, &offset);
      <D.30078>:
      D.29371 = ins->sreg1;
      code = emit_call_reg (code, D.29371);
      D.29636 = ins->flags;
      D.30076 = D.29636 | 128;
      ins->flags = D.30076;
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      ins->backend.pc_offset = D.29264;
      code = emit_move_return_value (cfg, ins, code);
      goto <D.25790>;
      <D.26059>:
      <D.26060>:
      <D.26061>:
      <D.26062>:
      <D.26063>:
      <D.26064>:
      {
        gboolean imt_arg;

        imt_arg = 0;
        D.29371 = ins->sreg1;
        D.30079 = D.29371 == 14;
        D.30080 = (long int) D.30079;
        D.30081 = __builtin_expect (D.30080, 0);
        if (D.30081 != 0) goto <D.30082>; else goto <D.30083>;
        <D.30082>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4693, "ins->sreg1 != ARMREG_LR");
        <D.30083>:
        call = ins;
        if (1 != 0) goto <D.30084>; else goto <D.30085>;
        <D.30084>:
        code = emit_float_args (cfg, call, code, &max_len, &offset);
        <D.30085>:
        D.30088 = BIT_FIELD_REF <*call, 8, 704>;
        D.30089 = D.30088 & 16;
        if (D.30089 != 0) goto <D.30086>; else goto <D.30090>;
        <D.30090>:
        D.30073 = call->method;
        D.30091 = D.30073->klass;
        D.30092 = D.30091->flags;
        D.30093 = D.30092 & 32;
        if (D.30093 != 0) goto <D.30086>; else goto <D.30087>;
        <D.30086>:
        imt_arg = 1;
        <D.30087>:
        D.29288 = ins->data.op[0].const_val;
        D.29304 = (unsigned int) D.29288;
        D.29305 = D.29304 + 4095;
        if (D.29305 > 8190) goto <D.30094>; else goto <D.30095>;
        <D.30094>:
        D.29288 = ins->data.op[0].const_val;
        D.29421 = (unsigned int) D.29288;
        code = mono_arm_emit_load_imm (code, 12, D.29421);
        <D.30095>:
        if (imt_arg != 0) goto <D.30096>; else goto <D.30097>;
        <D.30096>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          *__ainstrp = 3801079812;
          code = __ainstrp + 4;
        }
        goto <D.30098>;
        <D.30097>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          *__ainstrp = 3785416719;
          code = __ainstrp + 4;
        }
        <D.30098>:
        D.29288 = ins->data.op[0].const_val;
        D.29304 = (unsigned int) D.29288;
        D.29305 = D.29304 + 4095;
        if (D.29305 > 8190) goto <D.30099>; else goto <D.30100>;
        <D.30099>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29371 = ins->sreg1;
          D.29441 = D.29371 << 16;
          D.30101 = D.29441 | -409931764;
          D.30102 = (unsigned int) D.30101;
          *__ainstrp = D.30102;
          code = __ainstrp + 4;
        }
        goto <D.30103>;
        <D.30100>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29288 = ins->data.op[0].const_val;
          D.29289 = ABS_EXPR <D.29288>;
          D.30104 = D.29289 | 61440;
          D.29371 = ins->sreg1;
          D.29441 = D.29371 << 16;
          D.30105 = D.30104 | D.29441;
          D.30106 = D.30105 | 1048576;
          D.29288 = ins->data.op[0].const_val;
          if (D.29288 >= 0) goto <D.30108>; else goto <D.30109>;
          <D.30108>:
          iftmp.196 = 8388608;
          goto <D.30110>;
          <D.30109>:
          iftmp.196 = 0;
          <D.30110>:
          D.30111 = D.30106 | iftmp.196;
          D.30112 = D.30111 | -452984832;
          D.30113 = (unsigned int) D.30112;
          *__ainstrp = D.30113;
          code = __ainstrp + 4;
        }
        <D.30103>:
        if (imt_arg != 0) goto <D.30114>; else goto <D.30115>;
        <D.30114>:
        D.30088 = BIT_FIELD_REF <*call, 8, 704>;
        D.30089 = D.30088 & 16;
        if (D.30089 != 0) goto <D.30116>; else goto <D.30117>;
        <D.30116>:
        MEM[(void * *)code] = 0B;
        goto <D.30118>;
        <D.30117>:
        D.30073 = call->method;
        MEM[(void * *)code] = D.30073;
        <D.30118>:
        code = code + 4;
        <D.30115>:
        D.29636 = ins->flags;
        D.30076 = D.29636 | 128;
        ins->flags = D.30076;
        code.148 = (int) code;
        D.29241 = cfg->native_code;
        D.29263 = (int) D.29241;
        D.29264 = code.148 - D.29263;
        ins->backend.pc_offset = D.29264;
        code = emit_move_return_value (cfg, ins, code);
        goto <D.25790>;
      }
      <D.26070>:
      {
        int alloca_waste;

        D.30119 = cfg->param_area;
        alloca_waste = (int) D.30119;
        alloca_waste = alloca_waste + 7;
        alloca_waste = alloca_waste & -8;
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29290 = ins->dreg;
          D.29291 = D.29290 << 12;
          D.30120 = D.29291 | 7;
          D.29371 = ins->sreg1;
          D.29441 = D.29371 << 16;
          D.30121 = D.30120 | D.29441;
          D.30122 = D.30121 | -494927872;
          D.30123 = (unsigned int) D.30122;
          *__ainstrp = D.30123;
          code = __ainstrp + 4;
        }
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29290 = ins->dreg;
          D.29291 = D.29290 << 12;
          D.30120 = D.29291 | 7;
          D.29290 = ins->dreg;
          D.29312 = D.29290 << 16;
          D.30124 = D.30120 | D.29312;
          D.30125 = D.30124 | -473956352;
          D.30126 = (unsigned int) D.30125;
          *__ainstrp = D.30126;
          code = __ainstrp + 4;
        }
        if (alloca_waste != 0) goto <D.30127>; else goto <D.30128>;
        <D.30127>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.30129 = alloca_waste & 255;
          D.29290 = ins->dreg;
          D.29291 = D.29290 << 12;
          D.30130 = D.30129 | D.29291;
          D.29290 = ins->dreg;
          D.29312 = D.29290 << 16;
          D.30131 = D.30130 | D.29312;
          D.30132 = D.30131 | -494927872;
          D.30133 = (unsigned int) D.30132;
          *__ainstrp = D.30133;
          code = __ainstrp + 4;
        }
        <D.30128>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29290 = ins->dreg;
          D.30134 = D.29290 | -531771392;
          D.30135 = (unsigned int) D.30134;
          *__ainstrp = D.30135;
          code = __ainstrp + 4;
        }
        D.29636 = ins->flags;
        D.29637 = (int) D.29636;
        D.29638 = D.29637 & 1;
        if (D.29638 != 0) goto <D.30136>; else goto <D.30137>;
        <D.30136>:
        {
          guint8 * start_loop;
          guint8 * branch_to_cond;

          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            *__ainstrp = 3818971136;
            code = __ainstrp + 4;
          }
          branch_to_cond = code;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            *__ainstrp = 3925868544;
            code = __ainstrp + 4;
          }
          start_loop = code;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.29290 = ins->dreg;
            D.30138 = D.29290 | -410132480;
            D.30139 = (unsigned int) D.30138;
            *__ainstrp = D.30139;
            code = __ainstrp + 4;
          }
          arm_patch (branch_to_cond, code);
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.29290 = ins->dreg;
            D.29291 = D.29290 << 12;
            D.30140 = (unsigned int) D.29291;
            D.29290 = ins->dreg;
            D.29312 = D.29290 << 16;
            D.30141 = (unsigned int) D.29312;
            D.30142 = D.30140 | D.30141;
            D.30143 = D.30142 | 3796893700;
            *__ainstrp = D.30143;
            code = __ainstrp + 4;
          }
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            *__ainstrp = 2852126720;
            code = __ainstrp + 4;
          }
          D.30144 = code + 4294967292;
          arm_patch (D.30144, start_loop);
        }
        <D.30137>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.30129 = alloca_waste & 255;
          D.29290 = ins->dreg;
          D.29291 = D.29290 << 12;
          D.30130 = D.30129 | D.29291;
          D.30145 = D.30130 | -494075904;
          D.30146 = (unsigned int) D.30145;
          *__ainstrp = D.30146;
          code = __ainstrp + 4;
        }
        goto <D.25790>;
      }
      <D.26084>:
      {
        int i;
        struct MonoInst * var;

        var = cfg->dyn_call_var;
        D.30147 = var->opcode;
        D.30148 = D.30147 != 367;
        D.30149 = (long int) D.30148;
        D.30150 = __builtin_expect (D.30149, 0);
        if (D.30150 != 0) goto <D.30151>; else goto <D.30152>;
        <D.30151>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4773, "var->opcode == OP_REGOFFSET");
        <D.30152>:
        D.30153 = var->data.op[0].const_val;
        D.30154 = (unsigned int) D.30153;
        D.30155 = D.30154 + 4095;
        D.30156 = D.30155 > 8190;
        D.30157 = (long int) D.30156;
        D.30158 = __builtin_expect (D.30157, 0);
        if (D.30158 != 0) goto <D.30159>; else goto <D.30160>;
        <D.30159>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4774, "arm_is_imm12 (var->inst_offset)");
        <D.30160>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29371 = ins->sreg1;
          D.30161 = D.29371 | -509550592;
          D.30162 = (unsigned int) D.30161;
          *__ainstrp = D.30162;
          code = __ainstrp + 4;
        }
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29426 = ins->sreg2;
          D.30163 = D.29426 | -509558784;
          D.30164 = (unsigned int) D.30163;
          *__ainstrp = D.30164;
          code = __ainstrp + 4;
        }
        {
          int _imm12;

          D.30153 = var->data.op[0].const_val;
          if (D.30153 >= -4095) goto <D.30166>; else goto <D.30167>;
          <D.30166>:
          D.30153 = var->data.op[0].const_val;
          iftmp.197 = MIN_EXPR <D.30153, 4095>;
          goto <D.30168>;
          <D.30167>:
          iftmp.197 = -4095;
          <D.30168>:
          _imm12 = iftmp.197;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.30169 = ABS_EXPR <_imm12>;
            D.30170 = D.30169 | 57344;
            D.30171 = var->sreg1;
            D.30172 = D.30171 << 16;
            D.30173 = D.30170 | D.30172;
            if (_imm12 >= 0) goto <D.30175>; else goto <D.30176>;
            <D.30175>:
            iftmp.198 = 8388608;
            goto <D.30177>;
            <D.30176>:
            iftmp.198 = 0;
            <D.30177>:
            D.30178 = D.30173 | iftmp.198;
            D.30179 = D.30178 | -452984832;
            D.30180 = (unsigned int) D.30179;
            *__ainstrp = D.30180;
            code = __ainstrp + 4;
          }
        }
        i = 0;
        goto <D.26095>;
        <D.26094>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.30181 = i + 4;
          D.30182 = (unsigned int) D.30181;
          D.30183 = D.30182 * 4;
          D.30181 = i + 4;
          D.30182 = (unsigned int) D.30181;
          D.30183 = D.30182 * 4;
          D.30185 = (int) D.30183;
          if (D.30185 >= 0) goto <D.30186>; else goto <D.30187>;
          <D.30186>:
          iftmp.199 = 8388608;
          goto <D.30188>;
          <D.30187>:
          iftmp.199 = 0;
          <D.30188>:
          D.30189 = D.30183 | iftmp.199;
          D.30190 = D.30189 | 3843948544;
          *__ainstrp = D.30190;
          code = __ainstrp + 4;
        }
        {
          int _imm12;

          i.201 = (unsigned int) i;
          D.30193 = i.201 * 4;
          D.30194 = (int) D.30193;
          if (D.30194 >= -4095) goto <D.30195>; else goto <D.30196>;
          <D.30195>:
          i.201 = (unsigned int) i;
          D.30193 = i.201 * 4;
          D.30194 = (int) D.30193;
          iftmp.200 = MIN_EXPR <D.30194, 4095>;
          goto <D.30197>;
          <D.30196>:
          iftmp.200 = -4095;
          <D.30197>:
          _imm12 = iftmp.200;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.30198 = ABS_EXPR <_imm12>;
            D.30199 = D.30198 | 851968;
            if (_imm12 >= 0) goto <D.30201>; else goto <D.30202>;
            <D.30201>:
            iftmp.202 = 8388608;
            goto <D.30203>;
            <D.30202>:
            iftmp.202 = 0;
            <D.30203>:
            D.30204 = D.30199 | iftmp.202;
            D.30205 = D.30204 | -452984832;
            D.30206 = (unsigned int) D.30205;
            *__ainstrp = D.30206;
            code = __ainstrp + 4;
          }
        }
        i = i + 1;
        <D.26095>:
        if (i <= 5) goto <D.26094>; else goto <D.26096>;
        <D.26096>:
        i = 0;
        goto <D.26099>;
        <D.26098>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          i.201 = (unsigned int) i;
          D.30193 = i.201 * 4;
          D.30207 = i << 12;
          D.30208 = (unsigned int) D.30207;
          D.30209 = D.30193 | D.30208;
          i.201 = (unsigned int) i;
          D.30193 = i.201 * 4;
          D.30194 = (int) D.30193;
          if (D.30194 >= 0) goto <D.30211>; else goto <D.30212>;
          <D.30211>:
          iftmp.203 = 8388608;
          goto <D.30213>;
          <D.30212>:
          iftmp.203 = 0;
          <D.30213>:
          D.30214 = D.30209 | iftmp.203;
          D.30215 = D.30214 | 3843948544;
          *__ainstrp = D.30215;
          code = __ainstrp + 4;
        }
        i = i + 1;
        <D.26099>:
        if (i <= 3) goto <D.26098>; else goto <D.26100>;
        <D.26100>:
        {
          arminstr_t * __ainstrp;

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

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

          __ainstrp = code;
          D.30153 = var->data.op[0].const_val;
          D.30216 = ABS_EXPR <D.30153>;
          D.30217 = D.30216 | 49152;
          D.30171 = var->sreg1;
          D.30172 = D.30171 << 16;
          D.30218 = D.30217 | D.30172;
          D.30219 = D.30218 | 1048576;
          D.30153 = var->data.op[0].const_val;
          if (D.30153 >= 0) goto <D.30221>; else goto <D.30222>;
          <D.30221>:
          iftmp.204 = 8388608;
          goto <D.30223>;
          <D.30222>:
          iftmp.204 = 0;
          <D.30223>:
          D.30224 = D.30219 | iftmp.204;
          D.30225 = D.30224 | -452984832;
          D.30226 = (unsigned int) D.30225;
          *__ainstrp = D.30226;
          code = __ainstrp + 4;
        }
        {
          int _imm12;

          _imm12 = 40;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.30227 = ABS_EXPR <_imm12>;
            D.30228 = D.30227 | 786432;
            if (_imm12 >= 0) goto <D.30230>; else goto <D.30231>;
            <D.30230>:
            iftmp.205 = 8388608;
            goto <D.30232>;
            <D.30231>:
            iftmp.205 = 0;
            <D.30232>:
            D.30233 = D.30228 | iftmp.205;
            D.30234 = D.30233 | -452984832;
            D.30235 = (unsigned int) D.30234;
            *__ainstrp = D.30235;
            code = __ainstrp + 4;
          }
        }
        {
          int _imm12;

          _imm12 = 44;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.30236 = ABS_EXPR <_imm12>;
            D.30237 = D.30236 | 790528;
            if (_imm12 >= 0) goto <D.30239>; else goto <D.30240>;
            <D.30239>:
            iftmp.206 = 8388608;
            goto <D.30241>;
            <D.30240>:
            iftmp.206 = 0;
            <D.30241>:
            D.30242 = D.30237 | iftmp.206;
            D.30243 = D.30242 | -452984832;
            D.30244 = (unsigned int) D.30243;
            *__ainstrp = D.30244;
            code = __ainstrp + 4;
          }
        }
        goto <D.25790>;
      }
      <D.26108>:
      D.29371 = ins->sreg1;
      if (D.29371 != 0) goto <D.30245>; else goto <D.30246>;
      <D.30245>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29982 = D.29371 | -509607936;
        D.29983 = (unsigned int) D.29982;
        *__ainstrp = D.29983;
        code = __ainstrp + 4;
      }
      <D.30246>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      mono_add_patch_info (cfg, D.29264, 7, "mono_arch_throw_exception");
      code = emit_call_seq (cfg, code);
      goto <D.25790>;
      <D.26110>:
      D.29371 = ins->sreg1;
      if (D.29371 != 0) goto <D.30247>; else goto <D.30248>;
      <D.30247>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29982 = D.29371 | -509607936;
        D.29983 = (unsigned int) D.29982;
        *__ainstrp = D.29983;
        code = __ainstrp + 4;
      }
      <D.30248>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      mono_add_patch_info (cfg, D.29264, 7, "mono_arch_rethrow_exception");
      code = emit_call_seq (cfg, code);
      goto <D.25790>;
      <D.26112>:
      {
        struct MonoInst * spvar;
        int i;
        int rot_amount;

        try
          {
            D.30249 = bb->region;
            D.30250 = (int) D.30249;
            spvar = mono_find_spvar_for_region (cfg, D.30250);
            D.30119 = cfg->param_area;
            if (D.30119 != 0) goto <D.30251>; else goto <D.30252>;
            <D.30251>:
            D.30119 = cfg->param_area;
            i = mono_arm_is_rotated_imm8 (D.30119, &rot_amount);
            if (i >= 0) goto <D.30253>; else goto <D.30254>;
            <D.30253>:
            {
              arminstr_t * __ainstrp;

              __ainstrp = code;
              D.30255 = i & 255;
              rot_amount.207 = rot_amount;
              D.30257 = rot_amount.207 >> 1;
              D.30258 = D.30257 & 15;
              D.30259 = D.30258 << 8;
              D.30260 = D.30255 | D.30259;
              D.30261 = D.30260 | -498216960;
              D.30262 = (unsigned int) D.30261;
              *__ainstrp = D.30262;
              code = __ainstrp + 4;
            }
            goto <D.30263>;
            <D.30254>:
            D.30119 = cfg->param_area;
            code = mono_arm_emit_load_imm (code, 12, D.30119);
            {
              arminstr_t * __ainstrp;

              __ainstrp = code;
              *__ainstrp = 3763195916;
              code = __ainstrp + 4;
            }
            <D.30263>:
            <D.30252>:
            D.30264 = spvar->data.op[0].const_val;
            D.30265 = (unsigned int) D.30264;
            D.30266 = D.30265 + 4095;
            if (D.30266 <= 8190) goto <D.30267>; else goto <D.30268>;
            <D.30267>:
            {
              int _imm12;

              D.30264 = spvar->data.op[0].const_val;
              if (D.30264 >= -4095) goto <D.30270>; else goto <D.30271>;
              <D.30270>:
              D.30264 = spvar->data.op[0].const_val;
              iftmp.208 = MIN_EXPR <D.30264, 4095>;
              goto <D.30272>;
              <D.30271>:
              iftmp.208 = -4095;
              <D.30272>:
              _imm12 = iftmp.208;
              {
                arminstr_t * __ainstrp;

                __ainstrp = code;
                D.30273 = ABS_EXPR <_imm12>;
                D.30274 = D.30273 | 57344;
                D.30275 = spvar->sreg1;
                D.30276 = D.30275 << 16;
                D.30277 = D.30274 | D.30276;
                if (_imm12 >= 0) goto <D.30279>; else goto <D.30280>;
                <D.30279>:
                iftmp.209 = 8388608;
                goto <D.30281>;
                <D.30280>:
                iftmp.209 = 0;
                <D.30281>:
                D.30282 = D.30277 | iftmp.209;
                D.30283 = D.30282 | -452984832;
                D.30284 = (unsigned int) D.30283;
                *__ainstrp = D.30284;
                code = __ainstrp + 4;
              }
            }
            goto <D.30285>;
            <D.30268>:
            D.30264 = spvar->data.op[0].const_val;
            D.30286 = (unsigned int) D.30264;
            code = mono_arm_emit_load_imm (code, 12, D.30286);
            {
              arminstr_t * __ainstrp;

              __ainstrp = code;
              D.30275 = spvar->sreg1;
              D.30276 = D.30275 << 16;
              D.30287 = D.30276 | -410984436;
              D.30288 = (unsigned int) D.30287;
              *__ainstrp = D.30288;
              code = __ainstrp + 4;
            }
            <D.30285>:
            goto <D.25790>;
          }
        finally
          {
            rot_amount = {CLOBBER};
          }
      }
      <D.26121>:
      {
        struct MonoInst * spvar;
        int i;
        int rot_amount;

        try
          {
            D.30249 = bb->region;
            D.30250 = (int) D.30249;
            spvar = mono_find_spvar_for_region (cfg, D.30250);
            D.30119 = cfg->param_area;
            if (D.30119 != 0) goto <D.30289>; else goto <D.30290>;
            <D.30289>:
            D.30119 = cfg->param_area;
            i = mono_arm_is_rotated_imm8 (D.30119, &rot_amount);
            if (i >= 0) goto <D.30291>; else goto <D.30292>;
            <D.30291>:
            {
              arminstr_t * __ainstrp;

              __ainstrp = code;
              D.30293 = i & 255;
              rot_amount.210 = rot_amount;
              D.30295 = rot_amount.210 >> 1;
              D.30296 = D.30295 & 15;
              D.30297 = D.30296 << 8;
              D.30298 = D.30293 | D.30297;
              D.30299 = D.30298 | -494022656;
              D.30300 = (unsigned int) D.30299;
              *__ainstrp = D.30300;
              code = __ainstrp + 4;
            }
            goto <D.30301>;
            <D.30292>:
            D.30119 = cfg->param_area;
            code = mono_arm_emit_load_imm (code, 12, D.30119);
            {
              arminstr_t * __ainstrp;

              __ainstrp = code;
              *__ainstrp = 3767390220;
              code = __ainstrp + 4;
            }
            <D.30301>:
            <D.30290>:
            D.29371 = ins->sreg1;
            if (D.29371 != 0) goto <D.30302>; else goto <D.30303>;
            <D.30302>:
            {
              arminstr_t * __ainstrp;

              __ainstrp = code;
              D.29371 = ins->sreg1;
              D.29982 = D.29371 | -509607936;
              D.29983 = (unsigned int) D.29982;
              *__ainstrp = D.29983;
              code = __ainstrp + 4;
            }
            <D.30303>:
            D.30304 = spvar->data.op[0].const_val;
            D.30305 = (unsigned int) D.30304;
            D.30306 = D.30305 + 4095;
            if (D.30306 <= 8190) goto <D.30307>; else goto <D.30308>;
            <D.30307>:
            {
              arminstr_t * __ainstrp;

              __ainstrp = code;
              D.30304 = spvar->data.op[0].const_val;
              D.30309 = ABS_EXPR <D.30304>;
              D.30310 = D.30309 | 49152;
              D.30311 = spvar->sreg1;
              D.30312 = D.30311 << 16;
              D.30313 = D.30310 | D.30312;
              D.30314 = D.30313 | 1048576;
              D.30304 = spvar->data.op[0].const_val;
              if (D.30304 >= 0) goto <D.30316>; else goto <D.30317>;
              <D.30316>:
              iftmp.211 = 8388608;
              goto <D.30318>;
              <D.30317>:
              iftmp.211 = 0;
              <D.30318>:
              D.30319 = D.30314 | iftmp.211;
              D.30320 = D.30319 | -452984832;
              D.30321 = (unsigned int) D.30320;
              *__ainstrp = D.30321;
              code = __ainstrp + 4;
            }
            goto <D.30322>;
            <D.30308>:
            D.30311 = spvar->sreg1;
            D.30323 = D.30311 == 12;
            D.30324 = (long int) D.30323;
            D.30325 = __builtin_expect (D.30324, 0);
            if (D.30325 != 0) goto <D.30326>; else goto <D.30327>;
            <D.30326>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4862, "ARMREG_IP != spvar->inst_basereg");
            <D.30327>:
            D.30304 = spvar->data.op[0].const_val;
            D.30328 = (unsigned int) D.30304;
            code = mono_arm_emit_load_imm (code, 12, D.30328);
            {
              arminstr_t * __ainstrp;

              __ainstrp = code;
              D.30311 = spvar->sreg1;
              D.30312 = D.30311 << 16;
              D.30329 = D.30312 | -409944052;
              D.30330 = (unsigned int) D.30329;
              *__ainstrp = D.30330;
              code = __ainstrp + 4;
            }
            <D.30322>:
            {
              arminstr_t * __ainstrp;

              __ainstrp = code;
              *__ainstrp = 3785420812;
              code = __ainstrp + 4;
            }
            goto <D.25790>;
          }
        finally
          {
            rot_amount = {CLOBBER};
          }
      }
      <D.26131>:
      {
        struct MonoInst * spvar;
        int i;
        int rot_amount;

        try
          {
            D.30249 = bb->region;
            D.30250 = (int) D.30249;
            spvar = mono_find_spvar_for_region (cfg, D.30250);
            D.30119 = cfg->param_area;
            if (D.30119 != 0) goto <D.30331>; else goto <D.30332>;
            <D.30331>:
            D.30119 = cfg->param_area;
            i = mono_arm_is_rotated_imm8 (D.30119, &rot_amount);
            if (i >= 0) goto <D.30333>; else goto <D.30334>;
            <D.30333>:
            {
              arminstr_t * __ainstrp;

              __ainstrp = code;
              D.30335 = i & 255;
              rot_amount.212 = rot_amount;
              D.30337 = rot_amount.212 >> 1;
              D.30338 = D.30337 & 15;
              D.30339 = D.30338 << 8;
              D.30340 = D.30335 | D.30339;
              D.30341 = D.30340 | -494022656;
              D.30342 = (unsigned int) D.30341;
              *__ainstrp = D.30342;
              code = __ainstrp + 4;
            }
            goto <D.30343>;
            <D.30334>:
            D.30119 = cfg->param_area;
            code = mono_arm_emit_load_imm (code, 12, D.30119);
            {
              arminstr_t * __ainstrp;

              __ainstrp = code;
              *__ainstrp = 3767390220;
              code = __ainstrp + 4;
            }
            <D.30343>:
            <D.30332>:
            D.30344 = spvar->data.op[0].const_val;
            D.30345 = (unsigned int) D.30344;
            D.30346 = D.30345 + 4095;
            if (D.30346 <= 8190) goto <D.30347>; else goto <D.30348>;
            <D.30347>:
            {
              arminstr_t * __ainstrp;

              __ainstrp = code;
              D.30344 = spvar->data.op[0].const_val;
              D.30349 = ABS_EXPR <D.30344>;
              D.30350 = D.30349 | 49152;
              D.30351 = spvar->sreg1;
              D.30352 = D.30351 << 16;
              D.30353 = D.30350 | D.30352;
              D.30354 = D.30353 | 1048576;
              D.30344 = spvar->data.op[0].const_val;
              if (D.30344 >= 0) goto <D.30356>; else goto <D.30357>;
              <D.30356>:
              iftmp.213 = 8388608;
              goto <D.30358>;
              <D.30357>:
              iftmp.213 = 0;
              <D.30358>:
              D.30359 = D.30354 | iftmp.213;
              D.30360 = D.30359 | -452984832;
              D.30361 = (unsigned int) D.30360;
              *__ainstrp = D.30361;
              code = __ainstrp + 4;
            }
            goto <D.30362>;
            <D.30348>:
            D.30351 = spvar->sreg1;
            D.30363 = D.30351 == 12;
            D.30364 = (long int) D.30363;
            D.30365 = __builtin_expect (D.30364, 0);
            if (D.30365 != 0) goto <D.30366>; else goto <D.30367>;
            <D.30366>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 4886, "ARMREG_IP != spvar->inst_basereg");
            <D.30367>:
            D.30344 = spvar->data.op[0].const_val;
            D.30368 = (unsigned int) D.30344;
            code = mono_arm_emit_load_imm (code, 12, D.30368);
            {
              arminstr_t * __ainstrp;

              __ainstrp = code;
              D.30351 = spvar->sreg1;
              D.30352 = D.30351 << 16;
              D.30369 = D.30352 | -409944052;
              D.30370 = (unsigned int) D.30369;
              *__ainstrp = D.30370;
              code = __ainstrp + 4;
            }
            <D.30362>:
            {
              arminstr_t * __ainstrp;

              __ainstrp = code;
              *__ainstrp = 3785420812;
              code = __ainstrp + 4;
            }
            goto <D.25790>;
          }
        finally
          {
            rot_amount = {CLOBBER};
          }
      }
      <D.26140>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30371 = ins->data.op[0].target_block;
      mono_add_patch_info (cfg, D.29264, 0, D.30371);
      code = mono_arm_patchable_bl (code, 14);
      D.30372 = ins->data.op[1].exception_clause;
      mono_cfg_add_try_hole (cfg, D.30372, code, bb);
      goto <D.25790>;
      <D.26141>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      ins->data.op[0].const_val = D.29264;
      goto <D.25790>;
      <D.26142>:
      offset.153 = offset;
      offset.192 = (int) offset.153;
      D.30371 = ins->data.op[0].target_block;
      mono_add_patch_info (cfg, offset.192, 0, D.30371);
      code = mono_arm_patchable_b (code, 14);
      goto <D.25790>;
      <D.26143>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.30373 = D.29371 | -509546496;
        D.30374 = (unsigned int) D.30373;
        *__ainstrp = D.30374;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26145>:
      offset.153 = offset;
      offset.192 = (int) offset.153;
      D.29968 = ins->data.op[0].p;
      mono_add_patch_info (cfg, offset.192, 8, D.29968);
      D.30375 = ins->klass;
      D.30376 = (int) D.30375;
      D.30377 = D.30376 * 4;
      max_len.151 = max_len;
      max_len.214 = D.30377 + max_len.151;
      max_len = max_len.214;
      offset.153 = offset;
      max_len.151 = max_len;
      max_len.152 = (unsigned int) max_len.151;
      D.30379 = offset.153 + max_len.152;
      D.29275 = cfg->code_size;
      D.30380 = D.29275 + 4294967280;
      if (D.30379 > D.30380) goto <D.30381>; else goto <D.30382>;
      <D.30381>:
      D.29275 = cfg->code_size;
      max_len.151 = max_len;
      max_len.152 = (unsigned int) max_len.151;
      D.30383 = D.29275 + max_len.152;
      cfg->code_size = D.30383;
      D.29275 = cfg->code_size;
      D.29283 = D.29275 * 2;
      cfg->code_size = D.29283;
      D.29241 = cfg->native_code;
      D.29275 = cfg->code_size;
      D.30384 = monoeg_realloc (D.29241, D.29275);
      cfg->native_code = D.30384;
      D.29241 = cfg->native_code;
      offset.153 = offset;
      code = D.29241 + offset.153;
      <D.30382>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.30385 = D.29371 | -408948480;
        D.30386 = (unsigned int) D.30385;
        *__ainstrp = D.30386;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3785359360;
        code = __ainstrp + 4;
      }
      D.30375 = ins->klass;
      D.30376 = (int) D.30375;
      D.30377 = D.30376 * 4;
      D.30387 = (sizetype) D.30377;
      code = code + D.30387;
      goto <D.25790>;
      <D.26148>:
      <D.26149>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30388 = D.29291 | 329252864;
        D.30389 = (unsigned int) D.30388;
        *__ainstrp = D.30389;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30390 = D.29291 | 60817409;
        D.30391 = (unsigned int) D.30390;
        *__ainstrp = D.30391;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26152>:
      <D.26153>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30392 = D.29291 | -476053504;
        D.30393 = (unsigned int) D.30392;
        *__ainstrp = D.30393;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30394 = D.29291 | -1281359871;
        D.30395 = (unsigned int) D.30394;
        *__ainstrp = D.30395;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26156>:
      <D.26157>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30392 = D.29291 | -476053504;
        D.30393 = (unsigned int) D.30392;
        *__ainstrp = D.30393;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30396 = D.29291 | 866123777;
        D.30397 = (unsigned int) D.30396;
        *__ainstrp = D.30397;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26160>:
      <D.26161>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30392 = D.29291 | -476053504;
        D.30393 = (unsigned int) D.30392;
        *__ainstrp = D.30393;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30398 = D.29291 | -1012924415;
        D.30399 = (unsigned int) D.30398;
        *__ainstrp = D.30399;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26164>:
      <D.26165>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30392 = D.29291 | -476053504;
        D.30393 = (unsigned int) D.30392;
        *__ainstrp = D.30393;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30400 = D.29291 | -2086666239;
        D.30401 = (unsigned int) D.30400;
        *__ainstrp = D.30401;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26168>:
      <D.26169>:
      <D.26170>:
      <D.26171>:
      <D.26172>:
      <D.26173>:
      <D.26174>:
      <D.26175>:
      <D.26176>:
      <D.26177>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30402 = ins->data.op[1].p;
      mono_add_patch_info (cfg, D.29264, 9, D.30402);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29266 = ins->opcode;
        D.29267 = (int) D.29266;
        D.30403 = D.29267 + -451;
        D.30404 = branch_cc_table[D.30403];
        D.30405 = (int) D.30404;
        D.30406 = D.30405 << 28;
        D.30407 = D.30406 | 184549376;
        D.30408 = (unsigned int) D.30407;
        *__ainstrp = D.30408;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26179>:
      <D.26180>:
      <D.26181>:
      <D.26182>:
      <D.26183>:
      <D.26184>:
      <D.26185>:
      <D.26186>:
      <D.26187>:
      <D.26188>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30402 = ins->data.op[1].p;
      mono_add_patch_info (cfg, D.29264, 9, D.30402);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29266 = ins->opcode;
        D.29267 = (int) D.29266;
        D.30409 = D.29267 + -465;
        D.30410 = branch_cc_table[D.30409];
        D.30411 = (int) D.30410;
        D.30412 = D.30411 << 28;
        D.30413 = D.30412 | 184549376;
        D.30414 = (unsigned int) D.30413;
        *__ainstrp = D.30414;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26190>:
      <D.26191>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30402 = ins->data.op[1].p;
      mono_add_patch_info (cfg, D.29264, 9, D.30402);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 721420288;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26193>:
      <D.26194>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30402 = ins->data.op[1].p;
      mono_add_patch_info (cfg, D.29264, 9, D.30402);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 1795162112;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26196>:
      <D.26197>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30402 = ins->data.op[1].p;
      mono_add_patch_info (cfg, D.29264, 9, D.30402);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 989855744;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26199>:
      <D.26200>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30402 = ins->data.op[1].p;
      mono_add_patch_info (cfg, D.29264, 9, D.30402);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 2063597568;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26202>:
      <D.26203>:
      <D.26204>:
      <D.26205>:
      <D.26206>:
      <D.26207>:
      <D.26208>:
      <D.26209>:
      <D.26210>:
      <D.26211>:
      if (0 != 0) goto <D.30415>; else goto <D.30416>;
      <D.30415>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        code.148 = (int) code;
        D.29241 = cfg->native_code;
        D.29263 = (int) D.29241;
        D.29264 = code.148 - D.29263;
        D.30417 = ins->data.op[1].many_blocks;
        D.30418 = *D.30417;
        D.30419 = D.30418->native_offset;
        D.30420 = D.29264 + D.30419;
        D.30421 = D.30420 & 16777215;
        D.30422 = D.30421 | 167772160;
        D.29266 = ins->opcode;
        D.29267 = (int) D.29266;
        D.30423 = D.29267 + -648;
        D.30424 = branch_cc_table[D.30423];
        D.30425 = (int) D.30424;
        D.30426 = D.30425 << 28;
        D.30427 = D.30422 | D.30426;
        D.30428 = (unsigned int) D.30427;
        *__ainstrp = D.30428;
        code = __ainstrp + 4;
      }
      goto <D.30429>;
      <D.30416>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30417 = ins->data.op[1].many_blocks;
      D.30418 = *D.30417;
      mono_add_patch_info (cfg, D.29264, 0, D.30418);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29266 = ins->opcode;
        D.29267 = (int) D.29266;
        D.30423 = D.29267 + -648;
        D.30424 = branch_cc_table[D.30423];
        D.30425 = (int) D.30424;
        D.30426 = D.30425 << 28;
        D.30430 = D.30426 | 167772160;
        D.30431 = (unsigned int) D.30430;
        *__ainstrp = D.30431;
        code = __ainstrp + 4;
      }
      <D.30429>:
      goto <D.25790>;
      <D.26214>:
      D.29597 = BIT_FIELD_REF <*cfg, 8, 3392>;
      D.29598 = D.29597 & 64;
      if (D.29598 != 0) goto <D.30432>; else goto <D.30433>;
      <D.30432>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30434 = D.29991 | 201329408;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30435 = D.30434 | D.29994;
        D.30436 = D.30435 | -509673472;
        D.30437 = (unsigned int) D.30436;
        *__ainstrp = D.30437;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3925868545;
        code = __ainstrp + 4;
      }
      D.29968 = ins->data.op[0].p;
      D.30438 = MEM[(guint32 *)D.29968];
      MEM[(guint32 *)code] = D.30438;
      code = code + 4;
      D.29968 = ins->data.op[0].p;
      D.30439 = MEM[(guint32 *)D.29968 + 4B];
      MEM[(guint32 *)code] = D.30439;
      code = code + 4;
      goto <D.30440>;
      <D.30433>:
      D.29968 = ins->data.op[0].p;
      D.30441 = (unsigned int) D.29968;
      code = mono_arm_emit_load_imm (code, 14, D.30441);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30434 = D.29991 | 201329408;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30435 = D.30434 | D.29994;
        D.30442 = D.30435 | -509739008;
        D.30443 = (unsigned int) D.30442;
        *__ainstrp = D.30443;
        code = __ainstrp + 4;
      }
      <D.30440>:
      goto <D.25790>;
      <D.26218>:
      D.29597 = BIT_FIELD_REF <*cfg, 8, 3392>;
      D.29598 = D.29597 & 64;
      if (D.29598 != 0) goto <D.30444>; else goto <D.30445>;
      <D.30444>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30446 = D.29991 | 201329152;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30447 = D.30446 | D.29994;
        D.30448 = D.30447 | -509673472;
        D.30449 = (unsigned int) D.30448;
        *__ainstrp = D.30449;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3925868544;
        code = __ainstrp + 4;
      }
      D.29968 = ins->data.op[0].p;
      D.30438 = MEM[(guint32 *)D.29968];
      MEM[(guint32 *)code] = D.30438;
      code = code + 4;
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30011 = D.29991 | 246876864;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30012 = D.30011 | D.29994;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.30013 = D.30012 | D.29990;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.30014 = D.29993 << 5;
        D.30015 = D.30013 | D.30014;
        D.30016 = D.30015 | -536870912;
        D.30017 = (unsigned int) D.30016;
        *__ainstrp = D.30017;
        code = __ainstrp + 4;
      }
      goto <D.30450>;
      <D.30445>:
      D.29968 = ins->data.op[0].p;
      D.30441 = (unsigned int) D.29968;
      code = mono_arm_emit_load_imm (code, 14, D.30441);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30446 = D.29991 | 201329152;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30447 = D.30446 | D.29994;
        D.30451 = D.30447 | -509739008;
        D.30452 = (unsigned int) D.30451;
        *__ainstrp = D.30452;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30011 = D.29991 | 246876864;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30012 = D.30011 | D.29994;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.30013 = D.30012 | D.29990;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.30014 = D.29993 << 5;
        D.30015 = D.30013 | D.30014;
        D.30016 = D.30015 | -536870912;
        D.30017 = (unsigned int) D.30016;
        *__ainstrp = D.30017;
        code = __ainstrp + 4;
      }
      <D.30450>:
      goto <D.25790>;
      <D.26224>:
      D.29288 = ins->data.op[0].const_val;
      D.29304 = (unsigned int) D.29288;
      D.30453 = D.29304 + 1020;
      if (D.30453 > 2040) goto <D.30454>; else goto <D.30455>;
      <D.30454>:
      D.29288 = ins->data.op[0].const_val;
      D.29421 = (unsigned int) D.29288;
      code = mono_arm_emit_load_imm (code, 14, D.29421);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.30456 = D.29290 | -527507456;
        D.30457 = (unsigned int) D.30456;
        *__ainstrp = D.30457;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30458 = D.29996 << 12;
        D.30459 = D.30458 | 201329408;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.30460 = D.29998 << 22;
        D.30461 = D.30459 | D.30460;
        D.30462 = D.30461 | -510787584;
        D.30463 = (unsigned int) D.30462;
        *__ainstrp = D.30463;
        code = __ainstrp + 4;
      }
      goto <D.30464>;
      <D.30455>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.30466>; else goto <D.30467>;
        <D.30466>:
        D.29288 = ins->data.op[0].const_val;
        D.30468 = D.29288 >> 2;
        iftmp.215 = D.30468 | 201329408;
        goto <D.30469>;
        <D.30467>:
        D.29288 = ins->data.op[0].const_val;
        D.29332 = -D.29288;
        D.30470 = D.29332 >> 2;
        iftmp.215 = D.30470 | 201329408;
        <D.30469>:
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30458 = D.29996 << 12;
        D.30471 = iftmp.215 | D.30458;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.30460 = D.29998 << 22;
        D.30472 = D.30471 | D.30460;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.30473 = D.30472 | D.29312;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.30475>; else goto <D.30476>;
        <D.30475>:
        iftmp.216 = 8388608;
        goto <D.30477>;
        <D.30476>:
        iftmp.216 = 0;
        <D.30477>:
        D.30478 = D.30473 | iftmp.216;
        D.30479 = D.30478 | -520093696;
        D.30480 = (unsigned int) D.30479;
        *__ainstrp = D.30480;
        code = __ainstrp + 4;
      }
      <D.30464>:
      goto <D.25790>;
      <D.26228>:
      D.29288 = ins->data.op[0].const_val;
      D.29304 = (unsigned int) D.29288;
      D.30453 = D.29304 + 1020;
      if (D.30453 > 2040) goto <D.30481>; else goto <D.30482>;
      <D.30481>:
      D.29288 = ins->data.op[0].const_val;
      D.29421 = (unsigned int) D.29288;
      code = mono_arm_emit_load_imm (code, 14, D.29421);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.30483 = D.29371 | -527507456;
        D.30484 = (unsigned int) D.30483;
        *__ainstrp = D.30484;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30434 = D.29991 | 201329408;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30435 = D.30434 | D.29994;
        D.30442 = D.30435 | -509739008;
        D.30443 = (unsigned int) D.30442;
        *__ainstrp = D.30443;
        code = __ainstrp + 4;
      }
      goto <D.30485>;
      <D.30482>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.30487>; else goto <D.30488>;
        <D.30487>:
        D.29288 = ins->data.op[0].const_val;
        D.30468 = D.29288 >> 2;
        iftmp.217 = D.30468 | 201329408;
        goto <D.30489>;
        <D.30488>:
        D.29288 = ins->data.op[0].const_val;
        D.29332 = -D.29288;
        D.30470 = D.29332 >> 2;
        iftmp.217 = D.30470 | 201329408;
        <D.30489>:
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30490 = iftmp.217 | D.29991;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30491 = D.30490 | D.29994;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.30492 = D.30491 | D.29441;
        D.30493 = D.30492 | 1048576;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.30495>; else goto <D.30496>;
        <D.30495>:
        iftmp.218 = 8388608;
        goto <D.30497>;
        <D.30496>:
        iftmp.218 = 0;
        <D.30497>:
        D.30498 = D.30493 | iftmp.218;
        D.30499 = D.30498 | -520093696;
        D.30500 = (unsigned int) D.30499;
        *__ainstrp = D.30500;
        code = __ainstrp + 4;
      }
      <D.30485>:
      goto <D.25790>;
      <D.26232>:
      D.29288 = ins->data.op[0].const_val;
      D.29304 = (unsigned int) D.29288;
      D.30453 = D.29304 + 1020;
      D.30501 = D.30453 > 2040;
      D.30502 = (long int) D.30501;
      D.30503 = __builtin_expect (D.30502, 0);
      if (D.30503 != 0) goto <D.30504>; else goto <D.30505>;
      <D.30504>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5074, "arm_is_fpimm8 (ins->inst_offset)");
      <D.30505>:
      vfp_scratch1.219 = vfp_scratch1;
      code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1.219);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        vfp_scratch1.219 = vfp_scratch1;
        D.30507 = vfp_scratch1.219 >> 1;
        D.30508 = D.30507 << 12;
        D.30509 = D.30508 | 246877120;
        vfp_scratch1.219 = vfp_scratch1;
        D.30510 = vfp_scratch1.219 & 1;
        D.30511 = D.30510 << 22;
        D.30512 = D.30509 | D.30511;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30513 = D.30512 | D.29996;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.29999 = D.29998 << 5;
        D.30514 = D.30513 | D.29999;
        D.30515 = D.30514 | -536870912;
        D.30516 = (unsigned int) D.30515;
        *__ainstrp = D.30516;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.30518>; else goto <D.30519>;
        <D.30518>:
        D.29288 = ins->data.op[0].const_val;
        D.30468 = D.29288 >> 2;
        iftmp.220 = D.30468 | 201329152;
        goto <D.30520>;
        <D.30519>:
        D.29288 = ins->data.op[0].const_val;
        D.29332 = -D.29288;
        D.30470 = D.29332 >> 2;
        iftmp.220 = D.30470 | 201329152;
        <D.30520>:
        vfp_scratch1.219 = vfp_scratch1;
        D.30507 = vfp_scratch1.219 >> 1;
        D.30508 = D.30507 << 12;
        D.30521 = iftmp.220 | D.30508;
        vfp_scratch1.219 = vfp_scratch1;
        D.30510 = vfp_scratch1.219 & 1;
        D.30511 = D.30510 << 22;
        D.30522 = D.30521 | D.30511;
        D.29290 = ins->dreg;
        D.29312 = D.29290 << 16;
        D.30523 = D.30522 | D.29312;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.30525>; else goto <D.30526>;
        <D.30525>:
        iftmp.221 = 8388608;
        goto <D.30527>;
        <D.30526>:
        iftmp.221 = 0;
        <D.30527>:
        D.30528 = D.30523 | iftmp.221;
        D.30529 = D.30528 | -520093696;
        D.30530 = (unsigned int) D.30529;
        *__ainstrp = D.30530;
        code = __ainstrp + 4;
      }
      vfp_scratch1.219 = vfp_scratch1;
      code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1.219);
      goto <D.25790>;
      <D.26235>:
      D.29288 = ins->data.op[0].const_val;
      D.29304 = (unsigned int) D.29288;
      D.30453 = D.29304 + 1020;
      D.30501 = D.30453 > 2040;
      D.30502 = (long int) D.30501;
      D.30503 = __builtin_expect (D.30502, 0);
      if (D.30503 != 0) goto <D.30531>; else goto <D.30532>;
      <D.30531>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5081, "arm_is_fpimm8 (ins->inst_offset)");
      <D.30532>:
      vfp_scratch1.219 = vfp_scratch1;
      code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1.219);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.30534>; else goto <D.30535>;
        <D.30534>:
        D.29288 = ins->data.op[0].const_val;
        D.30468 = D.29288 >> 2;
        iftmp.222 = D.30468 | 201329152;
        goto <D.30536>;
        <D.30535>:
        D.29288 = ins->data.op[0].const_val;
        D.29332 = -D.29288;
        D.30470 = D.29332 >> 2;
        iftmp.222 = D.30470 | 201329152;
        <D.30536>:
        vfp_scratch1.219 = vfp_scratch1;
        D.30507 = vfp_scratch1.219 >> 1;
        D.30508 = D.30507 << 12;
        D.30537 = iftmp.222 | D.30508;
        vfp_scratch1.219 = vfp_scratch1;
        D.30510 = vfp_scratch1.219 & 1;
        D.30511 = D.30510 << 22;
        D.30538 = D.30537 | D.30511;
        D.29371 = ins->sreg1;
        D.29441 = D.29371 << 16;
        D.30539 = D.30538 | D.29441;
        D.30540 = D.30539 | 1048576;
        D.29288 = ins->data.op[0].const_val;
        if (D.29288 >= 0) goto <D.30542>; else goto <D.30543>;
        <D.30542>:
        iftmp.223 = 8388608;
        goto <D.30544>;
        <D.30543>:
        iftmp.223 = 0;
        <D.30544>:
        D.30545 = D.30540 | iftmp.223;
        D.30546 = D.30545 | -520093696;
        D.30547 = (unsigned int) D.30546;
        *__ainstrp = D.30547;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30011 = D.29991 | 246876864;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30012 = D.30011 | D.29994;
        vfp_scratch1.219 = vfp_scratch1;
        D.30507 = vfp_scratch1.219 >> 1;
        D.30548 = D.30012 | D.30507;
        vfp_scratch1.219 = vfp_scratch1;
        D.30510 = vfp_scratch1.219 & 1;
        D.30549 = D.30510 << 5;
        D.30550 = D.30548 | D.30549;
        D.30551 = D.30550 | -536870912;
        D.30552 = (unsigned int) D.30551;
        *__ainstrp = D.30552;
        code = __ainstrp + 4;
      }
      vfp_scratch1.219 = vfp_scratch1;
      code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1.219);
      goto <D.25790>;
      <D.26238>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5088);
      <D.26239>:
      vfp_scratch1.219 = vfp_scratch1;
      code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1.219);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29372 = D.29371 << 12;
        D.30553 = D.29372 | 234883600;
        vfp_scratch1.219 = vfp_scratch1;
        D.30507 = vfp_scratch1.219 >> 1;
        D.30554 = D.30507 << 16;
        D.30555 = D.30553 | D.30554;
        vfp_scratch1.219 = vfp_scratch1;
        D.30556 = vfp_scratch1.219 << 7;
        D.30557 = D.30556 & 255;
        D.30558 = D.30555 | D.30557;
        D.30559 = D.30558 | -536870912;
        D.30560 = (unsigned int) D.30559;
        *__ainstrp = D.30560;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        vfp_scratch1.219 = vfp_scratch1;
        D.30510 = vfp_scratch1.219 & 1;
        D.30511 = D.30510 << 22;
        D.30561 = D.30511 | -289931264;
        vfp_scratch1.219 = vfp_scratch1;
        D.30507 = vfp_scratch1.219 >> 1;
        D.30508 = D.30507 << 12;
        D.30562 = D.30561 | D.30508;
        D.30563 = D.30562 | 2752;
        vfp_scratch1.219 = vfp_scratch1;
        D.30510 = vfp_scratch1.219 & 1;
        D.30549 = D.30510 << 5;
        D.30564 = D.30563 | D.30549;
        vfp_scratch1.219 = vfp_scratch1;
        D.30507 = vfp_scratch1.219 >> 1;
        D.30565 = D.30564 | D.30507;
        D.30566 = (unsigned int) D.30565;
        *__ainstrp = D.30566;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30011 = D.29991 | 246876864;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30012 = D.30011 | D.29994;
        vfp_scratch1.219 = vfp_scratch1;
        D.30507 = vfp_scratch1.219 >> 1;
        D.30548 = D.30012 | D.30507;
        vfp_scratch1.219 = vfp_scratch1;
        D.30510 = vfp_scratch1.219 & 1;
        D.30549 = D.30510 << 5;
        D.30550 = D.30548 | D.30549;
        D.30551 = D.30550 | -536870912;
        D.30552 = (unsigned int) D.30551;
        *__ainstrp = D.30552;
        code = __ainstrp + 4;
      }
      vfp_scratch1.219 = vfp_scratch1;
      code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1.219);
      goto <D.25790>;
      <D.26243>:
      vfp_scratch1.219 = vfp_scratch1;
      code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1.219);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29372 = D.29371 << 12;
        D.30553 = D.29372 | 234883600;
        vfp_scratch1.219 = vfp_scratch1;
        D.30507 = vfp_scratch1.219 >> 1;
        D.30554 = D.30507 << 16;
        D.30555 = D.30553 | D.30554;
        vfp_scratch1.219 = vfp_scratch1;
        D.30556 = vfp_scratch1.219 << 7;
        D.30557 = D.30556 & 255;
        D.30558 = D.30555 | D.30557;
        D.30559 = D.30558 | -536870912;
        D.30560 = (unsigned int) D.30559;
        *__ainstrp = D.30560;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30567 = D.29994 | -289931264;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30568 = D.30567 | D.29991;
        D.30569 = D.30568 | 3008;
        vfp_scratch1.219 = vfp_scratch1;
        D.30510 = vfp_scratch1.219 & 1;
        D.30549 = D.30510 << 5;
        D.30570 = D.30569 | D.30549;
        vfp_scratch1.219 = vfp_scratch1;
        D.30507 = vfp_scratch1.219 >> 1;
        D.30571 = D.30570 | D.30507;
        D.30572 = (unsigned int) D.30571;
        *__ainstrp = D.30572;
        code = __ainstrp + 4;
      }
      vfp_scratch1.219 = vfp_scratch1;
      code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1.219);
      goto <D.25790>;
      <D.26246>:
      D.29255 = cfg->method;
      D.30573 = mono_method_signature (D.29255);
      D.30574 = D.30573->ret;
      D.30575 = D.30574->type;
      if (D.30575 == 12) goto <D.30576>; else goto <D.30577>;
      <D.30576>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30578 = D.29996 | 246877120;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.29999 = D.29998 << 5;
        D.30579 = D.30578 | D.29999;
        D.30580 = D.30579 | -536870912;
        D.30581 = (unsigned int) D.30580;
        *__ainstrp = D.30581;
        code = __ainstrp + 4;
      }
      if (0 != 0) goto <D.30582>; else goto <D.30583>;
      <D.30582>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3994028560;
        code = __ainstrp + 4;
      }
      <D.30583>:
      goto <D.30584>;
      <D.30577>:
      if (1 != 0) goto <D.30585>; else goto <D.30586>;
      <D.30585>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30587 = D.29996 | 246418240;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.29999 = D.29998 << 5;
        D.30588 = D.30587 | D.29999;
        D.30589 = D.30588 | -536870912;
        D.30590 = (unsigned int) D.30589;
        *__ainstrp = D.30590;
        code = __ainstrp + 4;
      }
      goto <D.30591>;
      <D.30586>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30592 = D.29996 | -330233072;
        D.30593 = (unsigned int) D.30592;
        *__ainstrp = D.30593;
        code = __ainstrp + 4;
      }
      <D.30591>:
      <D.30584>:
      goto <D.25790>;
      <D.26251>:
      D.29290 = ins->dreg;
      D.29371 = ins->sreg1;
      code = emit_float_to_int (cfg, code, D.29290, D.29371, 1, 1);
      goto <D.25790>;
      <D.26252>:
      D.29290 = ins->dreg;
      D.29371 = ins->sreg1;
      code = emit_float_to_int (cfg, code, D.29290, D.29371, 1, 0);
      goto <D.25790>;
      <D.26253>:
      D.29290 = ins->dreg;
      D.29371 = ins->sreg1;
      code = emit_float_to_int (cfg, code, D.29290, D.29371, 2, 1);
      goto <D.25790>;
      <D.26254>:
      D.29290 = ins->dreg;
      D.29371 = ins->sreg1;
      code = emit_float_to_int (cfg, code, D.29290, D.29371, 2, 0);
      goto <D.25790>;
      <D.26255>:
      <D.26256>:
      D.29290 = ins->dreg;
      D.29371 = ins->sreg1;
      code = emit_float_to_int (cfg, code, D.29290, D.29371, 4, 1);
      goto <D.25790>;
      <D.26257>:
      <D.26258>:
      D.29290 = ins->dreg;
      D.29371 = ins->sreg1;
      code = emit_float_to_int (cfg, code, D.29290, D.29371, 4, 0);
      goto <D.25790>;
      <D.26259>:
      <D.26260>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5142);
      <D.26261>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5146);
      <D.26262>:
      {
        guint8 * high_bit_not_set;
        guint8 * valid_negative;
        guint8 * invalid_negative;
        guint8 * valid_positive;

        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29371 = ins->sreg1;
          D.29441 = D.29371 << 16;
          D.30594 = D.29441 | -481296384;
          D.30595 = (unsigned int) D.30594;
          *__ainstrp = D.30595;
          code = __ainstrp + 4;
        }
        high_bit_not_set = code;
        {
          arminstr_t * __ainstrp;

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

          __ainstrp = code;
          D.29426 = ins->sreg2;
          D.29434 = D.29426 << 16;
          D.30596 = D.29434 | -479199231;
          D.30597 = (unsigned int) D.30596;
          *__ainstrp = D.30597;
          code = __ainstrp + 4;
        }
        valid_negative = code;
        {
          arminstr_t * __ainstrp;

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

          __ainstrp = code;
          *__ainstrp = 3925868544;
          code = __ainstrp + 4;
        }
        arm_patch (high_bit_not_set, code);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29426 = ins->sreg2;
          D.29434 = D.29426 << 16;
          D.30598 = D.29434 | -481296384;
          D.30599 = (unsigned int) D.30598;
          *__ainstrp = D.30599;
          code = __ainstrp + 4;
        }
        valid_positive = code;
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          *__ainstrp = 167772160;
          code = __ainstrp + 4;
        }
        arm_patch (invalid_negative, code);
        code.148 = (int) code;
        D.29241 = cfg->native_code;
        D.29263 = (int) D.29241;
        D.29264 = code.148 - D.29263;
        mono_add_patch_info (cfg, D.29264, 9, "OverflowException");
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          *__ainstrp = 3942645760;
          code = __ainstrp + 4;
        }
        arm_patch (valid_negative, code);
        arm_patch (valid_positive, code);
        D.29290 = ins->dreg;
        D.29371 = ins->sreg1;
        if (D.29290 != D.29371) goto <D.30600>; else goto <D.30601>;
        <D.30600>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.29371 = ins->sreg1;
          D.29290 = ins->dreg;
          D.29291 = D.29290 << 12;
          D.29915 = D.29371 | D.29291;
          D.29916 = D.29915 | -509607936;
          D.29917 = (unsigned int) D.29916;
          *__ainstrp = D.29917;
          code = __ainstrp + 4;
        }
        <D.30601>:
        goto <D.25790>;
      }
      <D.26276>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30602 = D.29991 | 238029568;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30603 = D.30602 | D.29994;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30604 = D.29996 << 16;
        D.30605 = D.30603 | D.30604;
        D.29371 = ins->sreg1;
        D.30606 = D.29371 << 7;
        D.30607 = D.30606 & 255;
        D.30608 = D.30605 | D.30607;
        D.29426 = ins->sreg2;
        D.30609 = D.29426 >> 1;
        D.30610 = D.30608 | D.30609;
        D.29426 = ins->sreg2;
        D.30611 = D.29426 & 1;
        D.30612 = D.30611 << 5;
        D.30613 = D.30610 | D.30612;
        D.30614 = D.30613 | -536870912;
        D.30615 = (unsigned int) D.30614;
        *__ainstrp = D.30615;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26278>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30616 = D.29991 | 238029632;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30617 = D.30616 | D.29994;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30604 = D.29996 << 16;
        D.30618 = D.30617 | D.30604;
        D.29371 = ins->sreg1;
        D.30606 = D.29371 << 7;
        D.30607 = D.30606 & 255;
        D.30619 = D.30618 | D.30607;
        D.29426 = ins->sreg2;
        D.30609 = D.29426 >> 1;
        D.30620 = D.30619 | D.30609;
        D.29426 = ins->sreg2;
        D.30611 = D.29426 & 1;
        D.30612 = D.30611 << 5;
        D.30621 = D.30620 | D.30612;
        D.30622 = D.30621 | -536870912;
        D.30623 = (unsigned int) D.30622;
        *__ainstrp = D.30623;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26280>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30624 = D.29991 | 236980992;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30625 = D.30624 | D.29994;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30604 = D.29996 << 16;
        D.30626 = D.30625 | D.30604;
        D.29371 = ins->sreg1;
        D.30606 = D.29371 << 7;
        D.30607 = D.30606 & 255;
        D.30627 = D.30626 | D.30607;
        D.29426 = ins->sreg2;
        D.30609 = D.29426 >> 1;
        D.30628 = D.30627 | D.30609;
        D.29426 = ins->sreg2;
        D.30611 = D.29426 & 1;
        D.30612 = D.30611 << 5;
        D.30629 = D.30628 | D.30612;
        D.30630 = D.30629 | -536870912;
        D.30631 = (unsigned int) D.30630;
        *__ainstrp = D.30631;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26282>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30632 = D.29991 | 243272448;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30633 = D.30632 | D.29994;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30604 = D.29996 << 16;
        D.30634 = D.30633 | D.30604;
        D.29371 = ins->sreg1;
        D.30606 = D.29371 << 7;
        D.30607 = D.30606 & 255;
        D.30635 = D.30634 | D.30607;
        D.29426 = ins->sreg2;
        D.30609 = D.29426 >> 1;
        D.30636 = D.30635 | D.30609;
        D.29426 = ins->sreg2;
        D.30611 = D.29426 & 1;
        D.30612 = D.30611 << 5;
        D.30637 = D.30636 | D.30612;
        D.30638 = D.30637 | -536870912;
        D.30639 = (unsigned int) D.30638;
        *__ainstrp = D.30639;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26284>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.30640 = D.29991 | 246483776;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.30641 = D.30640 | D.29994;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30642 = D.30641 | D.29996;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.29999 = D.29998 << 5;
        D.30643 = D.30642 | D.29999;
        D.30644 = D.30643 | -536870912;
        D.30645 = (unsigned int) D.30644;
        *__ainstrp = D.30645;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26286>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5198);
      <D.26287>:
      if (1 != 0) goto <D.30646>; else goto <D.30647>;
      <D.30646>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30458 = D.29996 << 12;
        D.30648 = D.30458 | 246680384;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.30460 = D.29998 << 22;
        D.30649 = D.30648 | D.30460;
        D.29426 = ins->sreg2;
        D.30609 = D.29426 >> 1;
        D.30650 = D.30649 | D.30609;
        D.29426 = ins->sreg2;
        D.30611 = D.29426 & 1;
        D.30612 = D.30611 << 5;
        D.30651 = D.30650 | D.30612;
        D.30652 = D.30651 | -536870912;
        D.30653 = (unsigned int) D.30652;
        *__ainstrp = D.30653;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 4008835600;
        code = __ainstrp + 4;
      }
      <D.30647>:
      goto <D.25790>;
      <D.26290>:
      if (1 != 0) goto <D.30654>; else goto <D.30655>;
      <D.30654>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30458 = D.29996 << 12;
        D.30648 = D.30458 | 246680384;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.30460 = D.29998 << 22;
        D.30649 = D.30648 | D.30460;
        D.29426 = ins->sreg2;
        D.30609 = D.29426 >> 1;
        D.30650 = D.30649 | D.30609;
        D.29426 = ins->sreg2;
        D.30611 = D.29426 & 1;
        D.30612 = D.30611 << 5;
        D.30651 = D.30650 | D.30612;
        D.30652 = D.30651 | -536870912;
        D.30653 = (unsigned int) D.30652;
        *__ainstrp = D.30653;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 4008835600;
        code = __ainstrp + 4;
      }
      <D.30655>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30388 = D.29291 | 329252864;
        D.30389 = (unsigned int) D.30388;
        *__ainstrp = D.30389;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30390 = D.29291 | 60817409;
        D.30391 = (unsigned int) D.30390;
        *__ainstrp = D.30391;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26295>:
      if (1 != 0) goto <D.30656>; else goto <D.30657>;
      <D.30656>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30458 = D.29996 << 12;
        D.30648 = D.30458 | 246680384;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.30460 = D.29998 << 22;
        D.30649 = D.30648 | D.30460;
        D.29426 = ins->sreg2;
        D.30609 = D.29426 >> 1;
        D.30650 = D.30649 | D.30609;
        D.29426 = ins->sreg2;
        D.30611 = D.29426 & 1;
        D.30612 = D.30611 << 5;
        D.30651 = D.30650 | D.30612;
        D.30652 = D.30651 | -536870912;
        D.30653 = (unsigned int) D.30652;
        *__ainstrp = D.30653;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 4008835600;
        code = __ainstrp + 4;
      }
      <D.30657>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30392 = D.29291 | -476053504;
        D.30393 = (unsigned int) D.30392;
        *__ainstrp = D.30393;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30658 = D.29291 | 1134559233;
        D.30659 = (unsigned int) D.30658;
        *__ainstrp = D.30659;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26300>:
      if (1 != 0) goto <D.30660>; else goto <D.30661>;
      <D.30660>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30458 = D.29996 << 12;
        D.30648 = D.30458 | 246680384;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.30460 = D.29998 << 22;
        D.30649 = D.30648 | D.30460;
        D.29426 = ins->sreg2;
        D.30609 = D.29426 >> 1;
        D.30650 = D.30649 | D.30609;
        D.29426 = ins->sreg2;
        D.30611 = D.29426 & 1;
        D.30612 = D.30611 << 5;
        D.30651 = D.30650 | D.30612;
        D.30652 = D.30651 | -536870912;
        D.30653 = (unsigned int) D.30652;
        *__ainstrp = D.30653;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 4008835600;
        code = __ainstrp + 4;
      }
      <D.30661>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30392 = D.29291 | -476053504;
        D.30393 = (unsigned int) D.30392;
        *__ainstrp = D.30393;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30658 = D.29291 | 1134559233;
        D.30659 = (unsigned int) D.30658;
        *__ainstrp = D.30659;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30662 = D.29291 | 1671430145;
        D.30663 = (unsigned int) D.30662;
        *__ainstrp = D.30663;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26306>:
      if (1 != 0) goto <D.30664>; else goto <D.30665>;
      <D.30664>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.30609 = D.29426 >> 1;
        D.30666 = D.30609 << 12;
        D.30667 = D.30666 | 246680384;
        D.29426 = ins->sreg2;
        D.30611 = D.29426 & 1;
        D.30668 = D.30611 << 22;
        D.30669 = D.30667 | D.30668;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30670 = D.30669 | D.29996;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.29999 = D.29998 << 5;
        D.30671 = D.30670 | D.29999;
        D.30672 = D.30671 | -536870912;
        D.30673 = (unsigned int) D.30672;
        *__ainstrp = D.30673;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 4008835600;
        code = __ainstrp + 4;
      }
      <D.30665>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30392 = D.29291 | -476053504;
        D.30393 = (unsigned int) D.30392;
        *__ainstrp = D.30393;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30658 = D.29291 | 1134559233;
        D.30659 = (unsigned int) D.30658;
        *__ainstrp = D.30659;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26311>:
      if (1 != 0) goto <D.30674>; else goto <D.30675>;
      <D.30674>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29426 = ins->sreg2;
        D.30609 = D.29426 >> 1;
        D.30666 = D.30609 << 12;
        D.30667 = D.30666 | 246680384;
        D.29426 = ins->sreg2;
        D.30611 = D.29426 & 1;
        D.30668 = D.30611 << 22;
        D.30669 = D.30667 | D.30668;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30670 = D.30669 | D.29996;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.29999 = D.29998 << 5;
        D.30671 = D.30670 | D.29999;
        D.30672 = D.30671 | -536870912;
        D.30673 = (unsigned int) D.30672;
        *__ainstrp = D.30673;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 4008835600;
        code = __ainstrp + 4;
      }
      <D.30675>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30392 = D.29291 | -476053504;
        D.30393 = (unsigned int) D.30392;
        *__ainstrp = D.30393;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30658 = D.29291 | 1134559233;
        D.30659 = (unsigned int) D.30658;
        *__ainstrp = D.30659;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29291 = D.29290 << 12;
        D.30662 = D.29291 | 1671430145;
        D.30663 = (unsigned int) D.30662;
        *__ainstrp = D.30663;
        code = __ainstrp + 4;
      }
      goto <D.25790>;
      <D.26317>:
      if (0 != 0) goto <D.30676>; else goto <D.30677>;
      <D.30676>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        code.148 = (int) code;
        D.29241 = cfg->native_code;
        D.29263 = (int) D.29241;
        D.29264 = code.148 - D.29263;
        D.30417 = ins->data.op[1].many_blocks;
        D.30418 = *D.30417;
        D.30419 = D.30418->native_offset;
        D.30420 = D.29264 + D.30419;
        D.30421 = D.30420 & 16777215;
        D.30422 = D.30421 | 167772160;
        D.30678 = 0;
        D.30679 = (int) D.30678;
        D.30680 = D.30679 << 28;
        D.30681 = D.30422 | D.30680;
        D.30682 = (unsigned int) D.30681;
        *__ainstrp = D.30682;
        code = __ainstrp + 4;
      }
      goto <D.30683>;
      <D.30677>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30417 = ins->data.op[1].many_blocks;
      D.30418 = *D.30417;
      mono_add_patch_info (cfg, D.29264, 0, D.30418);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.30678 = 0;
        D.30679 = (int) D.30678;
        D.30680 = D.30679 << 28;
        D.30684 = D.30680 | 167772160;
        D.30685 = (unsigned int) D.30684;
        *__ainstrp = D.30685;
        code = __ainstrp + 4;
      }
      <D.30683>:
      goto <D.25790>;
      <D.26320>:
      if (0 != 0) goto <D.30686>; else goto <D.30687>;
      <D.30686>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        code.148 = (int) code;
        D.29241 = cfg->native_code;
        D.29263 = (int) D.29241;
        D.29264 = code.148 - D.29263;
        D.30417 = ins->data.op[1].many_blocks;
        D.30418 = *D.30417;
        D.30419 = D.30418->native_offset;
        D.30420 = D.29264 + D.30419;
        D.30421 = D.30420 & 16777215;
        D.30422 = D.30421 | 167772160;
        D.30688 = 1;
        D.30689 = (int) D.30688;
        D.30690 = D.30689 << 28;
        D.30691 = D.30422 | D.30690;
        D.30692 = (unsigned int) D.30691;
        *__ainstrp = D.30692;
        code = __ainstrp + 4;
      }
      goto <D.30693>;
      <D.30687>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30417 = ins->data.op[1].many_blocks;
      D.30418 = *D.30417;
      mono_add_patch_info (cfg, D.29264, 0, D.30418);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.30688 = 1;
        D.30689 = (int) D.30688;
        D.30690 = D.30689 << 28;
        D.30694 = D.30690 | 167772160;
        D.30695 = (unsigned int) D.30694;
        *__ainstrp = D.30695;
        code = __ainstrp + 4;
      }
      <D.30693>:
      goto <D.25790>;
      <D.26323>:
      if (0 != 0) goto <D.30696>; else goto <D.30697>;
      <D.30696>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        code.148 = (int) code;
        D.29241 = cfg->native_code;
        D.29263 = (int) D.29241;
        D.29264 = code.148 - D.29263;
        D.30417 = ins->data.op[1].many_blocks;
        D.30418 = *D.30417;
        D.30419 = D.30418->native_offset;
        D.30420 = D.29264 + D.30419;
        D.30421 = D.30420 & 16777215;
        D.30698 = D.30421 | 1241513984;
        D.30699 = (unsigned int) D.30698;
        *__ainstrp = D.30699;
        code = __ainstrp + 4;
      }
      goto <D.30700>;
      <D.30697>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30417 = ins->data.op[1].many_blocks;
      D.30418 = *D.30417;
      mono_add_patch_info (cfg, D.29264, 0, D.30418);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 1241513984;
        code = __ainstrp + 4;
      }
      <D.30700>:
      goto <D.25790>;
      <D.26326>:
      if (0 != 0) goto <D.30701>; else goto <D.30702>;
      <D.30701>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        code.148 = (int) code;
        D.29241 = cfg->native_code;
        D.29263 = (int) D.29241;
        D.29264 = code.148 - D.29263;
        D.30417 = ins->data.op[1].many_blocks;
        D.30418 = *D.30417;
        D.30419 = D.30418->native_offset;
        D.30420 = D.29264 + D.30419;
        D.30421 = D.30420 & 16777215;
        D.30703 = D.30421 | 1778384896;
        D.30704 = (unsigned int) D.30703;
        *__ainstrp = D.30704;
        code = __ainstrp + 4;
      }
      goto <D.30705>;
      <D.30702>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30417 = ins->data.op[1].many_blocks;
      D.30418 = *D.30417;
      mono_add_patch_info (cfg, D.29264, 0, D.30418);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 1778384896;
        code = __ainstrp + 4;
      }
      <D.30705>:
      if (0 != 0) goto <D.30706>; else goto <D.30707>;
      <D.30706>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        code.148 = (int) code;
        D.29241 = cfg->native_code;
        D.29263 = (int) D.29241;
        D.29264 = code.148 - D.29263;
        D.30417 = ins->data.op[1].many_blocks;
        D.30418 = *D.30417;
        D.30419 = D.30418->native_offset;
        D.30420 = D.29264 + D.30419;
        D.30421 = D.30420 & 16777215;
        D.30698 = D.30421 | 1241513984;
        D.30699 = (unsigned int) D.30698;
        *__ainstrp = D.30699;
        code = __ainstrp + 4;
      }
      goto <D.30708>;
      <D.30707>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30417 = ins->data.op[1].many_blocks;
      D.30418 = *D.30417;
      mono_add_patch_info (cfg, D.29264, 0, D.30418);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 1241513984;
        code = __ainstrp + 4;
      }
      <D.30708>:
      goto <D.25790>;
      <D.26331>:
      <D.26332>:
      <D.26333>:
      <D.26334>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5271);
      <D.26335>:
      if (1 != 0) goto <D.30709>; else goto <D.30710>;
      <D.30709>:
      if (0 != 0) goto <D.30711>; else goto <D.30712>;
      <D.30711>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        code.148 = (int) code;
        D.29241 = cfg->native_code;
        D.29263 = (int) D.29241;
        D.29264 = code.148 - D.29263;
        D.30417 = ins->data.op[1].many_blocks;
        D.30418 = *D.30417;
        D.30419 = D.30418->native_offset;
        D.30420 = D.29264 + D.30419;
        D.30421 = D.30420 & 16777215;
        D.30713 = D.30421 | -1442840576;
        D.30714 = (unsigned int) D.30713;
        *__ainstrp = D.30714;
        code = __ainstrp + 4;
      }
      goto <D.30715>;
      <D.30712>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30417 = ins->data.op[1].many_blocks;
      D.30418 = *D.30417;
      mono_add_patch_info (cfg, D.29264, 0, D.30418);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 2852126720;
        code = __ainstrp + 4;
      }
      <D.30715>:
      goto <D.30716>;
      <D.30710>:
      if (0 != 0) goto <D.30717>; else goto <D.30718>;
      <D.30717>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        code.148 = (int) code;
        D.29241 = cfg->native_code;
        D.29263 = (int) D.29241;
        D.29264 = code.148 - D.29263;
        D.30417 = ins->data.op[1].many_blocks;
        D.30418 = *D.30417;
        D.30419 = D.30418->native_offset;
        D.30420 = D.29264 + D.30419;
        D.30421 = D.30420 & 16777215;
        D.30422 = D.30421 | 167772160;
        D.30719 = (unsigned int) D.30422;
        *__ainstrp = D.30719;
        code = __ainstrp + 4;
      }
      goto <D.30720>;
      <D.30718>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30417 = ins->data.op[1].many_blocks;
      D.30418 = *D.30417;
      mono_add_patch_info (cfg, D.29264, 0, D.30418);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 167772160;
        code = __ainstrp + 4;
      }
      <D.30720>:
      if (0 != 0) goto <D.30721>; else goto <D.30722>;
      <D.30721>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        code.148 = (int) code;
        D.29241 = cfg->native_code;
        D.29263 = (int) D.29241;
        D.29264 = code.148 - D.29263;
        D.30417 = ins->data.op[1].many_blocks;
        D.30418 = *D.30417;
        D.30419 = D.30418->native_offset;
        D.30420 = D.29264 + D.30419;
        D.30421 = D.30420 & 16777215;
        D.30723 = D.30421 | 704643072;
        D.30724 = (unsigned int) D.30723;
        *__ainstrp = D.30724;
        code = __ainstrp + 4;
      }
      goto <D.30725>;
      <D.30722>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30417 = ins->data.op[1].many_blocks;
      D.30418 = *D.30417;
      mono_add_patch_info (cfg, D.29264, 0, D.30418);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 704643072;
        code = __ainstrp + 4;
      }
      <D.30725>:
      <D.30716>:
      goto <D.25790>;
      <D.26342>:
      if (0 != 0) goto <D.30726>; else goto <D.30727>;
      <D.30726>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        code.148 = (int) code;
        D.29241 = cfg->native_code;
        D.29263 = (int) D.29241;
        D.29264 = code.148 - D.29263;
        D.30417 = ins->data.op[1].many_blocks;
        D.30418 = *D.30417;
        D.30419 = D.30418->native_offset;
        D.30420 = D.29264 + D.30419;
        D.30421 = D.30420 & 16777215;
        D.30703 = D.30421 | 1778384896;
        D.30704 = (unsigned int) D.30703;
        *__ainstrp = D.30704;
        code = __ainstrp + 4;
      }
      goto <D.30728>;
      <D.30727>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30417 = ins->data.op[1].many_blocks;
      D.30418 = *D.30417;
      mono_add_patch_info (cfg, D.29264, 0, D.30418);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 1778384896;
        code = __ainstrp + 4;
      }
      <D.30728>:
      if (0 != 0) goto <D.30729>; else goto <D.30730>;
      <D.30729>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        code.148 = (int) code;
        D.29241 = cfg->native_code;
        D.29263 = (int) D.29241;
        D.29264 = code.148 - D.29263;
        D.30417 = ins->data.op[1].many_blocks;
        D.30418 = *D.30417;
        D.30419 = D.30418->native_offset;
        D.30420 = D.29264 + D.30419;
        D.30421 = D.30420 & 16777215;
        D.30713 = D.30421 | -1442840576;
        D.30714 = (unsigned int) D.30713;
        *__ainstrp = D.30714;
        code = __ainstrp + 4;
      }
      goto <D.30731>;
      <D.30730>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      D.30417 = ins->data.op[1].many_blocks;
      D.30418 = *D.30417;
      mono_add_patch_info (cfg, D.29264, 0, D.30418);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 2852126720;
        code = __ainstrp + 4;
      }
      <D.30731>:
      goto <D.25790>;
      <D.26347>:
      if (1 != 0) goto <D.30732>; else goto <D.30733>;
      <D.30732>:
      vfp_scratch1.219 = vfp_scratch1;
      code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1.219);
      vfp_scratch2.224 = vfp_scratch2;
      code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch2.224);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        vfp_scratch2.224 = vfp_scratch2;
        D.30735 = vfp_scratch2.224 >> 1;
        D.30736 = D.30735 << 12;
        D.30737 = D.30736 | 246418368;
        vfp_scratch2.224 = vfp_scratch2;
        D.30738 = vfp_scratch2.224 & 1;
        D.30739 = D.30738 << 22;
        D.30740 = D.30737 | D.30739;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30741 = D.30740 | D.29996;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.29999 = D.29998 << 5;
        D.30742 = D.30741 | D.29999;
        D.30743 = D.30742 | -536870912;
        D.30744 = (unsigned int) D.30743;
        *__ainstrp = D.30744;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        vfp_scratch1.219 = vfp_scratch1;
        D.30507 = vfp_scratch1.219 >> 1;
        D.30508 = D.30507 << 12;
        D.30745 = D.30508 | 201329408;
        vfp_scratch1.219 = vfp_scratch1;
        D.30510 = vfp_scratch1.219 & 1;
        D.30511 = D.30510 << 22;
        D.30746 = D.30745 | D.30511;
        D.30747 = D.30746 | -509673472;
        D.30748 = (unsigned int) D.30747;
        *__ainstrp = D.30748;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3925868545;
        code = __ainstrp + 4;
      }
      MEM[(guint32 *)code] = 4294967295;
      code = code + 4;
      MEM[(guint32 *)code] = 2146435071;
      code = code + 4;
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        vfp_scratch2.224 = vfp_scratch2;
        D.30735 = vfp_scratch2.224 >> 1;
        D.30736 = D.30735 << 12;
        D.30749 = D.30736 | 246680384;
        vfp_scratch2.224 = vfp_scratch2;
        D.30738 = vfp_scratch2.224 & 1;
        D.30739 = D.30738 << 22;
        D.30750 = D.30749 | D.30739;
        vfp_scratch1.219 = vfp_scratch1;
        D.30507 = vfp_scratch1.219 >> 1;
        D.30751 = D.30750 | D.30507;
        vfp_scratch1.219 = vfp_scratch1;
        D.30510 = vfp_scratch1.219 & 1;
        D.30549 = D.30510 << 5;
        D.30752 = D.30751 | D.30549;
        D.30753 = D.30752 | -536870912;
        D.30754 = (unsigned int) D.30753;
        *__ainstrp = D.30754;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 4008835600;
        code = __ainstrp + 4;
      }
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      mono_add_patch_info (cfg, D.29264, 9, "ArithmeticException");
      {
        arminstr_t * __ainstrp;

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

        __ainstrp = code;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30458 = D.29996 << 12;
        D.30648 = D.30458 | 246680384;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.30460 = D.29998 << 22;
        D.30649 = D.30648 | D.30460;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.30755 = D.30649 | D.29996;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.29999 = D.29998 << 5;
        D.30756 = D.30755 | D.29999;
        D.30757 = D.30756 | -536870912;
        D.30758 = (unsigned int) D.30757;
        *__ainstrp = D.30758;
        code = __ainstrp + 4;
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 4008835600;
        code = __ainstrp + 4;
      }
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      mono_add_patch_info (cfg, D.29264, 9, "ArithmeticException");
      {
        arminstr_t * __ainstrp;

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

        __ainstrp = code;
        D.29290 = ins->dreg;
        D.29990 = D.29290 >> 1;
        D.29991 = D.29990 << 12;
        D.29992 = D.29991 | 246418240;
        D.29290 = ins->dreg;
        D.29993 = D.29290 & 1;
        D.29994 = D.29993 << 22;
        D.29995 = D.29992 | D.29994;
        D.29371 = ins->sreg1;
        D.29996 = D.29371 >> 1;
        D.29997 = D.29995 | D.29996;
        D.29371 = ins->sreg1;
        D.29998 = D.29371 & 1;
        D.29999 = D.29998 << 5;
        D.30000 = D.29997 | D.29999;
        D.30001 = D.30000 | -536870912;
        D.30002 = (unsigned int) D.30001;
        *__ainstrp = D.30002;
        code = __ainstrp + 4;
      }
      vfp_scratch1.219 = vfp_scratch1;
      code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1.219);
      vfp_scratch2.224 = vfp_scratch2;
      code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch2.224);
      <D.30733>:
      goto <D.25790>;
      <D.26358>:
      <D.26359>:
      <D.26360>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      ins->backend.pc_offset = D.29264;
      goto <D.25790>;
      <D.26361>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      ins->backend.pc_offset = D.29264;
      D.30759 = cfg->mempool;
      D.30760 = bb->spill_slot_defs;
      D.30761 = g_slist_prepend_mempool (D.30759, D.30760, ins);
      bb->spill_slot_defs = D.30761;
      goto <D.25790>;
      <D.26362>:
      D.29266 = ins->opcode;
      D.29267 = (int) D.29266;
      D.30762 = mono_inst_name (D.29267);
      monoeg_g_log (0B, 16, "unknown opcode %s in %s()\n", D.30762, &__FUNCTION__);
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5335);
      <D.25790>:
      D.30763 = cfg->opt;
      D.30764 = D.30763 & 2;
      if (D.30764 != 0) goto <D.30765>; else goto <D.30766>;
      <D.30765>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      offset.149 = (unsigned int) D.29264;
      offset.153 = offset;
      D.30767 = offset.149 - offset.153;
      max_len.151 = max_len;
      max_len.152 = (unsigned int) max_len.151;
      if (D.30767 > max_len.152) goto <D.30768>; else goto <D.30769>;
      <D.30768>:
      D.29266 = ins->opcode;
      D.29267 = (int) D.29266;
      D.30770 = mono_inst_name (D.29267);
      max_len.151 = max_len;
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      offset.149 = (unsigned int) D.29264;
      offset.153 = offset;
      D.30767 = offset.149 - offset.153;
      monoeg_g_log (0B, 16, "wrong maximal instruction length of instruction %s (expected %d, got %d)", D.30770, max_len.151, D.30767);
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5341);
      <D.30769>:
      <D.30766>:
      max_len.151 = max_len;
      cpos = cpos + max_len.151;
      last_ins = ins;
      last_offset = offset;
      ins = ins->next;
      <D.26365>:
      if (ins != 0B) goto <D.26364>; else goto <D.26366>;
      <D.26366>:
      code.148 = (int) code;
      D.29241 = cfg->native_code;
      D.29263 = (int) D.29241;
      D.29264 = code.148 - D.29263;
      offset.149 = (unsigned int) D.29264;
      cfg->code_len = offset.149;
    }
  finally
    {
      offset = {CLOBBER};
      max_len = {CLOBBER};
      rot_amount = {CLOBBER};
    }
}


emit_load_volatile_arguments (struct MonoCompile * cfg, guint8 * code)
{
  struct MonoGenericSharingContext * D.30793;
  int D.30794;
  int D.30797;
  unsigned int D.30798;
  unsigned int D.30799;
  _Bool D.30800;
  long int D.30801;
  long int D.30802;
  int D.30805;
  unsigned char D.30806;
  int D.30807;
  int D.30808;
  int D.30809;
  int D.30810;
  int D.30811;
  int D.30812;
  int D.30813;
  int iftmp.225;
  int D.30818;
  int D.30819;
  unsigned int D.30820;
  struct MonoInst * * D.30821;
  unsigned int D.30822;
  struct MonoInst * * D.30823;
  unsigned int D.30824;
  <unnamed type> D.30827;
  short unsigned int D.30828;
  unsigned char D.30833;
  int D.30834;
  int D.30835;
  int D.30836;
  int D.30837;
  int D.30838;
  unsigned int D.30839;
  unsigned int D.30846;
  <unnamed-unsigned:4> D.30849;
  int D.30850;
  int D.30853;
  int D.30854;
  int D.30855;
  int D.30856;
  int D.30857;
  int iftmp.226;
  int D.30862;
  int D.30863;
  unsigned int D.30864;
  unsigned int D.30865;
  _Bool D.30866;
  long int D.30867;
  long int D.30868;
  int iftmp.227;
  int D.30875;
  int D.30876;
  int D.30877;
  int D.30878;
  int D.30879;
  int iftmp.228;
  int D.30884;
  int D.30885;
  unsigned int D.30886;
  int iftmp.229;
  int D.30893;
  int D.30894;
  unsigned int D.30895;
  unsigned int D.30897;
  int D.30898;
  int D.30899;
  int D.30900;
  unsigned int D.30901;
  struct MonoType * D.30912;
  struct MonoClass * D.30913;
  struct MonoClass * D.30916;
  unsigned int doffset.230;
  unsigned int D.30918;
  int D.30921;
  int D.30922;
  int D.30923;
  int D.30924;
  int D.30925;
  int D.30926;
  int iftmp.231;
  int D.30931;
  int D.30932;
  unsigned int D.30933;
  unsigned int doffset.232;
  int D.30936;
  int D.30937;
  int D.30938;
  unsigned int D.30939;
  unsigned int soffset.233;
  unsigned int D.30941;
  unsigned int doffset.234;
  unsigned int D.30943;
  short unsigned int D.30944;
  short unsigned int D.30951;
  int D.30952;
  <unnamed-unsigned:1> D.30953;
  int D.30954;
  int D.30955;
  unsigned int D.30956;
  guint8 * D.30957;
  struct MonoMethod * method;
  struct MonoMethodSignature * sig;
  struct MonoInst * inst;
  struct CallInfo * cinfo;
  guint32 i;
  guint32 pos;

  method = cfg->method;
  sig = mono_method_signature (method);
  pos = 0;
  D.30793 = cfg->generic_sharing_context;
  cinfo = get_call_info (D.30793, 0B, sig);
  D.30794 = cinfo->vtype_retaddr;
  if (D.30794 != 0) goto <D.30795>; else goto <D.30796>;
  <D.30795>:
  {
    struct ArgInfo * ainfo;

    ainfo = &cinfo->ret;
    inst = cfg->vret_addr;
    D.30797 = inst->data.op[0].const_val;
    D.30798 = (unsigned int) D.30797;
    D.30799 = D.30798 + 4095;
    D.30800 = D.30799 > 8190;
    D.30801 = (long int) D.30800;
    D.30802 = __builtin_expect (D.30801, 0);
    if (D.30802 != 0) goto <D.30803>; else goto <D.30804>;
    <D.30803>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3929, "arm_is_imm12 (inst->inst_offset)");
    <D.30804>:
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.30797 = inst->data.op[0].const_val;
      D.30805 = ABS_EXPR <D.30797>;
      D.30806 = ainfo->reg;
      D.30807 = (int) D.30806;
      D.30808 = D.30807 << 12;
      D.30809 = D.30805 | D.30808;
      D.30810 = inst->sreg1;
      D.30811 = D.30810 << 16;
      D.30812 = D.30809 | D.30811;
      D.30813 = D.30812 | 1048576;
      D.30797 = inst->data.op[0].const_val;
      if (D.30797 >= 0) goto <D.30815>; else goto <D.30816>;
      <D.30815>:
      iftmp.225 = 8388608;
      goto <D.30817>;
      <D.30816>:
      iftmp.225 = 0;
      <D.30817>:
      D.30818 = D.30813 | iftmp.225;
      D.30819 = D.30818 | -452984832;
      D.30820 = (unsigned int) D.30819;
      *__ainstrp = D.30820;
      code = __ainstrp + 4;
    }
  }
  <D.30796>:
  i = 0;
  goto <D.25771>;
  <D.25770>:
  {
    struct ArgInfo * ainfo;

    ainfo = &cinfo->args[i];
    D.30821 = cfg->args;
    D.30822 = pos * 4;
    D.30823 = D.30821 + D.30822;
    inst = *D.30823;
    D.30824 = cfg->verbose_level;
    if (D.30824 > 2) goto <D.30825>; else goto <D.30826>;
    <D.30825>:
    D.30827 = ainfo->storage;
    monoeg_g_print ("Loading argument %d (type: %d)\n", i, D.30827);
    <D.30826>:
    D.30828 = inst->opcode;
    if (D.30828 == 366) goto <D.30829>; else goto <D.30830>;
    <D.30829>:
    D.30827 = ainfo->storage;
    if (D.30827 == 1) goto <D.30831>; else goto <D.30832>;
    <D.30831>:
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.30833 = ainfo->reg;
      D.30834 = (int) D.30833;
      D.30835 = inst->dreg;
      D.30836 = D.30835 << 12;
      D.30837 = D.30834 | D.30836;
      D.30838 = D.30837 | -509607936;
      D.30839 = (unsigned int) D.30838;
      *__ainstrp = D.30839;
      code = __ainstrp + 4;
    }
    goto <D.30840>;
    <D.30832>:
    D.30827 = ainfo->storage;
    if (D.30827 == 5) goto <D.30841>; else goto <D.30842>;
    <D.30841>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 3942);
    <D.30842>:
    D.30827 = ainfo->storage;
    if (D.30827 == 3) goto <D.30843>; else goto <D.30844>;
    <D.30843>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 3945);
    <D.30844>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 3955);
    <D.30840>:
    goto <D.30845>;
    <D.30830>:
    D.30827 = ainfo->storage;
    D.30846 = D.30827 + 4294967295;
    if (D.30846 <= 1) goto <D.30847>; else goto <D.30848>;
    <D.30847>:
    D.30849 = ainfo->size;
    D.30850 = (int) D.30849;
    switch (D.30850) <default: <D.25758>, case 1: <D.25752>, case 2: <D.25753>, case 8: <D.25754>>
    <D.25752>:
    <D.25753>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 3962);
    <D.25754>:
    D.30797 = inst->data.op[0].const_val;
    D.30798 = (unsigned int) D.30797;
    D.30799 = D.30798 + 4095;
    D.30800 = D.30799 > 8190;
    D.30801 = (long int) D.30800;
    D.30802 = __builtin_expect (D.30801, 0);
    if (D.30802 != 0) goto <D.30851>; else goto <D.30852>;
    <D.30851>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3965, "arm_is_imm12 (inst->inst_offset)");
    <D.30852>:
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.30797 = inst->data.op[0].const_val;
      D.30805 = ABS_EXPR <D.30797>;
      D.30833 = ainfo->reg;
      D.30853 = (int) D.30833;
      D.30854 = D.30853 << 12;
      D.30855 = D.30805 | D.30854;
      D.30810 = inst->sreg1;
      D.30811 = D.30810 << 16;
      D.30856 = D.30855 | D.30811;
      D.30857 = D.30856 | 1048576;
      D.30797 = inst->data.op[0].const_val;
      if (D.30797 >= 0) goto <D.30859>; else goto <D.30860>;
      <D.30859>:
      iftmp.226 = 8388608;
      goto <D.30861>;
      <D.30860>:
      iftmp.226 = 0;
      <D.30861>:
      D.30862 = D.30857 | iftmp.226;
      D.30863 = D.30862 | -452984832;
      D.30864 = (unsigned int) D.30863;
      *__ainstrp = D.30864;
      code = __ainstrp + 4;
    }
    D.30797 = inst->data.op[0].const_val;
    D.30798 = (unsigned int) D.30797;
    D.30865 = D.30798 + 4099;
    D.30866 = D.30865 > 8190;
    D.30867 = (long int) D.30866;
    D.30868 = __builtin_expect (D.30867, 0);
    if (D.30868 != 0) goto <D.30869>; else goto <D.30870>;
    <D.30869>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 3967, "arm_is_imm12 (inst->inst_offset + 4)");
    <D.30870>:
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.30797 = inst->data.op[0].const_val;
      if (D.30797 < -4) goto <D.30872>; else goto <D.30873>;
      <D.30872>:
      D.30797 = inst->data.op[0].const_val;
      iftmp.227 = -4 - D.30797;
      goto <D.30874>;
      <D.30873>:
      D.30797 = inst->data.op[0].const_val;
      iftmp.227 = D.30797 + 4;
      <D.30874>:
      D.30833 = ainfo->reg;
      D.30853 = (int) D.30833;
      D.30875 = D.30853 + 1;
      D.30876 = D.30875 << 12;
      D.30877 = iftmp.227 | D.30876;
      D.30810 = inst->sreg1;
      D.30811 = D.30810 << 16;
      D.30878 = D.30877 | D.30811;
      D.30879 = D.30878 | 1048576;
      D.30797 = inst->data.op[0].const_val;
      if (D.30797 >= -4) goto <D.30881>; else goto <D.30882>;
      <D.30881>:
      iftmp.228 = 8388608;
      goto <D.30883>;
      <D.30882>:
      iftmp.228 = 0;
      <D.30883>:
      D.30884 = D.30879 | iftmp.228;
      D.30885 = D.30884 | -452984832;
      D.30886 = (unsigned int) D.30885;
      *__ainstrp = D.30886;
      code = __ainstrp + 4;
    }
    goto <D.25757>;
    <D.25758>:
    D.30797 = inst->data.op[0].const_val;
    D.30798 = (unsigned int) D.30797;
    D.30799 = D.30798 + 4095;
    if (D.30799 <= 8190) goto <D.30887>; else goto <D.30888>;
    <D.30887>:
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.30797 = inst->data.op[0].const_val;
      D.30805 = ABS_EXPR <D.30797>;
      D.30833 = ainfo->reg;
      D.30853 = (int) D.30833;
      D.30854 = D.30853 << 12;
      D.30855 = D.30805 | D.30854;
      D.30810 = inst->sreg1;
      D.30811 = D.30810 << 16;
      D.30856 = D.30855 | D.30811;
      D.30857 = D.30856 | 1048576;
      D.30797 = inst->data.op[0].const_val;
      if (D.30797 >= 0) goto <D.30890>; else goto <D.30891>;
      <D.30890>:
      iftmp.229 = 8388608;
      goto <D.30892>;
      <D.30891>:
      iftmp.229 = 0;
      <D.30892>:
      D.30893 = D.30857 | iftmp.229;
      D.30894 = D.30893 | -452984832;
      D.30895 = (unsigned int) D.30894;
      *__ainstrp = D.30895;
      code = __ainstrp + 4;
    }
    goto <D.30896>;
    <D.30888>:
    D.30797 = inst->data.op[0].const_val;
    D.30897 = (unsigned int) D.30797;
    code = mono_arm_emit_load_imm (code, 12, D.30897);
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.30833 = ainfo->reg;
      D.30853 = (int) D.30833;
      D.30854 = D.30853 << 12;
      D.30898 = D.30854 | 12;
      D.30810 = inst->sreg1;
      D.30811 = D.30810 << 16;
      D.30899 = D.30898 | D.30811;
      D.30900 = D.30899 | -409993216;
      D.30901 = (unsigned int) D.30900;
      *__ainstrp = D.30901;
      code = __ainstrp + 4;
    }
    <D.30896>:
    goto <D.25757>;
    <D.25757>:
    goto <D.30902>;
    <D.30848>:
    D.30827 = ainfo->storage;
    if (D.30827 == 4) goto <D.30903>; else goto <D.30904>;
    <D.30903>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 3981);
    <D.30904>:
    D.30827 = ainfo->storage;
    if (D.30827 == 3) goto <D.30905>; else goto <D.30906>;
    <D.30905>:
    goto <D.30907>;
    <D.30906>:
    D.30827 = ainfo->storage;
    if (D.30827 == 5) goto <D.30908>; else goto <D.30909>;
    <D.30908>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 3985);
    <D.30909>:
    D.30827 = ainfo->storage;
    if (D.30827 == 6) goto <D.30910>; else goto <D.30911>;
    <D.30910>:
    {
      int doffset;
      int soffset;
      int cur_reg;
      int size;

      doffset = inst->data.op[0].const_val;
      soffset = 0;
      size = 0;
      D.30912 = inst->data.op[1].vtype;
      D.30913 = mono_class_from_mono_type (D.30912);
      if (D.30913 != 0B) goto <D.30914>; else goto <D.30915>;
      <D.30914>:
      D.30912 = inst->data.op[1].vtype;
      D.30916 = mono_class_from_mono_type (D.30912);
      size = mono_class_native_size (D.30916, 0B);
      <D.30915>:
      cur_reg = 0;
      goto <D.25768>;
      <D.25767>:
      doffset.230 = (unsigned int) doffset;
      D.30918 = doffset.230 + 4095;
      if (D.30918 <= 8190) goto <D.30919>; else goto <D.30920>;
      <D.30919>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.30921 = ABS_EXPR <doffset>;
        D.30833 = ainfo->reg;
        D.30853 = (int) D.30833;
        D.30922 = D.30853 + cur_reg;
        D.30923 = D.30922 << 12;
        D.30924 = D.30921 | D.30923;
        D.30810 = inst->sreg1;
        D.30811 = D.30810 << 16;
        D.30925 = D.30924 | D.30811;
        D.30926 = D.30925 | 1048576;
        if (doffset >= 0) goto <D.30928>; else goto <D.30929>;
        <D.30928>:
        iftmp.231 = 8388608;
        goto <D.30930>;
        <D.30929>:
        iftmp.231 = 0;
        <D.30930>:
        D.30931 = D.30926 | iftmp.231;
        D.30932 = D.30931 | -452984832;
        D.30933 = (unsigned int) D.30932;
        *__ainstrp = D.30933;
        code = __ainstrp + 4;
      }
      goto <D.30934>;
      <D.30920>:
      doffset.232 = (unsigned int) doffset;
      code = mono_arm_emit_load_imm (code, 12, doffset.232);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.30833 = ainfo->reg;
        D.30853 = (int) D.30833;
        D.30922 = D.30853 + cur_reg;
        D.30923 = D.30922 << 12;
        D.30936 = D.30923 | 12;
        D.30810 = inst->sreg1;
        D.30811 = D.30810 << 16;
        D.30937 = D.30936 | D.30811;
        D.30938 = D.30937 | -409993216;
        D.30939 = (unsigned int) D.30938;
        *__ainstrp = D.30939;
        code = __ainstrp + 4;
      }
      <D.30934>:
      soffset.233 = (unsigned int) soffset;
      D.30941 = soffset.233 + 4;
      soffset = (int) D.30941;
      doffset.234 = (unsigned int) doffset;
      D.30943 = doffset.234 + 4;
      doffset = (int) D.30943;
      cur_reg = cur_reg + 1;
      <D.25768>:
      D.30849 = ainfo->size;
      D.30850 = (int) D.30849;
      if (D.30850 > cur_reg) goto <D.25767>; else goto <D.25769>;
      <D.25769>:
      D.30944 = ainfo->vtsize;
      if (D.30944 != 0) goto <D.30945>; else goto <D.30946>;
      <D.30945>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 4005);
      <D.30946>:
    }
    goto <D.30947>;
    <D.30911>:
    D.30827 = ainfo->storage;
    if (D.30827 == 7) goto <D.30948>; else goto <D.30949>;
    <D.30948>:
    goto <D.30950>;
    <D.30949>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 4009);
    <D.30950>:
    <D.30947>:
    <D.30907>:
    <D.30902>:
    <D.30845>:
    pos = pos + 1;
  }
  i = i + 1;
  <D.25771>:
  D.30951 = sig->param_count;
  D.30952 = (int) D.30951;
  D.30953 = sig->hasthis;
  D.30954 = (int) D.30953;
  D.30955 = D.30952 + D.30954;
  D.30956 = (unsigned int) D.30955;
  if (D.30956 > i) goto <D.25770>; else goto <D.25772>;
  <D.25772>:
  monoeg_g_free (cinfo);
  D.30957 = code;
  return D.30957;
}


emit_big_add (guint8 * code, int dreg, int sreg, int imm)
{
  unsigned int imm.235;
  int D.30962;
  int rot_amount.236;
  int D.30964;
  int D.30965;
  int D.30966;
  int D.30967;
  int D.30968;
  int D.30969;
  int D.30970;
  int D.30971;
  int D.30972;
  unsigned int D.30973;
  guint8 * D.30974;
  _Bool D.30975;
  long int D.30976;
  long int D.30977;
  int D.30980;
  int D.30981;
  int D.30982;
  int D.30983;
  unsigned int D.30984;
  int imm8;
  int rot_amount;

  try
    {
      imm.235 = (unsigned int) imm;
      imm8 = mono_arm_is_rotated_imm8 (imm.235, &rot_amount);
      if (imm8 >= 0) goto <D.30960>; else goto <D.30961>;
      <D.30960>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.30962 = imm8 & 255;
        rot_amount.236 = rot_amount;
        D.30964 = rot_amount.236 >> 1;
        D.30965 = D.30964 & 15;
        D.30966 = D.30965 << 8;
        D.30967 = D.30962 | D.30966;
        D.30968 = dreg << 12;
        D.30969 = D.30967 | D.30968;
        D.30970 = sreg << 16;
        D.30971 = D.30969 | D.30970;
        D.30972 = D.30971 | -494927872;
        D.30973 = (unsigned int) D.30972;
        *__ainstrp = D.30973;
        code = __ainstrp + 4;
      }
      D.30974 = code;
      return D.30974;
      <D.30961>:
      D.30975 = dreg == sreg;
      D.30976 = (long int) D.30975;
      D.30977 = __builtin_expect (D.30976, 0);
      if (D.30977 != 0) goto <D.30978>; else goto <D.30979>;
      <D.30978>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 257, "dreg != sreg");
      <D.30979>:
      imm.235 = (unsigned int) imm;
      code = mono_arm_emit_load_imm (code, dreg, imm.235);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.30968 = dreg << 12;
        D.30980 = D.30968 | sreg;
        D.30981 = dreg << 16;
        D.30982 = D.30980 | D.30981;
        D.30983 = D.30982 | -528482304;
        D.30984 = (unsigned int) D.30983;
        *__ainstrp = D.30984;
        code = __ainstrp + 4;
      }
      D.30974 = code;
      return D.30974;
    }
  finally
    {
      rot_amount = {CLOBBER};
    }
}


emit_float_args (struct MonoCompile * cfg, struct MonoCallInst * inst, guint8 * code, int * max_len, guint * offset)
{
  struct MonoInst * iftmp.237;
  int D.30988;
  unsigned int D.30989;
  unsigned int D.30990;
  struct MonoInst * * D.30993;
  unsigned int D.30994;
  unsigned int D.30995;
  struct MonoInst * * D.30996;
  int D.30998;
  unsigned int D.30999;
  unsigned int D.31000;
  _Bool D.31001;
  int D.31004;
  int D.31005;
  int D.31006;
  unsigned int D.31007;
  unsigned int D.31008;
  unsigned int D.31009;
  unsigned int D.31010;
  unsigned int D.31013;
  unsigned char * D.31014;
  void * D.31015;
  int D.31018;
  int D.31019;
  int D.31020;
  int D.31021;
  int D.31022;
  int D.31023;
  int D.31024;
  int D.31025;
  int D.31026;
  unsigned int D.31027;
  gint32 iftmp.238;
  int D.31032;
  int D.31034;
  int D.31035;
  int D.31036;
  int D.31037;
  int D.31038;
  int D.31039;
  int D.31040;
  int iftmp.239;
  int D.31045;
  int D.31046;
  unsigned int D.31047;
  int code.240;
  int D.31049;
  int D.31050;
  unsigned int D.31051;
  guint8 * D.31052;
  struct GSList * list;

  list = inst->float_args;
  goto <D.24741>;
  <D.24740>:
  {
    struct FloatArgData * fad;
    struct MonoInst * var;
    gboolean imm;

    fad = list->data;
    D.30988 = fad->vreg;
    D.30989 = (unsigned int) D.30988;
    D.30990 = cfg->vreg_to_inst_len;
    if (D.30989 < D.30990) goto <D.30991>; else goto <D.30992>;
    <D.30991>:
    D.30993 = cfg->vreg_to_inst;
    D.30988 = fad->vreg;
    D.30994 = (unsigned int) D.30988;
    D.30995 = D.30994 * 4;
    D.30996 = D.30993 + D.30995;
    iftmp.237 = *D.30996;
    goto <D.30997>;
    <D.30992>:
    iftmp.237 = 0B;
    <D.30997>:
    var = iftmp.237;
    D.30998 = var->data.op[0].const_val;
    D.30999 = (unsigned int) D.30998;
    D.31000 = D.30999 + 1020;
    D.31001 = D.31000 <= 2040;
    imm = (gboolean) D.31001;
    if (imm != 0) goto <D.31002>; else goto <D.31003>;
    <D.31002>:
    D.31004 = *max_len;
    D.31005 = D.31004 + 24;
    *max_len = D.31005;
    <D.31003>:
    D.31004 = *max_len;
    D.31006 = D.31004 + 4;
    *max_len = D.31006;
    D.31007 = *offset;
    D.31004 = *max_len;
    D.31008 = (unsigned int) D.31004;
    D.31009 = D.31007 + D.31008;
    D.31010 = cfg->code_size;
    if (D.31009 > D.31010) goto <D.31011>; else goto <D.31012>;
    <D.31011>:
    D.31010 = cfg->code_size;
    D.31004 = *max_len;
    D.31008 = (unsigned int) D.31004;
    D.31013 = D.31010 + D.31008;
    cfg->code_size = D.31013;
    D.31014 = cfg->native_code;
    D.31010 = cfg->code_size;
    D.31015 = monoeg_realloc (D.31014, D.31010);
    cfg->native_code = D.31015;
    D.31014 = cfg->native_code;
    D.31007 = *offset;
    code = D.31014 + D.31007;
    <D.31012>:
    if (imm == 0) goto <D.31016>; else goto <D.31017>;
    <D.31016>:
    D.31018 = var->sreg1;
    D.30998 = var->data.op[0].const_val;
    code = emit_big_add (code, 14, D.31018, D.30998);
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.31019 = fad->hreg;
      D.31020 = D.31019 >> 1;
      D.31021 = D.31020 << 12;
      D.31022 = D.31021 | 201329152;
      D.31019 = fad->hreg;
      D.31023 = D.31019 & 1;
      D.31024 = D.31023 << 22;
      D.31025 = D.31022 | D.31024;
      D.31026 = D.31025 | -509739008;
      D.31027 = (unsigned int) D.31026;
      *__ainstrp = D.31027;
      code = __ainstrp + 4;
    }
    goto <D.31028>;
    <D.31017>:
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.30998 = var->data.op[0].const_val;
      if (D.30998 >= 0) goto <D.31030>; else goto <D.31031>;
      <D.31030>:
      D.30998 = var->data.op[0].const_val;
      D.31032 = D.30998 >> 2;
      iftmp.238 = D.31032 | 201329152;
      goto <D.31033>;
      <D.31031>:
      D.30998 = var->data.op[0].const_val;
      D.31034 = -D.30998;
      D.31035 = D.31034 >> 2;
      iftmp.238 = D.31035 | 201329152;
      <D.31033>:
      D.31019 = fad->hreg;
      D.31020 = D.31019 >> 1;
      D.31021 = D.31020 << 12;
      D.31036 = iftmp.238 | D.31021;
      D.31019 = fad->hreg;
      D.31023 = D.31019 & 1;
      D.31024 = D.31023 << 22;
      D.31037 = D.31036 | D.31024;
      D.31018 = var->sreg1;
      D.31038 = D.31018 << 16;
      D.31039 = D.31037 | D.31038;
      D.31040 = D.31039 | 1048576;
      D.30998 = var->data.op[0].const_val;
      if (D.30998 >= 0) goto <D.31042>; else goto <D.31043>;
      <D.31042>:
      iftmp.239 = 8388608;
      goto <D.31044>;
      <D.31043>:
      iftmp.239 = 0;
      <D.31044>:
      D.31045 = D.31040 | iftmp.239;
      D.31046 = D.31045 | -520093696;
      D.31047 = (unsigned int) D.31046;
      *__ainstrp = D.31047;
      code = __ainstrp + 4;
    }
    <D.31028>:
    code.240 = (int) code;
    D.31014 = cfg->native_code;
    D.31049 = (int) D.31014;
    D.31050 = code.240 - D.31049;
    D.31051 = (unsigned int) D.31050;
    *offset = D.31051;
  }
  list = list->next;
  <D.24741>:
  if (list != 0B) goto <D.24740>; else goto <D.24742>;
  <D.24742>:
  D.31052 = code;
  return D.31052;
}


emit_move_return_value (struct MonoCompile * cfg, struct MonoInst * ins, guint8 * code)
{
  short unsigned int D.31054;
  int D.31055;
  struct MonoMethodSignature * D.31058;
  struct MonoType * D.31059;
  unsigned char D.31060;
  int D.31065;
  int D.31066;
  int D.31067;
  int D.31068;
  int D.31069;
  int D.31070;
  int D.31071;
  int D.31072;
  unsigned int D.31073;
  int D.31075;
  int D.31076;
  int D.31077;
  int D.31078;
  int D.31079;
  int D.31080;
  unsigned int D.31081;
  int D.31082;
  int D.31083;
  int D.31084;
  int D.31085;
  unsigned int D.31086;
  int D.31090;
  int D.31091;
  int D.31092;
  unsigned int D.31093;
  int D.31095;
  int D.31096;
  int D.31097;
  unsigned int D.31098;
  guint8 * D.31100;

  D.31054 = ins->opcode;
  D.31055 = (int) D.31054;
  switch (D.31055) <default: <D.31099>, case 349: <D.24688>, case 350: <D.24689>, case 351: <D.24690>>
  <D.24688>:
  <D.24689>:
  <D.24690>:
  if (1 != 0) goto <D.31056>; else goto <D.31057>;
  <D.31056>:
  D.31058 = MEM[(struct MonoCallInst *)ins].signature;
  D.31059 = D.31058->ret;
  D.31060 = D.31059->type;
  if (D.31060 == 12) goto <D.31061>; else goto <D.31062>;
  <D.31061>:
  if (1 != 0) goto <D.31063>; else goto <D.31064>;
  <D.31063>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31065 = ins->dreg;
    D.31066 = D.31065 >> 1;
    D.31067 = D.31066 << 12;
    D.31068 = D.31067 | 246876864;
    D.31065 = ins->dreg;
    D.31069 = D.31065 & 1;
    D.31070 = D.31069 << 22;
    D.31071 = D.31068 | D.31070;
    D.31072 = D.31071 | -536870912;
    D.31073 = (unsigned int) D.31072;
    *__ainstrp = D.31073;
    code = __ainstrp + 4;
  }
  goto <D.31074>;
  <D.31064>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31065 = ins->dreg;
    D.31066 = D.31065 >> 1;
    D.31075 = D.31066 << 16;
    D.31076 = D.31075 | 234883600;
    D.31065 = ins->dreg;
    D.31077 = D.31065 << 7;
    D.31078 = D.31077 & 255;
    D.31079 = D.31076 | D.31078;
    D.31080 = D.31079 | -536870912;
    D.31081 = (unsigned int) D.31080;
    *__ainstrp = D.31081;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31065 = ins->dreg;
    D.31066 = D.31065 >> 1;
    D.31067 = D.31066 << 12;
    D.31068 = D.31067 | 246876864;
    D.31065 = ins->dreg;
    D.31069 = D.31065 & 1;
    D.31070 = D.31069 << 22;
    D.31071 = D.31068 | D.31070;
    D.31065 = ins->dreg;
    D.31066 = D.31065 >> 1;
    D.31082 = D.31071 | D.31066;
    D.31065 = ins->dreg;
    D.31069 = D.31065 & 1;
    D.31083 = D.31069 << 5;
    D.31084 = D.31082 | D.31083;
    D.31085 = D.31084 | -536870912;
    D.31086 = (unsigned int) D.31085;
    *__ainstrp = D.31086;
    code = __ainstrp + 4;
  }
  <D.31074>:
  goto <D.31087>;
  <D.31062>:
  if (1 != 0) goto <D.31088>; else goto <D.31089>;
  <D.31088>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31065 = ins->dreg;
    D.31066 = D.31065 >> 1;
    D.31067 = D.31066 << 12;
    D.31090 = D.31067 | 246418240;
    D.31065 = ins->dreg;
    D.31069 = D.31065 & 1;
    D.31070 = D.31069 << 22;
    D.31091 = D.31090 | D.31070;
    D.31092 = D.31091 | -536870912;
    D.31093 = (unsigned int) D.31092;
    *__ainstrp = D.31093;
    code = __ainstrp + 4;
  }
  goto <D.31094>;
  <D.31089>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31065 = ins->dreg;
    D.31066 = D.31065 >> 1;
    D.31095 = D.31066 | 16;
    D.31065 = ins->dreg;
    D.31069 = D.31065 & 1;
    D.31083 = D.31069 << 5;
    D.31096 = D.31095 | D.31083;
    D.31097 = D.31096 | -331281664;
    D.31098 = (unsigned int) D.31097;
    *__ainstrp = D.31098;
    code = __ainstrp + 4;
  }
  <D.31094>:
  <D.31087>:
  <D.31057>:
  goto <D.24696>;
  <D.31099>:
  <D.24696>:
  D.31100 = code;
  return D.31100;
}


emit_call_seq (struct MonoCompile * cfg, guint8 * code)
{
  struct MonoMethod * D.31103;
  unsigned char D.31104;
  unsigned char D.31105;
  guint8 * D.31109;

  D.31103 = cfg->method;
  D.31104 = BIT_FIELD_REF <*D.31103, 8, 168>;
  D.31105 = D.31104 & 2;
  if (D.31105 != 0) goto <D.31106>; else goto <D.31107>;
  <D.31106>:
  {
    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;
  code = emit_call_reg (code, 12);
  goto <D.31108>;
  <D.31107>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3942645760;
    code = __ainstrp + 4;
  }
  <D.31108>:
  D.31109 = code;
  return D.31109;
}


emit_float_to_int (struct MonoCompile * cfg, guchar * code, int dreg, int sreg, int size, gboolean is_signed)
{
  int vfp_scratch1.241;
  int D.31116;
  int D.31117;
  int D.31118;
  int D.31119;
  int D.31120;
  int D.31121;
  int D.31122;
  int D.31123;
  int D.31124;
  int D.31125;
  int D.31126;
  int D.31127;
  unsigned int D.31128;
  int D.31130;
  int D.31131;
  int D.31132;
  int D.31133;
  int D.31134;
  unsigned int D.31135;
  int D.31136;
  int D.31137;
  int D.31138;
  int D.31139;
  int D.31140;
  int D.31141;
  int D.31142;
  int D.31143;
  unsigned int D.31144;
  int D.31149;
  int D.31150;
  int D.31151;
  int D.31152;
  unsigned int D.31153;
  int D.31157;
  int D.31158;
  int D.31159;
  unsigned int D.31160;
  int D.31161;
  int D.31162;
  int D.31163;
  unsigned int D.31164;
  int D.31168;
  int D.31169;
  int D.31170;
  unsigned int D.31171;
  int D.31172;
  int D.31173;
  int D.31174;
  unsigned int D.31175;
  int D.31179;
  int D.31180;
  int D.31181;
  unsigned int D.31182;
  guchar * D.31183;

  if (1 != 0) goto <D.31111>; else goto <D.31112>;
  <D.31111>:
  vfp_scratch1.241 = vfp_scratch1;
  code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1.241);
  if (is_signed != 0) goto <D.31114>; else goto <D.31115>;
  <D.31114>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    vfp_scratch1.241 = vfp_scratch1;
    D.31116 = vfp_scratch1.241 >> 1;
    D.31117 = D.31116 << 12;
    D.31118 = D.31117 | 247270336;
    vfp_scratch1.241 = vfp_scratch1;
    D.31119 = vfp_scratch1.241 & 1;
    D.31120 = D.31119 << 22;
    D.31121 = D.31118 | D.31120;
    D.31122 = sreg >> 1;
    D.31123 = D.31121 | D.31122;
    D.31124 = sreg & 1;
    D.31125 = D.31124 << 5;
    D.31126 = D.31123 | D.31125;
    D.31127 = D.31126 | -536870912;
    D.31128 = (unsigned int) D.31127;
    *__ainstrp = D.31128;
    code = __ainstrp + 4;
  }
  goto <D.31129>;
  <D.31115>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    vfp_scratch1.241 = vfp_scratch1;
    D.31116 = vfp_scratch1.241 >> 1;
    D.31117 = D.31116 << 12;
    D.31130 = D.31117 | 247204800;
    vfp_scratch1.241 = vfp_scratch1;
    D.31119 = vfp_scratch1.241 & 1;
    D.31120 = D.31119 << 22;
    D.31131 = D.31130 | D.31120;
    D.31122 = sreg >> 1;
    D.31132 = D.31131 | D.31122;
    D.31124 = sreg & 1;
    D.31125 = D.31124 << 5;
    D.31133 = D.31132 | D.31125;
    D.31134 = D.31133 | -536870912;
    D.31135 = (unsigned int) D.31134;
    *__ainstrp = D.31135;
    code = __ainstrp + 4;
  }
  <D.31129>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31136 = dreg << 12;
    D.31137 = D.31136 | 235932176;
    vfp_scratch1.241 = vfp_scratch1;
    D.31116 = vfp_scratch1.241 >> 1;
    D.31138 = D.31116 << 16;
    D.31139 = D.31137 | D.31138;
    vfp_scratch1.241 = vfp_scratch1;
    D.31140 = vfp_scratch1.241 << 7;
    D.31141 = D.31140 & 255;
    D.31142 = D.31139 | D.31141;
    D.31143 = D.31142 | -536870912;
    D.31144 = (unsigned int) D.31143;
    *__ainstrp = D.31144;
    code = __ainstrp + 4;
  }
  vfp_scratch1.241 = vfp_scratch1;
  code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1.241);
  <D.31112>:
  if (is_signed == 0) goto <D.31145>; else goto <D.31146>;
  <D.31145>:
  if (size == 1) goto <D.31147>; else goto <D.31148>;
  <D.31147>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31136 = dreg << 12;
    D.31149 = D.31136 | 255;
    D.31150 = dreg << 16;
    D.31151 = D.31149 | D.31150;
    D.31152 = D.31151 | -503316480;
    D.31153 = (unsigned int) D.31152;
    *__ainstrp = D.31153;
    code = __ainstrp + 4;
  }
  goto <D.31154>;
  <D.31148>:
  if (size == 2) goto <D.31155>; else goto <D.31156>;
  <D.31155>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31157 = dreg | 2048;
    D.31136 = dreg << 12;
    D.31158 = D.31157 | D.31136;
    D.31159 = D.31158 | -509607936;
    D.31160 = (unsigned int) D.31159;
    *__ainstrp = D.31160;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31161 = dreg | 2080;
    D.31136 = dreg << 12;
    D.31162 = D.31161 | D.31136;
    D.31163 = D.31162 | -509607936;
    D.31164 = (unsigned int) D.31163;
    *__ainstrp = D.31164;
    code = __ainstrp + 4;
  }
  <D.31156>:
  <D.31154>:
  goto <D.31165>;
  <D.31146>:
  if (size == 1) goto <D.31166>; else goto <D.31167>;
  <D.31166>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31168 = dreg | 3072;
    D.31136 = dreg << 12;
    D.31169 = D.31168 | D.31136;
    D.31170 = D.31169 | -509607936;
    D.31171 = (unsigned int) D.31170;
    *__ainstrp = D.31171;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31172 = dreg | 3136;
    D.31136 = dreg << 12;
    D.31173 = D.31172 | D.31136;
    D.31174 = D.31173 | -509607936;
    D.31175 = (unsigned int) D.31174;
    *__ainstrp = D.31175;
    code = __ainstrp + 4;
  }
  goto <D.31176>;
  <D.31167>:
  if (size == 2) goto <D.31177>; else goto <D.31178>;
  <D.31177>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31157 = dreg | 2048;
    D.31136 = dreg << 12;
    D.31158 = D.31157 | D.31136;
    D.31159 = D.31158 | -509607936;
    D.31160 = (unsigned int) D.31159;
    *__ainstrp = D.31160;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31179 = dreg | 2112;
    D.31136 = dreg << 12;
    D.31180 = D.31179 | D.31136;
    D.31181 = D.31180 | -509607936;
    D.31182 = (unsigned int) D.31181;
    *__ainstrp = D.31182;
    code = __ainstrp + 4;
  }
  <D.31178>:
  <D.31176>:
  <D.31165>:
  D.31183 = code;
  return D.31183;
}


mono_arm_emit_vfp_scratch_save (struct MonoCompile * cfg, guint8 * code, int reg)
{
  int iftmp.242;
  int vfp_scratch1.243;
  int vfp_scratch2.244;
  _Bool D.31192;
  long int D.31193;
  long int D.31194;
  _Bool D.31197;
  int D.31198;
  int D.31201;
  unsigned int D.31202;
  unsigned int D.31203;
  int D.31206;
  int D.31207;
  int D.31208;
  int D.31209;
  int D.31210;
  int D.31211;
  int D.31212;
  int D.31213;
  unsigned int D.31214;
  int iftmp.245;
  int D.31219;
  int D.31221;
  int D.31222;
  int D.31223;
  int D.31224;
  int D.31225;
  int D.31226;
  int iftmp.246;
  int D.31231;
  int D.31232;
  unsigned int D.31233;
  guint8 * D.31234;
  struct MonoInst * inst;

  vfp_scratch1.243 = vfp_scratch1;
  if (reg != vfp_scratch1.243) goto <D.31189>; else goto <D.31186>;
  <D.31189>:
  vfp_scratch2.244 = vfp_scratch2;
  if (reg != vfp_scratch2.244) goto <D.31191>; else goto <D.31186>;
  <D.31191>:
  iftmp.242 = 1;
  goto <D.31187>;
  <D.31186>:
  iftmp.242 = 0;
  <D.31187>:
  D.31192 = iftmp.242 != 0;
  D.31193 = (long int) D.31192;
  D.31194 = __builtin_expect (D.31193, 0);
  if (D.31194 != 0) goto <D.31195>; else goto <D.31196>;
  <D.31195>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 554, "reg == vfp_scratch1 || reg == vfp_scratch2");
  <D.31196>:
  vfp_scratch1.243 = vfp_scratch1;
  D.31197 = reg != vfp_scratch1.243;
  D.31198 = (int) D.31197;
  inst = cfg->arch.vfp_scratch_slots[D.31198];
  if (1 != 0) goto <D.31199>; else goto <D.31200>;
  <D.31199>:
  D.31201 = inst->data.op[0].const_val;
  D.31202 = (unsigned int) D.31201;
  D.31203 = D.31202 + 1020;
  if (D.31203 > 2040) goto <D.31204>; else goto <D.31205>;
  <D.31204>:
  D.31206 = inst->sreg1;
  D.31201 = inst->data.op[0].const_val;
  code = emit_big_add (code, 14, D.31206, D.31201);
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31207 = reg >> 1;
    D.31208 = D.31207 << 12;
    D.31209 = D.31208 | 201329408;
    D.31210 = reg & 1;
    D.31211 = D.31210 << 22;
    D.31212 = D.31209 | D.31211;
    D.31213 = D.31212 | -510787584;
    D.31214 = (unsigned int) D.31213;
    *__ainstrp = D.31214;
    code = __ainstrp + 4;
  }
  goto <D.31215>;
  <D.31205>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31201 = inst->data.op[0].const_val;
    if (D.31201 >= 0) goto <D.31217>; else goto <D.31218>;
    <D.31217>:
    D.31201 = inst->data.op[0].const_val;
    D.31219 = D.31201 >> 2;
    iftmp.245 = D.31219 | 201329408;
    goto <D.31220>;
    <D.31218>:
    D.31201 = inst->data.op[0].const_val;
    D.31221 = -D.31201;
    D.31222 = D.31221 >> 2;
    iftmp.245 = D.31222 | 201329408;
    <D.31220>:
    D.31207 = reg >> 1;
    D.31208 = D.31207 << 12;
    D.31223 = iftmp.245 | D.31208;
    D.31210 = reg & 1;
    D.31211 = D.31210 << 22;
    D.31224 = D.31223 | D.31211;
    D.31206 = inst->sreg1;
    D.31225 = D.31206 << 16;
    D.31226 = D.31224 | D.31225;
    D.31201 = inst->data.op[0].const_val;
    if (D.31201 >= 0) goto <D.31228>; else goto <D.31229>;
    <D.31228>:
    iftmp.246 = 8388608;
    goto <D.31230>;
    <D.31229>:
    iftmp.246 = 0;
    <D.31230>:
    D.31231 = D.31226 | iftmp.246;
    D.31232 = D.31231 | -520093696;
    D.31233 = (unsigned int) D.31232;
    *__ainstrp = D.31233;
    code = __ainstrp + 4;
  }
  <D.31215>:
  <D.31200>:
  D.31234 = code;
  return D.31234;
}


mono_arm_emit_vfp_scratch_restore (struct MonoCompile * cfg, guint8 * code, int reg)
{
  int iftmp.247;
  int vfp_scratch1.248;
  int vfp_scratch2.249;
  _Bool D.31243;
  long int D.31244;
  long int D.31245;
  _Bool D.31248;
  int D.31249;
  int D.31252;
  unsigned int D.31253;
  unsigned int D.31254;
  int D.31257;
  int D.31258;
  int D.31259;
  int D.31260;
  int D.31261;
  int D.31262;
  int D.31263;
  int D.31264;
  unsigned int D.31265;
  int iftmp.250;
  int D.31270;
  int D.31272;
  int D.31273;
  int D.31274;
  int D.31275;
  int D.31276;
  int D.31277;
  int D.31278;
  int iftmp.251;
  int D.31283;
  int D.31284;
  unsigned int D.31285;
  guint8 * D.31286;
  struct MonoInst * inst;

  vfp_scratch1.248 = vfp_scratch1;
  if (reg != vfp_scratch1.248) goto <D.31240>; else goto <D.31237>;
  <D.31240>:
  vfp_scratch2.249 = vfp_scratch2;
  if (reg != vfp_scratch2.249) goto <D.31242>; else goto <D.31237>;
  <D.31242>:
  iftmp.247 = 1;
  goto <D.31238>;
  <D.31237>:
  iftmp.247 = 0;
  <D.31238>:
  D.31243 = iftmp.247 != 0;
  D.31244 = (long int) D.31243;
  D.31245 = __builtin_expect (D.31244, 0);
  if (D.31245 != 0) goto <D.31246>; else goto <D.31247>;
  <D.31246>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 574, "reg == vfp_scratch1 || reg == vfp_scratch2");
  <D.31247>:
  vfp_scratch1.248 = vfp_scratch1;
  D.31248 = reg != vfp_scratch1.248;
  D.31249 = (int) D.31248;
  inst = cfg->arch.vfp_scratch_slots[D.31249];
  if (1 != 0) goto <D.31250>; else goto <D.31251>;
  <D.31250>:
  D.31252 = inst->data.op[0].const_val;
  D.31253 = (unsigned int) D.31252;
  D.31254 = D.31253 + 1020;
  if (D.31254 > 2040) goto <D.31255>; else goto <D.31256>;
  <D.31255>:
  D.31257 = inst->sreg1;
  D.31252 = inst->data.op[0].const_val;
  code = emit_big_add (code, 14, D.31257, D.31252);
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31258 = reg >> 1;
    D.31259 = D.31258 << 12;
    D.31260 = D.31259 | 201329408;
    D.31261 = reg & 1;
    D.31262 = D.31261 << 22;
    D.31263 = D.31260 | D.31262;
    D.31264 = D.31263 | -509739008;
    D.31265 = (unsigned int) D.31264;
    *__ainstrp = D.31265;
    code = __ainstrp + 4;
  }
  goto <D.31266>;
  <D.31256>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.31252 = inst->data.op[0].const_val;
    if (D.31252 >= 0) goto <D.31268>; else goto <D.31269>;
    <D.31268>:
    D.31252 = inst->data.op[0].const_val;
    D.31270 = D.31252 >> 2;
    iftmp.250 = D.31270 | 201329408;
    goto <D.31271>;
    <D.31269>:
    D.31252 = inst->data.op[0].const_val;
    D.31272 = -D.31252;
    D.31273 = D.31272 >> 2;
    iftmp.250 = D.31273 | 201329408;
    <D.31271>:
    D.31258 = reg >> 1;
    D.31259 = D.31258 << 12;
    D.31274 = iftmp.250 | D.31259;
    D.31261 = reg & 1;
    D.31262 = D.31261 << 22;
    D.31275 = D.31274 | D.31262;
    D.31257 = inst->sreg1;
    D.31276 = D.31257 << 16;
    D.31277 = D.31275 | D.31276;
    D.31278 = D.31277 | 1048576;
    D.31252 = inst->data.op[0].const_val;
    if (D.31252 >= 0) goto <D.31280>; else goto <D.31281>;
    <D.31280>:
    iftmp.251 = 8388608;
    goto <D.31282>;
    <D.31281>:
    iftmp.251 = 0;
    <D.31282>:
    D.31283 = D.31278 | iftmp.251;
    D.31284 = D.31283 | -520093696;
    D.31285 = (unsigned int) D.31284;
    *__ainstrp = D.31285;
    code = __ainstrp + 4;
  }
  <D.31266>:
  <D.31251>:
  D.31286 = code;
  return D.31286;
}


g_slist_prepend_mempool (struct MonoMemPool * mp, struct GSList * list, void * data)
{
  struct GSList * D.31288;
  struct GSList * new_list;

  new_list = mono_mempool_alloc (mp, 8);
  new_list->data = data;
  new_list->next = list;
  D.31288 = new_list;
  return D.31288;
}


mono_arch_register_lowlevel_calls ()
{
  struct MonoMethodSignature * D.31290;
  struct MonoMethodSignature * D.31291;
  struct MonoMethodSignature * D.31292;

  D.31290 = mono_create_icall_signature ("void");
  mono_register_jit_icall (mono_arm_throw_exception, "mono_arm_throw_exception", D.31290, 1);
  D.31291 = mono_create_icall_signature ("void");
  mono_register_jit_icall (mono_arm_throw_exception_by_token, "mono_arm_throw_exception_by_token", D.31291, 1);
  D.31292 = mono_create_icall_signature ("void");
  mono_register_jit_icall (__aeabi_read_tp, "__aeabi_read_tp", D.31292, 1);
}


mono_arch_patch_code (struct MonoMethod * method, struct MonoDomain * domain, guint8 * code, struct MonoJumpInfo * ji, struct MonoCodeManager * dyn_code_mp, gboolean run_cctors)
{
  _Bool D.31293;
  int D.31294;
  sizetype D.31295;
  <unnamed type> D.31296;
  unsigned int i.252;
  unsigned int D.31302;
  void * * D.31303;
  struct MonoJumpInfoBBTable * D.31304;
  struct MonoBasicBlock * * D.31305;
  struct MonoBasicBlock * * D.31306;
  struct MonoBasicBlock * D.31307;
  sizetype D.31308;
  void * D.31309;
  int D.31310;
  guint16 * D.31313;
  unsigned int ip.253;
  unsigned int D.31315;
  short unsigned int D.31316;
  guint16 * D.31317;
  int ip.254;
  short unsigned int D.31319;
  int D.31320;
  sizetype D.31321;
  void * D.31322;
  guint16 * D.31323;
  unsigned int target.255;
  unsigned int D.31325;
  short unsigned int D.31326;
  guint16 * D.31327;
  int target.256;
  short unsigned int D.31329;
  const void * * D.31330;
  const void * D.31331;
  const void * * D.31332;
  const char * D.31333;
  struct MonoJumpInfo * patch_info;
  gboolean compile_aot;

  D.31293 = run_cctors == 0;
  compile_aot = (gboolean) D.31293;
  patch_info = ji;
  goto <D.26417>;
  <D.26416>:
  {
    unsigned char * ip;
    const unsigned char * target;

    D.31294 = patch_info->ip.i;
    D.31295 = (sizetype) D.31294;
    ip = code + D.31295;
    D.31296 = patch_info->type;
    if (D.31296 == 8) goto <D.31297>; else goto <D.31298>;
    <D.31297>:
    if (compile_aot == 0) goto <D.31299>; else goto <D.31300>;
    <D.31299>:
    {
      void * * jt;
      int i;

      jt = ip + 8;
      i = 0;
      goto <D.26387>;
      <D.26386>:
      i.252 = (unsigned int) i;
      D.31302 = i.252 * 4;
      D.31303 = jt + D.31302;
      D.31304 = patch_info->data.table;
      D.31305 = D.31304->table;
      i.252 = (unsigned int) i;
      D.31302 = i.252 * 4;
      D.31306 = D.31305 + D.31302;
      D.31307 = *D.31306;
      D.31308 = (sizetype) D.31307;
      D.31309 = code + D.31308;
      *D.31303 = D.31309;
      i = i + 1;
      <D.26387>:
      D.31304 = patch_info->data.table;
      D.31310 = D.31304->table_size;
      if (D.31310 > i) goto <D.26386>; else goto <D.26388>;
      <D.26388>:
      // predicted unlikely by continue predictor.
      goto <D.26389>;
    }
    <D.31300>:
    <D.31298>:
    if (compile_aot != 0) goto <D.31311>; else goto <D.31312>;
    <D.31311>:
    D.31296 = patch_info->type;
    switch (D.31296) <default: <D.26393>, case 0: <D.26390>, case 2: <D.26391>>
    <D.26390>:
    <D.26391>:
    goto <D.26392>;
    <D.26393>:
    // predicted unlikely by continue predictor.
    goto <D.26389>;
    <D.26392>:
    <D.31312>:
    target = mono_resolve_patch_target (method, domain, code, patch_info, run_cctors);
    D.31296 = patch_info->type;
    switch (D.31296) <default: <D.26414>, case 5: <D.26396>, case 6: <D.26397>, case 10: <D.26410>, case 11: <D.26398>, case 12: <D.26399>, case 13: <D.26400>, case 14: <D.26401>, case 16: <D.26403>, case 17: <D.26404>, case 18: <D.26406>, case 19: <D.26405>, case 20: <D.26408>, case 21: <D.26409>, case 22: <D.26394>, case 23: <D.26402>, case 25: <D.26412>, case 26: <D.26413>, case 51: <D.26411>>
    <D.26394>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5420);
    {
      guint16 * __lis_ori;

      __lis_ori = ip;
      D.31313 = __lis_ori + 2;
      ip.253 = (unsigned int) ip;
      D.31315 = ip.253 >> 16;
      D.31316 = (short unsigned int) D.31315;
      *D.31313 = D.31316;
      D.31317 = __lis_ori + 6;
      ip.254 = (int) ip;
      D.31319 = (short unsigned int) ip.254;
      *D.31317 = D.31319;
    }
    // predicted unlikely by continue predictor.
    goto <D.26389>;
    <D.26396>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5424);
    D.31320 = patch_info->data.offset;
    D.31321 = (sizetype) D.31320;
    D.31322 = code + D.31321;
    MEM[(void * *)ip] = D.31322;
    // predicted unlikely by continue predictor.
    goto <D.26389>;
    <D.26397>:
    <D.26398>:
    <D.26399>:
    <D.26400>:
    <D.26401>:
    <D.26402>:
    <D.26403>:
    <D.26404>:
    <D.26405>:
    <D.26406>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5437);
    {
      guint16 * __lis_ori;

      __lis_ori = ip;
      D.31323 = __lis_ori + 2;
      target.255 = (unsigned int) target;
      D.31325 = target.255 >> 16;
      D.31326 = (short unsigned int) D.31325;
      *D.31323 = D.31326;
      D.31327 = __lis_ori + 6;
      target.256 = (int) target;
      D.31329 = (short unsigned int) target.256;
      *D.31327 = D.31329;
    }
    // predicted unlikely by continue predictor.
    goto <D.26389>;
    <D.26408>:
    <D.26409>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5443);
    D.31330 = ip + 2;
    D.31331 = patch_info->data.target;
    *D.31330 = D.31331;
    // predicted unlikely by continue predictor.
    goto <D.26389>;
    <D.26410>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5447);
    D.31332 = ip + 1;
    D.31333 = patch_info->data.name;
    *D.31332 = D.31333;
    // predicted unlikely by continue predictor.
    goto <D.26389>;
    <D.26411>:
    <D.26412>:
    <D.26413>:
    // predicted unlikely by continue predictor.
    goto <D.26389>;
    <D.26414>:
    goto <D.26415>;
    <D.26415>:
    arm_patch_general (domain, ip, target, dyn_code_mp);
  }
  <D.26389>:
  patch_info = patch_info->next;
  <D.26417>:
  if (patch_info != 0B) goto <D.26416>; else goto <D.26418>;
  <D.26418>:
}


mono_arch_emit_prolog (struct MonoCompile * cfg)
{
  struct MonoTraceSpec * mono_jit_trace_calls.257;
  int D.31339;
  short unsigned int D.31342;
  int D.31343;
  int D.31344;
  int D.31345;
  unsigned int D.31346;
  unsigned int D.31347;
  void * D.31348;
  int code.258;
  unsigned char * D.31350;
  int D.31351;
  int D.31352;
  int iphone_abi.259;
  int D.31356;
  unsigned char D.31357;
  unsigned char D.31358;
  unsigned int D.31363;
  unsigned int D.31366;
  unsigned int D.31368;
  int D.31369;
  unsigned int D.31370;
  unsigned int D.31371;
  int D.31376;
  _Bool D.31381;
  _Bool D.31382;
  _Bool D.31383;
  _Bool D.31391;
  long int D.31392;
  long int D.31393;
  unsigned int pos.260;
  unsigned int D.31397;
  int D.31398;
  int D.31401;
  unsigned int alloc_size.261;
  int D.31409;
  int rot_amount.262;
  int D.31411;
  int D.31412;
  int D.31413;
  int D.31414;
  int D.31415;
  unsigned int D.31416;
  int D.31418;
  unsigned int D.31419;
  unsigned int D.31422;
  unsigned int D.31423;
  int D.31424;
  int D.31425;
  int D.31426;
  int D.31427;
  unsigned int D.31428;
  unsigned int D.31429;
  short unsigned int D.31432;
  int D.31433;
  int D.31434;
  short unsigned int D.31435;
  sizetype D.31436;
  sizetype D.31437;
  guint8 * D.31438;
  unsigned char D.31439;
  int D.31440;
  struct MonoInst * D.31441;
  short unsigned int D.31444;
  _Bool D.31445;
  long int D.31446;
  long int D.31447;
  int D.31450;
  unsigned int D.31451;
  unsigned int D.31452;
  int iftmp.263;
  int D.31459;
  int D.31460;
  int D.31461;
  int D.31462;
  int D.31463;
  int iftmp.264;
  int D.31468;
  int D.31469;
  unsigned int D.31470;
  unsigned int D.31472;
  int D.31473;
  unsigned int D.31474;
  struct MonoGenericSharingContext * D.31475;
  int D.31476;
  int D.31479;
  unsigned int D.31480;
  unsigned int D.31481;
  _Bool D.31482;
  long int D.31483;
  long int D.31484;
  int iftmp.265;
  int D.31491;
  unsigned char D.31492;
  int D.31493;
  int D.31494;
  int D.31495;
  int D.31496;
  int D.31497;
  int D.31498;
  int iftmp.266;
  int D.31503;
  int D.31504;
  unsigned int D.31505;
  unsigned char D.31506;
  unsigned char D.31507;
  <unnamed type> D.31510;
  _Bool D.31511;
  long int D.31512;
  long int D.31513;
  int D.31516;
  int D.31517;
  unsigned int D.31518;
  unsigned int D.31519;
  _Bool D.31520;
  long int D.31521;
  long int D.31522;
  int D.31525;
  unsigned int D.31526;
  unsigned int D.31527;
  _Bool D.31528;
  long int D.31529;
  long int D.31530;
  unsigned int D.31533;
  unsigned int D.31534;
  unsigned int D.31535;
  unsigned int D.31536;
  unsigned int D.31537;
  int iftmp.267;
  int D.31542;
  unsigned int D.31543;
  unsigned int D.31544;
  guint32 iftmp.268;
  unsigned int D.31549;
  unsigned int D.31550;
  sizetype i.269;
  struct MonoInst * * D.31552;
  unsigned int D.31553;
  struct MonoInst * * D.31554;
  unsigned int D.31555;
  <unnamed type> D.31558;
  short unsigned int D.31559;
  unsigned char D.31564;
  int D.31565;
  int D.31566;
  int D.31567;
  int D.31568;
  int D.31569;
  unsigned int D.31570;
  int D.31576;
  int D.31577;
  unsigned int D.31578;
  unsigned int D.31579;
  int D.31582;
  int D.31583;
  int D.31584;
  int iftmp.270;
  int D.31589;
  int D.31590;
  unsigned int D.31591;
  unsigned int D.31593;
  int D.31594;
  unsigned int D.31595;
  const char * D.31599;
  <unnamed type> D.31601;
  unsigned int D.31602;
  _Bool D.31603;
  _Bool D.31604;
  _Bool D.31605;
  <unnamed-unsigned:4> D.31608;
  int D.31609;
  int D.31612;
  int D.31613;
  int D.31614;
  int D.31615;
  int D.31616;
  int D.31617;
  int iftmp.271;
  int D.31622;
  int D.31623;
  unsigned int D.31624;
  unsigned int D.31626;
  int D.31627;
  int D.31628;
  int D.31629;
  unsigned int D.31630;
  unsigned int D.31631;
  int iftmp.272;
  int D.31637;
  int D.31638;
  int D.31640;
  int iftmp.273;
  int D.31644;
  int D.31646;
  int D.31647;
  int D.31648;
  int D.31649;
  int D.31650;
  int iftmp.274;
  int D.31655;
  int D.31656;
  unsigned int D.31657;
  int D.31659;
  int D.31660;
  int D.31661;
  int D.31662;
  unsigned int D.31663;
  int iftmp.275;
  int D.31670;
  int D.31671;
  int D.31672;
  int iftmp.276;
  int D.31677;
  int D.31678;
  unsigned int D.31679;
  int D.31681;
  unsigned int D.31682;
  unsigned int D.31683;
  int iftmp.277;
  int iftmp.278;
  int D.31694;
  int D.31695;
  int D.31696;
  int D.31697;
  int D.31698;
  int iftmp.279;
  int D.31703;
  int D.31704;
  unsigned int D.31705;
  int D.31707;
  unsigned int D.31708;
  int D.31709;
  int D.31710;
  int D.31711;
  unsigned int D.31712;
  int iftmp.280;
  int D.31719;
  int D.31720;
  int D.31721;
  int iftmp.281;
  int D.31726;
  int D.31727;
  unsigned int D.31728;
  _Bool D.31733;
  long int D.31734;
  long int D.31735;
  int D.31740;
  int iftmp.282;
  int D.31745;
  int D.31746;
  unsigned int D.31747;
  int iftmp.283;
  int iftmp.284;
  int D.31756;
  int D.31757;
  int D.31758;
  int iftmp.285;
  int D.31763;
  int D.31764;
  unsigned int D.31765;
  int iftmp.286;
  int D.31770;
  int D.31771;
  int D.31772;
  int iftmp.287;
  int D.31777;
  int D.31778;
  unsigned int D.31779;
  <unnamed type> D.31781;
  _Bool D.31782;
  _Bool D.31783;
  _Bool D.31784;
  int iftmp.288;
  int D.31793;
  int D.31794;
  unsigned int D.31795;
  int D.31799;
  int D.31800;
  int D.31801;
  int iftmp.289;
  int D.31806;
  int D.31807;
  unsigned int D.31808;
  int D.31810;
  unsigned int D.31811;
  int iftmp.290;
  int iftmp.291;
  int D.31822;
  int D.31823;
  int D.31824;
  int D.31825;
  int iftmp.292;
  int D.31830;
  int D.31831;
  unsigned int D.31832;
  int D.31834;
  unsigned int D.31835;
  int iftmp.293;
  int D.31842;
  int D.31843;
  int D.31844;
  int iftmp.294;
  int D.31849;
  int D.31850;
  unsigned int D.31851;
  int D.31853;
  unsigned int D.31854;
  unsigned int D.31855;
  int iftmp.295;
  int D.31861;
  int D.31863;
  int iftmp.296;
  int D.31868;
  int D.31869;
  unsigned int D.31870;
  unsigned int D.31872;
  int iftmp.297;
  int iftmp.298;
  int D.31883;
  int D.31884;
  int D.31885;
  int iftmp.299;
  int D.31890;
  int D.31891;
  unsigned int D.31892;
  int iftmp.300;
  int D.31900;
  int D.31901;
  int D.31902;
  int iftmp.301;
  int D.31907;
  int D.31908;
  unsigned int D.31909;
  int D.31916;
  unsigned int D.31917;
  int D.31919;
  int rot_amount.302;
  int D.31921;
  int D.31922;
  int D.31923;
  int D.31924;
  int D.31925;
  int D.31926;
  int D.31927;
  unsigned int D.31928;
  unsigned char D.31929;
  unsigned char D.31930;
  unsigned char D.31933;
  int D.31934;
  int D.31935;
  int D.31936;
  int D.31937;
  int D.31938;
  int D.31939;
  int D.31940;
  unsigned int D.31941;
  int D.31943;
  int D.31944;
  int D.31945;
  unsigned int D.31946;
  struct MonoType * D.31950;
  <unnamed-unsigned:1> D.31951;
  int D.31952;
  unsigned int doffset.303;
  unsigned int D.31954;
  int iftmp.304;
  int D.31961;
  int D.31962;
  int D.31963;
  int D.31964;
  int D.31965;
  int iftmp.305;
  int D.31970;
  int D.31971;
  unsigned int D.31972;
  unsigned int doffset.306;
  int D.31975;
  int D.31976;
  int D.31977;
  unsigned int D.31978;
  unsigned int soffset.307;
  unsigned int D.31980;
  unsigned int doffset.308;
  unsigned int D.31982;
  short unsigned int D.31983;
  unsigned int D.31986;
  unsigned int D.31987;
  int D.31988;
  <unnamed-unsigned:1> D.31993;
  int D.31994;
  int D.31995;
  int D.31998;
  void * D.32001;
  struct MonoMethod * D.32004;
  short unsigned int D.32005;
  _Bool D.32006;
  long int D.32007;
  long int D.32008;
  int D.32011;
  unsigned int D.32012;
  unsigned int D.32013;
  int iftmp.309;
  int D.32020;
  int D.32021;
  int D.32022;
  int D.32023;
  int iftmp.310;
  int D.32028;
  int D.32029;
  unsigned int D.32030;
  unsigned int D.32032;
  int D.32033;
  unsigned int D.32034;
  unsigned char D.32035;
  unsigned char D.32036;
  short unsigned int D.32041;
  _Bool D.32042;
  long int D.32043;
  long int D.32044;
  int D.32047;
  unsigned int D.32048;
  unsigned int D.32049;
  _Bool D.32050;
  long int D.32051;
  long int D.32052;
  int D.32055;
  int D.32056;
  int D.32057;
  int D.32058;
  int D.32059;
  int D.32060;
  int D.32061;
  int iftmp.311;
  int D.32066;
  int D.32067;
  unsigned int D.32068;
  unsigned int D.32069;
  int D.32070;
  unsigned int D.32071;
  unsigned int D.32072;
  unsigned int D.32073;
  int iftmp.312;
  int D.32075;
  int D.32079;
  int D.32080;
  int D.32081;
  int D.32082;
  int D.32083;
  int iftmp.313;
  int D.32088;
  int D.32089;
  unsigned int D.32090;
  void * D.32091;
  short unsigned int D.32094;
  _Bool D.32095;
  long int D.32096;
  long int D.32097;
  int D.32100;
  unsigned int D.32101;
  unsigned int D.32102;
  _Bool D.32103;
  long int D.32104;
  long int D.32105;
  short unsigned int D.32108;
  _Bool D.32109;
  long int D.32110;
  long int D.32111;
  int D.32114;
  unsigned int D.32115;
  unsigned int D.32116;
  _Bool D.32117;
  long int D.32118;
  long int D.32119;
  short unsigned int D.32122;
  _Bool D.32123;
  long int D.32124;
  long int D.32125;
  int D.32128;
  unsigned int D.32129;
  unsigned int D.32130;
  _Bool D.32131;
  long int D.32132;
  long int D.32133;
  void * single_step_func_wrapper.314;
  void * breakpoint_func_wrapper.315;
  int iftmp.316;
  int D.32142;
  int D.32143;
  int D.32144;
  int D.32145;
  int D.32146;
  int iftmp.317;
  int D.32151;
  int D.32152;
  unsigned int D.32153;
  int iftmp.318;
  int D.32158;
  int D.32159;
  int D.32160;
  int D.32161;
  int D.32162;
  int iftmp.319;
  int D.32167;
  int D.32168;
  unsigned int D.32169;
  int iftmp.320;
  int D.32174;
  int D.32175;
  int D.32176;
  int D.32177;
  int D.32178;
  int iftmp.321;
  int D.32183;
  int D.32184;
  unsigned int D.32185;
  unsigned int D.32186;
  unsigned int D.32187;
  _Bool D.32188;
  long int D.32189;
  long int D.32190;
  guint8 * D.32193;
  struct MonoMethod * method;
  struct MonoBasicBlock * bb;
  struct MonoMethodSignature * sig;
  struct MonoInst * inst;
  int alloc_size;
  int orig_alloc_size;
  int pos;
  int max_offset;
  int i;
  int rot_amount;
  guint8 * code;
  struct CallInfo * cinfo;
  int tracing;
  int lmf_offset;
  int prev_sp_offset;
  int reg_offset;

  try
    {
      method = cfg->method;
      tracing = 0;
      lmf_offset = 0;
      mono_jit_trace_calls.257 = mono_jit_trace_calls;
      if (mono_jit_trace_calls.257 != 0B) goto <D.31337>; else goto <D.31338>;
      <D.31337>:
      D.31339 = mono_trace_eval (method);
      if (D.31339 != 0) goto <D.31340>; else goto <D.31341>;
      <D.31340>:
      tracing = 1;
      <D.31341>:
      <D.31338>:
      sig = mono_method_signature (method);
      D.31342 = sig->param_count;
      D.31343 = (int) D.31342;
      D.31344 = D.31343 + 4;
      D.31345 = D.31344 * 64;
      D.31346 = (unsigned int) D.31345;
      cfg->code_size = D.31346;
      D.31347 = cfg->code_size;
      D.31348 = monoeg_malloc (D.31347);
      cfg->native_code = D.31348;
      code = cfg->native_code;
      code.258 = (int) code;
      D.31350 = cfg->native_code;
      D.31351 = (int) D.31350;
      D.31352 = code.258 - D.31351;
      mono_emit_unwind_op (cfg, D.31352, 12, 13, 0);
      cfg->cfa_reg = 13;
      cfg->cfa_offset = 0;
      alloc_size = cfg->stack_offset;
      pos = 0;
      prev_sp_offset = 0;
      iphone_abi.259 = iphone_abi;
      if (iphone_abi.259 != 0) goto <D.31354>; else goto <D.31355>;
      <D.31354>:
      {
        arminstr_t * __ainstrp;

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

        __ainstrp = code;
        *__ainstrp = 3785388045;
        code = __ainstrp + 4;
      }
      prev_sp_offset = prev_sp_offset + 8;
      code.258 = (int) code;
      D.31350 = cfg->native_code;
      D.31351 = (int) D.31350;
      D.31352 = code.258 - D.31351;
      mono_emit_unwind_op (cfg, D.31352, 14, 0, prev_sp_offset);
      cfg->cfa_offset = prev_sp_offset;
      code.258 = (int) code;
      D.31350 = cfg->native_code;
      D.31351 = (int) D.31350;
      D.31352 = code.258 - D.31351;
      D.31356 = -prev_sp_offset;
      mono_emit_unwind_op (cfg, D.31352, 128, 7, D.31356);
      <D.31355>:
      D.31357 = BIT_FIELD_REF <*method, 8, 168>;
      D.31358 = D.31357 & 1;
      if (D.31358 == 0) goto <D.31359>; else goto <D.31360>;
      <D.31359>:
      iphone_abi.259 = iphone_abi;
      if (iphone_abi.259 != 0) goto <D.31361>; else goto <D.31362>;
      <D.31361>:
      D.31363 = cfg->used_int_regs;
      if (D.31363 != 0) goto <D.31364>; else goto <D.31365>;
      <D.31364>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.31363 = cfg->used_int_regs;
        D.31366 = D.31363 | 3912040448;
        *__ainstrp = D.31366;
        code = __ainstrp + 4;
      }
      <D.31365>:
      goto <D.31367>;
      <D.31362>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.31363 = cfg->used_int_regs;
        D.31368 = D.31363 | 3912056832;
        *__ainstrp = D.31368;
        code = __ainstrp + 4;
      }
      prev_sp_offset = prev_sp_offset + 4;
      <D.31367>:
      i = 0;
      goto <D.26443>;
      <D.26442>:
      D.31363 = cfg->used_int_regs;
      D.31369 = 1 << i;
      D.31370 = (unsigned int) D.31369;
      D.31371 = D.31363 & D.31370;
      if (D.31371 != 0) goto <D.31372>; else goto <D.31373>;
      <D.31372>:
      prev_sp_offset = prev_sp_offset + 4;
      <D.31373>:
      i = i + 1;
      <D.26443>:
      if (i <= 15) goto <D.26442>; else goto <D.26444>;
      <D.26444>:
      code.258 = (int) code;
      D.31350 = cfg->native_code;
      D.31351 = (int) D.31350;
      D.31352 = code.258 - D.31351;
      mono_emit_unwind_op (cfg, D.31352, 14, 0, prev_sp_offset);
      cfg->cfa_offset = prev_sp_offset;
      reg_offset = 0;
      i = 0;
      goto <D.26446>;
      <D.26445>:
      D.31363 = cfg->used_int_regs;
      D.31369 = 1 << i;
      D.31370 = (unsigned int) D.31369;
      D.31371 = D.31363 & D.31370;
      if (D.31371 != 0) goto <D.31374>; else goto <D.31375>;
      <D.31374>:
      code.258 = (int) code;
      D.31350 = cfg->native_code;
      D.31351 = (int) D.31350;
      D.31352 = code.258 - D.31351;
      D.31376 = reg_offset - prev_sp_offset;
      mono_emit_unwind_op (cfg, D.31352, 128, i, D.31376);
      D.31376 = reg_offset - prev_sp_offset;
      mini_gc_set_slot_type_from_cfa (cfg, D.31376, 0);
      reg_offset = reg_offset + 4;
      <D.31375>:
      i = i + 1;
      <D.26446>:
      if (i <= 15) goto <D.26445>; else goto <D.26447>;
      <D.26447>:
      iphone_abi.259 = iphone_abi;
      if (iphone_abi.259 != 0) goto <D.31377>; else goto <D.31378>;
      <D.31377>:
      code.258 = (int) code;
      D.31350 = cfg->native_code;
      D.31351 = (int) D.31350;
      D.31352 = code.258 - D.31351;
      mono_emit_unwind_op (cfg, D.31352, 128, 14, -4);
      mini_gc_set_slot_type_from_cfa (cfg, -4, 0);
      goto <D.31379>;
      <D.31378>:
      code.258 = (int) code;
      D.31350 = cfg->native_code;
      D.31351 = (int) D.31350;
      D.31352 = code.258 - D.31351;
      mono_emit_unwind_op (cfg, D.31352, 128, 14, -4);
      mini_gc_set_slot_type_from_cfa (cfg, -4, 0);
      <D.31379>:
      goto <D.31380>;
      <D.31360>:
      {
        arminstr_t * __ainstrp;

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

        __ainstrp = code;
        *__ainstrp = 3912065008;
        code = __ainstrp + 4;
      }
      prev_sp_offset = prev_sp_offset + 40;
      code.258 = (int) code;
      D.31350 = cfg->native_code;
      D.31351 = (int) D.31350;
      D.31352 = code.258 - D.31351;
      mono_emit_unwind_op (cfg, D.31352, 14, 0, prev_sp_offset);
      cfg->cfa_offset = prev_sp_offset;
      reg_offset = 0;
      i = 0;
      goto <D.26451>;
      <D.26450>:
      D.31381 = i > 3;
      D.31382 = i != 13;
      D.31383 = D.31381 & D.31382;
      if (D.31383 != 0) goto <D.31384>; else goto <D.31385>;
      <D.31384>:
      if (i != 15) goto <D.31386>; else goto <D.31387>;
      <D.31386>:
      iphone_abi.259 = iphone_abi;
      if (iphone_abi.259 == 0) goto <D.31388>; else goto <D.31390>;
      <D.31390>:
      if (i != 7) goto <D.31388>; else goto <D.31389>;
      <D.31388>:
      code.258 = (int) code;
      D.31350 = cfg->native_code;
      D.31351 = (int) D.31350;
      D.31352 = code.258 - D.31351;
      D.31376 = reg_offset - prev_sp_offset;
      mono_emit_unwind_op (cfg, D.31352, 128, i, D.31376);
      <D.31389>:
      reg_offset = reg_offset + 4;
      <D.31387>:
      <D.31385>:
      i = i + 1;
      <D.26451>:
      if (i <= 15) goto <D.26450>; else goto <D.26452>;
      <D.26452>:
      D.31391 = reg_offset != 40;
      D.31392 = (long int) D.31391;
      D.31393 = __builtin_expect (D.31392, 0);
      if (D.31393 != 0) goto <D.31394>; else goto <D.31395>;
      <D.31394>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5567, "reg_offset == 4 * 10");
      <D.31395>:
      pos.260 = (unsigned int) pos;
      D.31397 = pos.260 + 168;
      pos = (int) D.31397;
      lmf_offset = pos;
      <D.31380>:
      alloc_size = alloc_size + pos;
      orig_alloc_size = alloc_size;
      D.31398 = alloc_size & 7;
      if (D.31398 != 0) goto <D.31399>; else goto <D.31400>;
      <D.31399>:
      alloc_size = alloc_size + 7;
      alloc_size = alloc_size & -8;
      <D.31400>:
      D.31401 = prev_sp_offset & 4;
      if (D.31401 != 0) goto <D.31402>; else goto <D.31403>;
      <D.31402>:
      alloc_size = alloc_size + 4;
      <D.31403>:
      alloc_size.261 = (unsigned int) alloc_size;
      cfg->stack_usage = alloc_size.261;
      if (alloc_size != 0) goto <D.31405>; else goto <D.31406>;
      <D.31405>:
      alloc_size.261 = (unsigned int) alloc_size;
      i = mono_arm_is_rotated_imm8 (alloc_size.261, &rot_amount);
      if (i >= 0) goto <D.31407>; else goto <D.31408>;
      <D.31407>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.31409 = i & 255;
        rot_amount.262 = rot_amount;
        D.31411 = rot_amount.262 >> 1;
        D.31412 = D.31411 & 15;
        D.31413 = D.31412 << 8;
        D.31414 = D.31409 | D.31413;
        D.31415 = D.31414 | -498216960;
        D.31416 = (unsigned int) D.31415;
        *__ainstrp = D.31416;
        code = __ainstrp + 4;
      }
      goto <D.31417>;
      <D.31408>:
      alloc_size.261 = (unsigned int) alloc_size;
      code = mono_arm_emit_load_imm (code, 12, alloc_size.261);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3763195916;
        code = __ainstrp + 4;
      }
      <D.31417>:
      code.258 = (int) code;
      D.31350 = cfg->native_code;
      D.31351 = (int) D.31350;
      D.31352 = code.258 - D.31351;
      D.31418 = prev_sp_offset + alloc_size;
      mono_emit_unwind_op (cfg, D.31352, 14, 0, D.31418);
      D.31418 = prev_sp_offset + alloc_size;
      cfg->cfa_offset = D.31418;
      <D.31406>:
      D.31419 = cfg->frame_reg;
      if (D.31419 != 13) goto <D.31420>; else goto <D.31421>;
      <D.31420>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.31419 = cfg->frame_reg;
        D.31422 = D.31419 << 12;
        D.31423 = D.31422 | 3785359373;
        *__ainstrp = D.31423;
        code = __ainstrp + 4;
      }
      code.258 = (int) code;
      D.31350 = cfg->native_code;
      D.31351 = (int) D.31350;
      D.31352 = code.258 - D.31351;
      D.31419 = cfg->frame_reg;
      D.31424 = (int) D.31419;
      mono_emit_unwind_op (cfg, D.31352, 13, D.31424, 0);
      D.31419 = cfg->frame_reg;
      D.31424 = (int) D.31419;
      cfg->cfa_reg = D.31424;
      <D.31421>:
      prev_sp_offset = prev_sp_offset + alloc_size;
      i = 0;
      goto <D.26457>;
      <D.26456>:
      D.31425 = orig_alloc_size - prev_sp_offset;
      D.31426 = D.31425 + i;
      mini_gc_set_slot_type_from_cfa (cfg, D.31426, 0);
      i = i + 4;
      <D.26457>:
      D.31427 = alloc_size - orig_alloc_size;
      if (D.31427 > i) goto <D.26456>; else goto <D.26458>;
      <D.26458>:
      max_offset = 0;
      bb = cfg->bb_entry;
      goto <D.26464>;
      <D.26463>:
      {
        struct MonoInst * ins;

        ins = bb->code;
        bb->max_offset = max_offset;
        D.31428 = cfg->prof_options;
        D.31429 = D.31428 & 8192;
        if (D.31429 != 0) goto <D.31430>; else goto <D.31431>;
        <D.31430>:
        max_offset = max_offset + 6;
        <D.31431>:
        ins = bb->code;
        goto <D.26461>;
        <D.26460>:
        D.31432 = ins->opcode;
        D.31433 = (int) D.31432;
        D.31434 = D.31433 + -313;
        D.31435 = arm_cpu_desc_idx[D.31434];
        D.31436 = (sizetype) D.31435;
        D.31437 = D.31436 + 4;
        D.31438 = &arm_cpu_desc + D.31437;
        D.31439 = *D.31438;
        D.31440 = (int) D.31439;
        max_offset = D.31440 + max_offset;
        ins = ins->next;
        <D.26461>:
        if (ins != 0B) goto <D.26460>; else goto <D.26462>;
        <D.26462>:
      }
      bb = bb->next_bb;
      <D.26464>:
      if (bb != 0B) goto <D.26463>; else goto <D.26465>;
      <D.26465>:
      D.31441 = cfg->rgctx_var;
      if (D.31441 != 0B) goto <D.31442>; else goto <D.31443>;
      <D.31442>:
      {
        struct MonoInst * ins;

        ins = cfg->rgctx_var;
        D.31444 = ins->opcode;
        D.31445 = D.31444 != 367;
        D.31446 = (long int) D.31445;
        D.31447 = __builtin_expect (D.31446, 0);
        if (D.31447 != 0) goto <D.31448>; else goto <D.31449>;
        <D.31448>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5622, "ins->opcode == OP_REGOFFSET");
        <D.31449>:
        D.31450 = ins->data.op[0].const_val;
        D.31451 = (unsigned int) D.31450;
        D.31452 = D.31451 + 4095;
        if (D.31452 <= 8190) goto <D.31453>; else goto <D.31454>;
        <D.31453>:
        {
          int _imm12;

          D.31450 = ins->data.op[0].const_val;
          if (D.31450 >= -4095) goto <D.31456>; else goto <D.31457>;
          <D.31456>:
          D.31450 = ins->data.op[0].const_val;
          iftmp.263 = MIN_EXPR <D.31450, 4095>;
          goto <D.31458>;
          <D.31457>:
          iftmp.263 = -4095;
          <D.31458>:
          _imm12 = iftmp.263;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.31459 = ABS_EXPR <_imm12>;
            D.31460 = D.31459 | 32768;
            D.31461 = ins->sreg1;
            D.31462 = D.31461 << 16;
            D.31463 = D.31460 | D.31462;
            if (_imm12 >= 0) goto <D.31465>; else goto <D.31466>;
            <D.31465>:
            iftmp.264 = 8388608;
            goto <D.31467>;
            <D.31466>:
            iftmp.264 = 0;
            <D.31467>:
            D.31468 = D.31463 | iftmp.264;
            D.31469 = D.31468 | -452984832;
            D.31470 = (unsigned int) D.31469;
            *__ainstrp = D.31470;
            code = __ainstrp + 4;
          }
        }
        goto <D.31471>;
        <D.31454>:
        D.31450 = ins->data.op[0].const_val;
        D.31472 = (unsigned int) D.31450;
        code = mono_arm_emit_load_imm (code, 14, D.31472);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31461 = ins->sreg1;
          D.31462 = D.31461 << 16;
          D.31473 = D.31462 | -411009010;
          D.31474 = (unsigned int) D.31473;
          *__ainstrp = D.31474;
          code = __ainstrp + 4;
        }
        <D.31471>:
      }
      <D.31443>:
      pos = 0;
      D.31475 = cfg->generic_sharing_context;
      cinfo = get_call_info (D.31475, 0B, sig);
      D.31476 = cinfo->vtype_retaddr;
      if (D.31476 != 0) goto <D.31477>; else goto <D.31478>;
      <D.31477>:
      {
        struct ArgInfo * ainfo;

        ainfo = &cinfo->ret;
        inst = cfg->vret_addr;
        D.31479 = inst->data.op[0].const_val;
        D.31480 = (unsigned int) D.31479;
        D.31481 = D.31480 + 4095;
        D.31482 = D.31481 > 8190;
        D.31483 = (long int) D.31482;
        D.31484 = __builtin_expect (D.31483, 0);
        if (D.31484 != 0) goto <D.31485>; else goto <D.31486>;
        <D.31485>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5640, "arm_is_imm12 (inst->inst_offset)");
        <D.31486>:
        {
          int _imm12;

          D.31479 = inst->data.op[0].const_val;
          if (D.31479 >= -4095) goto <D.31488>; else goto <D.31489>;
          <D.31488>:
          D.31479 = inst->data.op[0].const_val;
          iftmp.265 = MIN_EXPR <D.31479, 4095>;
          goto <D.31490>;
          <D.31489>:
          iftmp.265 = -4095;
          <D.31490>:
          _imm12 = iftmp.265;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.31491 = ABS_EXPR <_imm12>;
            D.31492 = ainfo->reg;
            D.31493 = (int) D.31492;
            D.31494 = D.31493 << 12;
            D.31495 = D.31491 | D.31494;
            D.31496 = inst->sreg1;
            D.31497 = D.31496 << 16;
            D.31498 = D.31495 | D.31497;
            if (_imm12 >= 0) goto <D.31500>; else goto <D.31501>;
            <D.31500>:
            iftmp.266 = 8388608;
            goto <D.31502>;
            <D.31501>:
            iftmp.266 = 0;
            <D.31502>:
            D.31503 = D.31498 | iftmp.266;
            D.31504 = D.31503 | -452984832;
            D.31505 = (unsigned int) D.31504;
            *__ainstrp = D.31505;
            code = __ainstrp + 4;
          }
        }
      }
      <D.31478>:
      D.31506 = BIT_FIELD_REF <*sig, 8, 80>;
      D.31507 = D.31506 & 63;
      if (D.31507 == 5) goto <D.31508>; else goto <D.31509>;
      <D.31508>:
      {
        struct ArgInfo * cookie;

        cookie = &cinfo->sig_cookie;
        D.31510 = cookie->storage;
        D.31511 = D.31510 != 3;
        D.31512 = (long int) D.31511;
        D.31513 = __builtin_expect (D.31512, 0);
        if (D.31513 != 0) goto <D.31514>; else goto <D.31515>;
        <D.31514>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5648, "cookie->storage == RegTypeBase");
        <D.31515>:
        D.31516 = cookie->offset;
        D.31517 = D.31516 + prev_sp_offset;
        D.31518 = (unsigned int) D.31517;
        D.31519 = D.31518 + 4095;
        D.31520 = D.31519 > 8190;
        D.31521 = (long int) D.31520;
        D.31522 = __builtin_expect (D.31521, 0);
        if (D.31522 != 0) goto <D.31523>; else goto <D.31524>;
        <D.31523>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5650, "arm_is_imm12 (prev_sp_offset + cookie->offset)");
        <D.31524>:
        D.31525 = cfg->sig_cookie;
        D.31526 = (unsigned int) D.31525;
        D.31527 = D.31526 + 4095;
        D.31528 = D.31527 > 8190;
        D.31529 = (long int) D.31528;
        D.31530 = __builtin_expect (D.31529, 0);
        if (D.31530 != 0) goto <D.31531>; else goto <D.31532>;
        <D.31531>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5651, "arm_is_imm12 (cfg->sig_cookie)");
        <D.31532>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31516 = cookie->offset;
          D.31517 = D.31516 + prev_sp_offset;
          D.31533 = (unsigned int) D.31517;
          D.31534 = D.31533 & 255;
          D.31419 = cfg->frame_reg;
          D.31535 = D.31419 << 16;
          D.31536 = D.31534 | D.31535;
          D.31537 = D.31536 | 3800088576;
          *__ainstrp = D.31537;
          code = __ainstrp + 4;
        }
        {
          int _imm12;

          D.31525 = cfg->sig_cookie;
          if (D.31525 >= -4095) goto <D.31539>; else goto <D.31540>;
          <D.31539>:
          D.31525 = cfg->sig_cookie;
          iftmp.267 = MIN_EXPR <D.31525, 4095>;
          goto <D.31541>;
          <D.31540>:
          iftmp.267 = -4095;
          <D.31541>:
          _imm12 = iftmp.267;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.31542 = ABS_EXPR <_imm12>;
            D.31543 = (unsigned int) D.31542;
            D.31419 = cfg->frame_reg;
            D.31535 = D.31419 << 16;
            D.31544 = D.31543 | D.31535;
            if (_imm12 >= 0) goto <D.31546>; else goto <D.31547>;
            <D.31546>:
            iftmp.268 = 8388608;
            goto <D.31548>;
            <D.31547>:
            iftmp.268 = 0;
            <D.31548>:
            D.31549 = D.31544 | iftmp.268;
            D.31550 = D.31549 | 3842031616;
            *__ainstrp = D.31550;
            code = __ainstrp + 4;
          }
        }
      }
      <D.31509>:
      i = 0;
      goto <D.26543>;
      <D.26542>:
      {
        struct ArgInfo * ainfo;

        i.269 = (sizetype) i;
        ainfo = &cinfo->args[i.269];
        D.31552 = cfg->args;
        pos.260 = (unsigned int) pos;
        D.31553 = pos.260 * 4;
        D.31554 = D.31552 + D.31553;
        inst = *D.31554;
        D.31555 = cfg->verbose_level;
        if (D.31555 > 2) goto <D.31556>; else goto <D.31557>;
        <D.31556>:
        D.31558 = ainfo->storage;
        monoeg_g_print ("Saving argument %d (type: %d)\n", i, D.31558);
        <D.31557>:
        D.31559 = inst->opcode;
        if (D.31559 == 366) goto <D.31560>; else goto <D.31561>;
        <D.31560>:
        D.31558 = ainfo->storage;
        if (D.31558 == 1) goto <D.31562>; else goto <D.31563>;
        <D.31562>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31564 = ainfo->reg;
          D.31565 = (int) D.31564;
          D.31566 = inst->dreg;
          D.31567 = D.31566 << 12;
          D.31568 = D.31565 | D.31567;
          D.31569 = D.31568 | -509607936;
          D.31570 = (unsigned int) D.31569;
          *__ainstrp = D.31570;
          code = __ainstrp + 4;
        }
        goto <D.31571>;
        <D.31563>:
        D.31558 = ainfo->storage;
        if (D.31558 == 5) goto <D.31572>; else goto <D.31573>;
        <D.31572>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5666);
        <D.31573>:
        D.31558 = ainfo->storage;
        if (D.31558 == 3) goto <D.31574>; else goto <D.31575>;
        <D.31574>:
        D.31576 = ainfo->offset;
        D.31577 = D.31576 + prev_sp_offset;
        D.31578 = (unsigned int) D.31577;
        D.31579 = D.31578 + 4095;
        if (D.31579 <= 8190) goto <D.31580>; else goto <D.31581>;
        <D.31580>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31576 = ainfo->offset;
          D.31577 = D.31576 + prev_sp_offset;
          D.31582 = ABS_EXPR <D.31577>;
          D.31566 = inst->dreg;
          D.31567 = D.31566 << 12;
          D.31583 = D.31582 | D.31567;
          D.31584 = D.31583 | 1900544;
          D.31576 = ainfo->offset;
          D.31577 = D.31576 + prev_sp_offset;
          if (D.31577 >= 0) goto <D.31586>; else goto <D.31587>;
          <D.31586>:
          iftmp.270 = 8388608;
          goto <D.31588>;
          <D.31587>:
          iftmp.270 = 0;
          <D.31588>:
          D.31589 = D.31584 | iftmp.270;
          D.31590 = D.31589 | -452984832;
          D.31591 = (unsigned int) D.31590;
          *__ainstrp = D.31591;
          code = __ainstrp + 4;
        }
        goto <D.31592>;
        <D.31581>:
        D.31576 = ainfo->offset;
        D.31577 = D.31576 + prev_sp_offset;
        D.31593 = (unsigned int) D.31577;
        code = mono_arm_emit_load_imm (code, 12, D.31593);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31566 = inst->dreg;
          D.31567 = D.31566 << 12;
          D.31594 = D.31567 | -409141236;
          D.31595 = (unsigned int) D.31594;
          *__ainstrp = D.31595;
          code = __ainstrp + 4;
        }
        <D.31592>:
        goto <D.31596>;
        <D.31575>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5675);
        <D.31596>:
        <D.31571>:
        D.31555 = cfg->verbose_level;
        if (D.31555 > 2) goto <D.31597>; else goto <D.31598>;
        <D.31597>:
        D.31566 = inst->dreg;
        D.31599 = mono_arch_regname (D.31566);
        monoeg_g_print ("Argument %d assigned to register %s\n", pos, D.31599);
        <D.31598>:
        goto <D.31600>;
        <D.31561>:
        D.31601 = ainfo->storage;
        D.31602 = D.31601 + 4294967295;
        D.31603 = D.31602 <= 1;
        D.31604 = D.31601 == 8;
        D.31605 = D.31603 | D.31604;
        if (D.31605 != 0) goto <D.31606>; else goto <D.31607>;
        <D.31606>:
        D.31608 = ainfo->size;
        D.31609 = (int) D.31608;
        switch (D.31609) <default: <D.26495>, case 1: <D.26481>, case 2: <D.26485>, case 8: <D.26488>>
        <D.26481>:
        D.31479 = inst->data.op[0].const_val;
        D.31480 = (unsigned int) D.31479;
        D.31481 = D.31480 + 4095;
        if (D.31481 <= 8190) goto <D.31610>; else goto <D.31611>;
        <D.31610>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31479 = inst->data.op[0].const_val;
          D.31612 = ABS_EXPR <D.31479>;
          D.31564 = ainfo->reg;
          D.31613 = (int) D.31564;
          D.31614 = D.31613 << 12;
          D.31615 = D.31612 | D.31614;
          D.31496 = inst->sreg1;
          D.31497 = D.31496 << 16;
          D.31616 = D.31615 | D.31497;
          D.31617 = D.31616 | 4194304;
          D.31479 = inst->data.op[0].const_val;
          if (D.31479 >= 0) goto <D.31619>; else goto <D.31620>;
          <D.31619>:
          iftmp.271 = 8388608;
          goto <D.31621>;
          <D.31620>:
          iftmp.271 = 0;
          <D.31621>:
          D.31622 = D.31617 | iftmp.271;
          D.31623 = D.31622 | -452984832;
          D.31624 = (unsigned int) D.31623;
          *__ainstrp = D.31624;
          code = __ainstrp + 4;
        }
        goto <D.31625>;
        <D.31611>:
        D.31479 = inst->data.op[0].const_val;
        D.31626 = (unsigned int) D.31479;
        code = mono_arm_emit_load_imm (code, 12, D.31626);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31564 = ainfo->reg;
          D.31613 = (int) D.31564;
          D.31614 = D.31613 << 12;
          D.31627 = D.31614 | 12;
          D.31496 = inst->sreg1;
          D.31497 = D.31496 << 16;
          D.31628 = D.31627 | D.31497;
          D.31629 = D.31628 | -406847488;
          D.31630 = (unsigned int) D.31629;
          *__ainstrp = D.31630;
          code = __ainstrp + 4;
        }
        <D.31625>:
        goto <D.26484>;
        <D.26485>:
        D.31479 = inst->data.op[0].const_val;
        D.31480 = (unsigned int) D.31479;
        D.31631 = D.31480 + 255;
        if (D.31631 <= 510) goto <D.31632>; else goto <D.31633>;
        <D.31632>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31479 = inst->data.op[0].const_val;
          if (D.31479 < 0) goto <D.31635>; else goto <D.31636>;
          <D.31635>:
          D.31479 = inst->data.op[0].const_val;
          D.31637 = -D.31479;
          D.31638 = D.31637 & 15;
          iftmp.272 = D.31638 | 32;
          goto <D.31639>;
          <D.31636>:
          D.31479 = inst->data.op[0].const_val;
          D.31640 = D.31479 & 15;
          iftmp.272 = D.31640 | 32;
          <D.31639>:
          D.31479 = inst->data.op[0].const_val;
          if (D.31479 < 0) goto <D.31642>; else goto <D.31643>;
          <D.31642>:
          D.31479 = inst->data.op[0].const_val;
          D.31637 = -D.31479;
          D.31644 = D.31637 << 4;
          iftmp.273 = D.31644 & 3840;
          goto <D.31645>;
          <D.31643>:
          D.31479 = inst->data.op[0].const_val;
          D.31646 = D.31479 << 4;
          iftmp.273 = D.31646 & 3840;
          <D.31645>:
          D.31647 = iftmp.272 | iftmp.273;
          D.31564 = ainfo->reg;
          D.31613 = (int) D.31564;
          D.31614 = D.31613 << 12;
          D.31648 = D.31647 | D.31614;
          D.31496 = inst->sreg1;
          D.31497 = D.31496 << 16;
          D.31649 = D.31648 | D.31497;
          D.31650 = D.31649 | 4194304;
          D.31479 = inst->data.op[0].const_val;
          if (D.31479 >= 0) goto <D.31652>; else goto <D.31653>;
          <D.31652>:
          iftmp.274 = 8388608;
          goto <D.31654>;
          <D.31653>:
          iftmp.274 = 0;
          <D.31654>:
          D.31655 = D.31650 | iftmp.274;
          D.31656 = D.31655 | -520093552;
          D.31657 = (unsigned int) D.31656;
          *__ainstrp = D.31657;
          code = __ainstrp + 4;
        }
        goto <D.31658>;
        <D.31633>:
        D.31479 = inst->data.op[0].const_val;
        D.31626 = (unsigned int) D.31479;
        code = mono_arm_emit_load_imm (code, 12, D.31626);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31496 = inst->sreg1;
          D.31659 = D.31496 & 15;
          D.31660 = D.31659 | 32;
          D.31564 = ainfo->reg;
          D.31613 = (int) D.31564;
          D.31614 = D.31613 << 12;
          D.31661 = D.31660 | D.31614;
          D.31662 = D.31661 | -510918512;
          D.31663 = (unsigned int) D.31662;
          *__ainstrp = D.31663;
          code = __ainstrp + 4;
        }
        <D.31658>:
        goto <D.26484>;
        <D.26488>:
        D.31479 = inst->data.op[0].const_val;
        D.31480 = (unsigned int) D.31479;
        D.31481 = D.31480 + 4095;
        if (D.31481 <= 8190) goto <D.31664>; else goto <D.31665>;
        <D.31664>:
        {
          int _imm12;

          D.31479 = inst->data.op[0].const_val;
          if (D.31479 >= -4095) goto <D.31667>; else goto <D.31668>;
          <D.31667>:
          D.31479 = inst->data.op[0].const_val;
          iftmp.275 = MIN_EXPR <D.31479, 4095>;
          goto <D.31669>;
          <D.31668>:
          iftmp.275 = -4095;
          <D.31669>:
          _imm12 = iftmp.275;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.31670 = ABS_EXPR <_imm12>;
            D.31564 = ainfo->reg;
            D.31613 = (int) D.31564;
            D.31614 = D.31613 << 12;
            D.31671 = D.31670 | D.31614;
            D.31496 = inst->sreg1;
            D.31497 = D.31496 << 16;
            D.31672 = D.31671 | D.31497;
            if (_imm12 >= 0) goto <D.31674>; else goto <D.31675>;
            <D.31674>:
            iftmp.276 = 8388608;
            goto <D.31676>;
            <D.31675>:
            iftmp.276 = 0;
            <D.31676>:
            D.31677 = D.31672 | iftmp.276;
            D.31678 = D.31677 | -452984832;
            D.31679 = (unsigned int) D.31678;
            *__ainstrp = D.31679;
            code = __ainstrp + 4;
          }
        }
        goto <D.31680>;
        <D.31665>:
        D.31479 = inst->data.op[0].const_val;
        D.31626 = (unsigned int) D.31479;
        code = mono_arm_emit_load_imm (code, 12, D.31626);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31564 = ainfo->reg;
          D.31613 = (int) D.31564;
          D.31614 = D.31613 << 12;
          D.31627 = D.31614 | 12;
          D.31496 = inst->sreg1;
          D.31497 = D.31496 << 16;
          D.31628 = D.31627 | D.31497;
          D.31681 = D.31628 | -411041792;
          D.31682 = (unsigned int) D.31681;
          *__ainstrp = D.31682;
          code = __ainstrp + 4;
        }
        <D.31680>:
        D.31479 = inst->data.op[0].const_val;
        D.31480 = (unsigned int) D.31479;
        D.31683 = D.31480 + 4099;
        if (D.31683 <= 8190) goto <D.31684>; else goto <D.31685>;
        <D.31684>:
        {
          int _imm12;

          D.31479 = inst->data.op[0].const_val;
          if (D.31479 >= -4099) goto <D.31687>; else goto <D.31688>;
          <D.31687>:
          D.31479 = inst->data.op[0].const_val;
          if (D.31479 <= 4091) goto <D.31690>; else goto <D.31691>;
          <D.31690>:
          D.31479 = inst->data.op[0].const_val;
          iftmp.278 = D.31479 + 4;
          goto <D.31692>;
          <D.31691>:
          iftmp.278 = 4095;
          <D.31692>:
          iftmp.277 = iftmp.278;
          goto <D.31693>;
          <D.31688>:
          iftmp.277 = -4095;
          <D.31693>:
          _imm12 = iftmp.277;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.31694 = ABS_EXPR <_imm12>;
            D.31564 = ainfo->reg;
            D.31613 = (int) D.31564;
            D.31695 = D.31613 + 1;
            D.31696 = D.31695 << 12;
            D.31697 = D.31694 | D.31696;
            D.31496 = inst->sreg1;
            D.31497 = D.31496 << 16;
            D.31698 = D.31697 | D.31497;
            if (_imm12 >= 0) goto <D.31700>; else goto <D.31701>;
            <D.31700>:
            iftmp.279 = 8388608;
            goto <D.31702>;
            <D.31701>:
            iftmp.279 = 0;
            <D.31702>:
            D.31703 = D.31698 | iftmp.279;
            D.31704 = D.31703 | -452984832;
            D.31705 = (unsigned int) D.31704;
            *__ainstrp = D.31705;
            code = __ainstrp + 4;
          }
        }
        goto <D.31706>;
        <D.31685>:
        D.31479 = inst->data.op[0].const_val;
        D.31707 = D.31479 + 4;
        D.31708 = (unsigned int) D.31707;
        code = mono_arm_emit_load_imm (code, 12, D.31708);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31564 = ainfo->reg;
          D.31613 = (int) D.31564;
          D.31695 = D.31613 + 1;
          D.31696 = D.31695 << 12;
          D.31709 = D.31696 | 12;
          D.31496 = inst->sreg1;
          D.31497 = D.31496 << 16;
          D.31710 = D.31709 | D.31497;
          D.31711 = D.31710 | -411041792;
          D.31712 = (unsigned int) D.31711;
          *__ainstrp = D.31712;
          code = __ainstrp + 4;
        }
        <D.31706>:
        goto <D.26484>;
        <D.26495>:
        D.31479 = inst->data.op[0].const_val;
        D.31480 = (unsigned int) D.31479;
        D.31481 = D.31480 + 4095;
        if (D.31481 <= 8190) goto <D.31713>; else goto <D.31714>;
        <D.31713>:
        {
          int _imm12;

          D.31479 = inst->data.op[0].const_val;
          if (D.31479 >= -4095) goto <D.31716>; else goto <D.31717>;
          <D.31716>:
          D.31479 = inst->data.op[0].const_val;
          iftmp.280 = MIN_EXPR <D.31479, 4095>;
          goto <D.31718>;
          <D.31717>:
          iftmp.280 = -4095;
          <D.31718>:
          _imm12 = iftmp.280;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.31719 = ABS_EXPR <_imm12>;
            D.31564 = ainfo->reg;
            D.31613 = (int) D.31564;
            D.31614 = D.31613 << 12;
            D.31720 = D.31719 | D.31614;
            D.31496 = inst->sreg1;
            D.31497 = D.31496 << 16;
            D.31721 = D.31720 | D.31497;
            if (_imm12 >= 0) goto <D.31723>; else goto <D.31724>;
            <D.31723>:
            iftmp.281 = 8388608;
            goto <D.31725>;
            <D.31724>:
            iftmp.281 = 0;
            <D.31725>:
            D.31726 = D.31721 | iftmp.281;
            D.31727 = D.31726 | -452984832;
            D.31728 = (unsigned int) D.31727;
            *__ainstrp = D.31728;
            code = __ainstrp + 4;
          }
        }
        goto <D.31729>;
        <D.31714>:
        D.31479 = inst->data.op[0].const_val;
        D.31626 = (unsigned int) D.31479;
        code = mono_arm_emit_load_imm (code, 12, D.31626);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31564 = ainfo->reg;
          D.31613 = (int) D.31564;
          D.31614 = D.31613 << 12;
          D.31627 = D.31614 | 12;
          D.31496 = inst->sreg1;
          D.31497 = D.31496 << 16;
          D.31628 = D.31627 | D.31497;
          D.31681 = D.31628 | -411041792;
          D.31682 = (unsigned int) D.31681;
          *__ainstrp = D.31682;
          code = __ainstrp + 4;
        }
        <D.31729>:
        goto <D.26484>;
        <D.26484>:
        goto <D.31730>;
        <D.31607>:
        D.31558 = ainfo->storage;
        if (D.31558 == 4) goto <D.31731>; else goto <D.31732>;
        <D.31731>:
        D.31576 = ainfo->offset;
        D.31577 = D.31576 + prev_sp_offset;
        D.31578 = (unsigned int) D.31577;
        D.31579 = D.31578 + 4095;
        D.31733 = D.31579 > 8190;
        D.31734 = (long int) D.31733;
        D.31735 = __builtin_expect (D.31734, 0);
        if (D.31735 != 0) goto <D.31736>; else goto <D.31737>;
        <D.31736>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5723, "arm_is_imm12 (prev_sp_offset + ainfo->offset)");
        <D.31737>:
        D.31479 = inst->data.op[0].const_val;
        D.31480 = (unsigned int) D.31479;
        D.31481 = D.31480 + 4095;
        D.31482 = D.31481 > 8190;
        D.31483 = (long int) D.31482;
        D.31484 = __builtin_expect (D.31483, 0);
        if (D.31484 != 0) goto <D.31738>; else goto <D.31739>;
        <D.31738>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5724, "arm_is_imm12 (inst->inst_offset)");
        <D.31739>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31576 = ainfo->offset;
          D.31577 = D.31576 + prev_sp_offset;
          D.31582 = ABS_EXPR <D.31577>;
          D.31740 = D.31582 | 1957888;
          D.31576 = ainfo->offset;
          D.31577 = D.31576 + prev_sp_offset;
          if (D.31577 >= 0) goto <D.31742>; else goto <D.31743>;
          <D.31742>:
          iftmp.282 = 8388608;
          goto <D.31744>;
          <D.31743>:
          iftmp.282 = 0;
          <D.31744>:
          D.31745 = D.31740 | iftmp.282;
          D.31746 = D.31745 | -452984832;
          D.31747 = (unsigned int) D.31746;
          *__ainstrp = D.31747;
          code = __ainstrp + 4;
        }
        {
          int _imm12;

          D.31479 = inst->data.op[0].const_val;
          if (D.31479 >= -4099) goto <D.31749>; else goto <D.31750>;
          <D.31749>:
          D.31479 = inst->data.op[0].const_val;
          if (D.31479 <= 4091) goto <D.31752>; else goto <D.31753>;
          <D.31752>:
          D.31479 = inst->data.op[0].const_val;
          iftmp.284 = D.31479 + 4;
          goto <D.31754>;
          <D.31753>:
          iftmp.284 = 4095;
          <D.31754>:
          iftmp.283 = iftmp.284;
          goto <D.31755>;
          <D.31750>:
          iftmp.283 = -4095;
          <D.31755>:
          _imm12 = iftmp.283;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.31756 = ABS_EXPR <_imm12>;
            D.31757 = D.31756 | 57344;
            D.31496 = inst->sreg1;
            D.31497 = D.31496 << 16;
            D.31758 = D.31757 | D.31497;
            if (_imm12 >= 0) goto <D.31760>; else goto <D.31761>;
            <D.31760>:
            iftmp.285 = 8388608;
            goto <D.31762>;
            <D.31761>:
            iftmp.285 = 0;
            <D.31762>:
            D.31763 = D.31758 | iftmp.285;
            D.31764 = D.31763 | -452984832;
            D.31765 = (unsigned int) D.31764;
            *__ainstrp = D.31765;
            code = __ainstrp + 4;
          }
        }
        {
          int _imm12;

          D.31479 = inst->data.op[0].const_val;
          if (D.31479 >= -4095) goto <D.31767>; else goto <D.31768>;
          <D.31767>:
          D.31479 = inst->data.op[0].const_val;
          iftmp.286 = MIN_EXPR <D.31479, 4095>;
          goto <D.31769>;
          <D.31768>:
          iftmp.286 = -4095;
          <D.31769>:
          _imm12 = iftmp.286;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.31770 = ABS_EXPR <_imm12>;
            D.31771 = D.31770 | 12288;
            D.31496 = inst->sreg1;
            D.31497 = D.31496 << 16;
            D.31772 = D.31771 | D.31497;
            if (_imm12 >= 0) goto <D.31774>; else goto <D.31775>;
            <D.31774>:
            iftmp.287 = 8388608;
            goto <D.31776>;
            <D.31775>:
            iftmp.287 = 0;
            <D.31776>:
            D.31777 = D.31772 | iftmp.287;
            D.31778 = D.31777 | -452984832;
            D.31779 = (unsigned int) D.31778;
            *__ainstrp = D.31779;
            code = __ainstrp + 4;
          }
        }
        goto <D.31780>;
        <D.31732>:
        D.31781 = ainfo->storage;
        D.31782 = D.31781 == 3;
        D.31783 = D.31781 == 9;
        D.31784 = D.31782 | D.31783;
        if (D.31784 != 0) goto <D.31785>; else goto <D.31786>;
        <D.31785>:
        D.31576 = ainfo->offset;
        D.31577 = D.31576 + prev_sp_offset;
        D.31578 = (unsigned int) D.31577;
        D.31579 = D.31578 + 4095;
        if (D.31579 <= 8190) goto <D.31787>; else goto <D.31788>;
        <D.31787>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31576 = ainfo->offset;
          D.31577 = D.31576 + prev_sp_offset;
          D.31582 = ABS_EXPR <D.31577>;
          D.31740 = D.31582 | 1957888;
          D.31576 = ainfo->offset;
          D.31577 = D.31576 + prev_sp_offset;
          if (D.31577 >= 0) goto <D.31790>; else goto <D.31791>;
          <D.31790>:
          iftmp.288 = 8388608;
          goto <D.31792>;
          <D.31791>:
          iftmp.288 = 0;
          <D.31792>:
          D.31793 = D.31740 | iftmp.288;
          D.31794 = D.31793 | -452984832;
          D.31795 = (unsigned int) D.31794;
          *__ainstrp = D.31795;
          code = __ainstrp + 4;
        }
        goto <D.31796>;
        <D.31788>:
        D.31576 = ainfo->offset;
        D.31577 = D.31576 + prev_sp_offset;
        D.31593 = (unsigned int) D.31577;
        code = mono_arm_emit_load_imm (code, 12, D.31593);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          *__ainstrp = 3885883404;
          code = __ainstrp + 4;
        }
        <D.31796>:
        D.31608 = ainfo->size;
        D.31609 = (int) D.31608;
        switch (D.31609) <default: <D.26522>, case 1: <D.26506>, case 2: <D.26510>, case 8: <D.26513>>
        <D.26506>:
        D.31479 = inst->data.op[0].const_val;
        D.31480 = (unsigned int) D.31479;
        D.31631 = D.31480 + 255;
        if (D.31631 <= 510) goto <D.31797>; else goto <D.31798>;
        <D.31797>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31479 = inst->data.op[0].const_val;
          D.31612 = ABS_EXPR <D.31479>;
          D.31799 = D.31612 | 57344;
          D.31496 = inst->sreg1;
          D.31497 = D.31496 << 16;
          D.31800 = D.31799 | D.31497;
          D.31801 = D.31800 | 4194304;
          D.31479 = inst->data.op[0].const_val;
          if (D.31479 >= 0) goto <D.31803>; else goto <D.31804>;
          <D.31803>:
          iftmp.289 = 8388608;
          goto <D.31805>;
          <D.31804>:
          iftmp.289 = 0;
          <D.31805>:
          D.31806 = D.31801 | iftmp.289;
          D.31807 = D.31806 | -452984832;
          D.31808 = (unsigned int) D.31807;
          *__ainstrp = D.31808;
          code = __ainstrp + 4;
        }
        goto <D.31809>;
        <D.31798>:
        D.31479 = inst->data.op[0].const_val;
        D.31626 = (unsigned int) D.31479;
        code = mono_arm_emit_load_imm (code, 12, D.31626);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31496 = inst->sreg1;
          D.31497 = D.31496 << 16;
          D.31810 = D.31497 | -406790132;
          D.31811 = (unsigned int) D.31810;
          *__ainstrp = D.31811;
          code = __ainstrp + 4;
        }
        <D.31809>:
        goto <D.26509>;
        <D.26510>:
        D.31479 = inst->data.op[0].const_val;
        D.31480 = (unsigned int) D.31479;
        D.31631 = D.31480 + 255;
        if (D.31631 <= 510) goto <D.31812>; else goto <D.31813>;
        <D.31812>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31479 = inst->data.op[0].const_val;
          if (D.31479 < 0) goto <D.31815>; else goto <D.31816>;
          <D.31815>:
          D.31479 = inst->data.op[0].const_val;
          D.31637 = -D.31479;
          D.31638 = D.31637 & 15;
          iftmp.290 = D.31638 | 32;
          goto <D.31817>;
          <D.31816>:
          D.31479 = inst->data.op[0].const_val;
          D.31640 = D.31479 & 15;
          iftmp.290 = D.31640 | 32;
          <D.31817>:
          D.31479 = inst->data.op[0].const_val;
          if (D.31479 < 0) goto <D.31819>; else goto <D.31820>;
          <D.31819>:
          D.31479 = inst->data.op[0].const_val;
          D.31637 = -D.31479;
          D.31644 = D.31637 << 4;
          iftmp.291 = D.31644 & 3840;
          goto <D.31821>;
          <D.31820>:
          D.31479 = inst->data.op[0].const_val;
          D.31646 = D.31479 << 4;
          iftmp.291 = D.31646 & 3840;
          <D.31821>:
          D.31822 = iftmp.290 | iftmp.291;
          D.31823 = D.31822 | 57344;
          D.31496 = inst->sreg1;
          D.31497 = D.31496 << 16;
          D.31824 = D.31823 | D.31497;
          D.31825 = D.31824 | 4194304;
          D.31479 = inst->data.op[0].const_val;
          if (D.31479 >= 0) goto <D.31827>; else goto <D.31828>;
          <D.31827>:
          iftmp.292 = 8388608;
          goto <D.31829>;
          <D.31828>:
          iftmp.292 = 0;
          <D.31829>:
          D.31830 = D.31825 | iftmp.292;
          D.31831 = D.31830 | -520093552;
          D.31832 = (unsigned int) D.31831;
          *__ainstrp = D.31832;
          code = __ainstrp + 4;
        }
        goto <D.31833>;
        <D.31813>:
        D.31479 = inst->data.op[0].const_val;
        D.31626 = (unsigned int) D.31479;
        code = mono_arm_emit_load_imm (code, 12, D.31626);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31496 = inst->sreg1;
          D.31659 = D.31496 & 15;
          D.31834 = D.31659 | -510861136;
          D.31835 = (unsigned int) D.31834;
          *__ainstrp = D.31835;
          code = __ainstrp + 4;
        }
        <D.31833>:
        goto <D.26509>;
        <D.26513>:
        D.31479 = inst->data.op[0].const_val;
        D.31480 = (unsigned int) D.31479;
        D.31481 = D.31480 + 4095;
        if (D.31481 <= 8190) goto <D.31836>; else goto <D.31837>;
        <D.31836>:
        {
          int _imm12;

          D.31479 = inst->data.op[0].const_val;
          if (D.31479 >= -4095) goto <D.31839>; else goto <D.31840>;
          <D.31839>:
          D.31479 = inst->data.op[0].const_val;
          iftmp.293 = MIN_EXPR <D.31479, 4095>;
          goto <D.31841>;
          <D.31840>:
          iftmp.293 = -4095;
          <D.31841>:
          _imm12 = iftmp.293;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.31842 = ABS_EXPR <_imm12>;
            D.31843 = D.31842 | 57344;
            D.31496 = inst->sreg1;
            D.31497 = D.31496 << 16;
            D.31844 = D.31843 | D.31497;
            if (_imm12 >= 0) goto <D.31846>; else goto <D.31847>;
            <D.31846>:
            iftmp.294 = 8388608;
            goto <D.31848>;
            <D.31847>:
            iftmp.294 = 0;
            <D.31848>:
            D.31849 = D.31844 | iftmp.294;
            D.31850 = D.31849 | -452984832;
            D.31851 = (unsigned int) D.31850;
            *__ainstrp = D.31851;
            code = __ainstrp + 4;
          }
        }
        goto <D.31852>;
        <D.31837>:
        D.31479 = inst->data.op[0].const_val;
        D.31626 = (unsigned int) D.31479;
        code = mono_arm_emit_load_imm (code, 12, D.31626);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31496 = inst->sreg1;
          D.31497 = D.31496 << 16;
          D.31853 = D.31497 | -410984436;
          D.31854 = (unsigned int) D.31853;
          *__ainstrp = D.31854;
          code = __ainstrp + 4;
        }
        <D.31852>:
        D.31576 = ainfo->offset;
        D.31577 = D.31576 + prev_sp_offset;
        D.31578 = (unsigned int) D.31577;
        D.31855 = D.31578 + 4099;
        if (D.31855 <= 8190) goto <D.31856>; else goto <D.31857>;
        <D.31856>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31576 = ainfo->offset;
          D.31577 = D.31576 + prev_sp_offset;
          if (D.31577 < -4) goto <D.31859>; else goto <D.31860>;
          <D.31859>:
          D.31576 = ainfo->offset;
          D.31577 = D.31576 + prev_sp_offset;
          D.31861 = -4 - D.31577;
          iftmp.295 = D.31861 | 1957888;
          goto <D.31862>;
          <D.31860>:
          D.31576 = ainfo->offset;
          D.31577 = D.31576 + prev_sp_offset;
          D.31863 = D.31577 + 4;
          iftmp.295 = D.31863 | 1957888;
          <D.31862>:
          D.31576 = ainfo->offset;
          D.31577 = D.31576 + prev_sp_offset;
          if (D.31577 >= -4) goto <D.31865>; else goto <D.31866>;
          <D.31865>:
          iftmp.296 = 8388608;
          goto <D.31867>;
          <D.31866>:
          iftmp.296 = 0;
          <D.31867>:
          D.31868 = iftmp.295 | iftmp.296;
          D.31869 = D.31868 | -452984832;
          D.31870 = (unsigned int) D.31869;
          *__ainstrp = D.31870;
          code = __ainstrp + 4;
        }
        goto <D.31871>;
        <D.31857>:
        D.31576 = ainfo->offset;
        D.31577 = D.31576 + prev_sp_offset;
        D.31863 = D.31577 + 4;
        D.31872 = (unsigned int) D.31863;
        code = mono_arm_emit_load_imm (code, 12, D.31872);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          *__ainstrp = 3885883404;
          code = __ainstrp + 4;
        }
        <D.31871>:
        D.31479 = inst->data.op[0].const_val;
        D.31480 = (unsigned int) D.31479;
        D.31683 = D.31480 + 4099;
        if (D.31683 <= 8190) goto <D.31873>; else goto <D.31874>;
        <D.31873>:
        {
          int _imm12;

          D.31479 = inst->data.op[0].const_val;
          if (D.31479 >= -4099) goto <D.31876>; else goto <D.31877>;
          <D.31876>:
          D.31479 = inst->data.op[0].const_val;
          if (D.31479 <= 4091) goto <D.31879>; else goto <D.31880>;
          <D.31879>:
          D.31479 = inst->data.op[0].const_val;
          iftmp.298 = D.31479 + 4;
          goto <D.31881>;
          <D.31880>:
          iftmp.298 = 4095;
          <D.31881>:
          iftmp.297 = iftmp.298;
          goto <D.31882>;
          <D.31877>:
          iftmp.297 = -4095;
          <D.31882>:
          _imm12 = iftmp.297;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.31883 = ABS_EXPR <_imm12>;
            D.31884 = D.31883 | 57344;
            D.31496 = inst->sreg1;
            D.31497 = D.31496 << 16;
            D.31885 = D.31884 | D.31497;
            if (_imm12 >= 0) goto <D.31887>; else goto <D.31888>;
            <D.31887>:
            iftmp.299 = 8388608;
            goto <D.31889>;
            <D.31888>:
            iftmp.299 = 0;
            <D.31889>:
            D.31890 = D.31885 | iftmp.299;
            D.31891 = D.31890 | -452984832;
            D.31892 = (unsigned int) D.31891;
            *__ainstrp = D.31892;
            code = __ainstrp + 4;
          }
        }
        goto <D.31893>;
        <D.31874>:
        D.31479 = inst->data.op[0].const_val;
        D.31707 = D.31479 + 4;
        D.31708 = (unsigned int) D.31707;
        code = mono_arm_emit_load_imm (code, 12, D.31708);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31496 = inst->sreg1;
          D.31497 = D.31496 << 16;
          D.31853 = D.31497 | -410984436;
          D.31854 = (unsigned int) D.31853;
          *__ainstrp = D.31854;
          code = __ainstrp + 4;
        }
        <D.31893>:
        goto <D.26509>;
        <D.26522>:
        D.31479 = inst->data.op[0].const_val;
        D.31480 = (unsigned int) D.31479;
        D.31481 = D.31480 + 4095;
        if (D.31481 <= 8190) goto <D.31894>; else goto <D.31895>;
        <D.31894>:
        {
          int _imm12;

          D.31479 = inst->data.op[0].const_val;
          if (D.31479 >= -4095) goto <D.31897>; else goto <D.31898>;
          <D.31897>:
          D.31479 = inst->data.op[0].const_val;
          iftmp.300 = MIN_EXPR <D.31479, 4095>;
          goto <D.31899>;
          <D.31898>:
          iftmp.300 = -4095;
          <D.31899>:
          _imm12 = iftmp.300;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.31900 = ABS_EXPR <_imm12>;
            D.31901 = D.31900 | 57344;
            D.31496 = inst->sreg1;
            D.31497 = D.31496 << 16;
            D.31902 = D.31901 | D.31497;
            if (_imm12 >= 0) goto <D.31904>; else goto <D.31905>;
            <D.31904>:
            iftmp.301 = 8388608;
            goto <D.31906>;
            <D.31905>:
            iftmp.301 = 0;
            <D.31906>:
            D.31907 = D.31902 | iftmp.301;
            D.31908 = D.31907 | -452984832;
            D.31909 = (unsigned int) D.31908;
            *__ainstrp = D.31909;
            code = __ainstrp + 4;
          }
        }
        goto <D.31910>;
        <D.31895>:
        D.31479 = inst->data.op[0].const_val;
        D.31626 = (unsigned int) D.31479;
        code = mono_arm_emit_load_imm (code, 12, D.31626);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.31496 = inst->sreg1;
          D.31497 = D.31496 << 16;
          D.31853 = D.31497 | -410984436;
          D.31854 = (unsigned int) D.31853;
          *__ainstrp = D.31854;
          code = __ainstrp + 4;
        }
        <D.31910>:
        goto <D.26509>;
        <D.26509>:
        goto <D.31911>;
        <D.31786>:
        D.31558 = ainfo->storage;
        if (D.31558 == 5) goto <D.31912>; else goto <D.31913>;
        <D.31912>:
        {
          int imm8;
          int rot_amount;

          try
            {
              D.31479 = inst->data.op[0].const_val;
              D.31626 = (unsigned int) D.31479;
              imm8 = mono_arm_is_rotated_imm8 (D.31626, &rot_amount);
              if (imm8 == -1) goto <D.31914>; else goto <D.31915>;
              <D.31914>:
              D.31479 = inst->data.op[0].const_val;
              D.31626 = (unsigned int) D.31479;
              code = mono_arm_emit_load_imm (code, 12, D.31626);
              {
                arminstr_t * __ainstrp;

                __ainstrp = code;
                D.31496 = inst->sreg1;
                D.31916 = D.31496 | -527646720;
                D.31917 = (unsigned int) D.31916;
                *__ainstrp = D.31917;
                code = __ainstrp + 4;
              }
              goto <D.31918>;
              <D.31915>:
              {
                arminstr_t * __ainstrp;

                __ainstrp = code;
                D.31919 = imm8 & 255;
                rot_amount.302 = rot_amount;
                D.31921 = rot_amount.302 >> 1;
                D.31922 = D.31921 & 15;
                D.31923 = D.31922 << 8;
                D.31924 = D.31919 | D.31923;
                D.31925 = D.31924 | 49152;
                D.31496 = inst->sreg1;
                D.31497 = D.31496 << 16;
                D.31926 = D.31925 | D.31497;
                D.31927 = D.31926 | -494927872;
                D.31928 = (unsigned int) D.31927;
                *__ainstrp = D.31928;
                code = __ainstrp + 4;
              }
              <D.31918>:
              D.31929 = BIT_FIELD_REF <*ainfo, 8, 128>;
              D.31930 = D.31929 & 15;
              if (D.31930 == 8) goto <D.31931>; else goto <D.31932>;
              <D.31931>:
              {
                arminstr_t * __ainstrp;

                __ainstrp = code;
                D.31564 = ainfo->reg;
                D.31933 = D.31564 >> 1;
                D.31934 = (int) D.31933;
                D.31935 = D.31934 << 12;
                D.31936 = D.31935 | 201329408;
                D.31564 = ainfo->reg;
                D.31613 = (int) D.31564;
                D.31937 = D.31613 & 1;
                D.31938 = D.31937 << 22;
                D.31939 = D.31936 | D.31938;
                D.31940 = D.31939 | -510918656;
                D.31941 = (unsigned int) D.31940;
                *__ainstrp = D.31941;
                code = __ainstrp + 4;
              }
              goto <D.31942>;
              <D.31932>:
              {
                arminstr_t * __ainstrp;

                __ainstrp = code;
                D.31564 = ainfo->reg;
                D.31933 = D.31564 >> 1;
                D.31934 = (int) D.31933;
                D.31935 = D.31934 << 12;
                D.31943 = D.31935 | 201329152;
                D.31564 = ainfo->reg;
                D.31613 = (int) D.31564;
                D.31937 = D.31613 & 1;
                D.31938 = D.31937 << 22;
                D.31944 = D.31943 | D.31938;
                D.31945 = D.31944 | -510918656;
                D.31946 = (unsigned int) D.31945;
                *__ainstrp = D.31946;
                code = __ainstrp + 4;
              }
              <D.31942>:
            }
          finally
            {
              rot_amount = {CLOBBER};
            }
        }
        goto <D.31947>;
        <D.31913>:
        D.31558 = ainfo->storage;
        if (D.31558 == 6) goto <D.31948>; else goto <D.31949>;
        <D.31948>:
        {
          int doffset;
          int soffset;
          int cur_reg;
          int size;

          doffset = inst->data.op[0].const_val;
          soffset = 0;
          size = 0;
          D.31475 = cfg->generic_sharing_context;
          D.31950 = inst->data.op[1].vtype;
          D.31951 = sig->pinvoke;
          D.31952 = (int) D.31951;
          size = mini_type_stack_size_full (D.31475, D.31950, 0B, D.31952);
          cur_reg = 0;
          goto <D.26540>;
          <D.26539>:
          doffset.303 = (unsigned int) doffset;
          D.31954 = doffset.303 + 4095;
          if (D.31954 <= 8190) goto <D.31955>; else goto <D.31956>;
          <D.31955>:
          {
            int _imm12;

            if (doffset >= -4095) goto <D.31958>; else goto <D.31959>;
            <D.31958>:
            iftmp.304 = MIN_EXPR <doffset, 4095>;
            goto <D.31960>;
            <D.31959>:
            iftmp.304 = -4095;
            <D.31960>:
            _imm12 = iftmp.304;
            {
              arminstr_t * __ainstrp;

              __ainstrp = code;
              D.31961 = ABS_EXPR <_imm12>;
              D.31564 = ainfo->reg;
              D.31613 = (int) D.31564;
              D.31962 = D.31613 + cur_reg;
              D.31963 = D.31962 << 12;
              D.31964 = D.31961 | D.31963;
              D.31496 = inst->sreg1;
              D.31497 = D.31496 << 16;
              D.31965 = D.31964 | D.31497;
              if (_imm12 >= 0) goto <D.31967>; else goto <D.31968>;
              <D.31967>:
              iftmp.305 = 8388608;
              goto <D.31969>;
              <D.31968>:
              iftmp.305 = 0;
              <D.31969>:
              D.31970 = D.31965 | iftmp.305;
              D.31971 = D.31970 | -452984832;
              D.31972 = (unsigned int) D.31971;
              *__ainstrp = D.31972;
              code = __ainstrp + 4;
            }
          }
          goto <D.31973>;
          <D.31956>:
          doffset.306 = (unsigned int) doffset;
          code = mono_arm_emit_load_imm (code, 12, doffset.306);
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.31564 = ainfo->reg;
            D.31613 = (int) D.31564;
            D.31962 = D.31613 + cur_reg;
            D.31963 = D.31962 << 12;
            D.31975 = D.31963 | 12;
            D.31496 = inst->sreg1;
            D.31497 = D.31496 << 16;
            D.31976 = D.31975 | D.31497;
            D.31977 = D.31976 | -411041792;
            D.31978 = (unsigned int) D.31977;
            *__ainstrp = D.31978;
            code = __ainstrp + 4;
          }
          <D.31973>:
          soffset.307 = (unsigned int) soffset;
          D.31980 = soffset.307 + 4;
          soffset = (int) D.31980;
          doffset.308 = (unsigned int) doffset;
          D.31982 = doffset.308 + 4;
          doffset = (int) D.31982;
          cur_reg = cur_reg + 1;
          <D.26540>:
          D.31608 = ainfo->size;
          D.31609 = (int) D.31608;
          if (D.31609 > cur_reg) goto <D.26539>; else goto <D.26541>;
          <D.26541>:
          D.31983 = ainfo->vtsize;
          if (D.31983 != 0) goto <D.31984>; else goto <D.31985>;
          <D.31984>:
          D.31983 = ainfo->vtsize;
          D.31986 = (unsigned int) D.31983;
          D.31987 = D.31986 * 4;
          D.31988 = (int) D.31987;
          D.31496 = inst->sreg1;
          D.31576 = ainfo->offset;
          D.31577 = D.31576 + prev_sp_offset;
          code = emit_memcpy (code, D.31988, D.31496, doffset, 13, D.31577);
          <D.31985>:
        }
        goto <D.31989>;
        <D.31949>:
        D.31558 = ainfo->storage;
        if (D.31558 == 7) goto <D.31990>; else goto <D.31991>;
        <D.31990>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5817);
        D.31983 = ainfo->vtsize;
        D.31986 = (unsigned int) D.31983;
        D.31987 = D.31986 * 4;
        D.31988 = (int) D.31987;
        D.31496 = inst->sreg1;
        D.31479 = inst->data.op[0].const_val;
        D.31564 = ainfo->reg;
        D.31613 = (int) D.31564;
        code = emit_memcpy (code, D.31988, D.31496, D.31479, D.31613, 0);
        goto <D.31992>;
        <D.31991>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-arm.c", 5821);
        <D.31992>:
        <D.31989>:
        <D.31947>:
        <D.31911>:
        <D.31780>:
        <D.31730>:
        <D.31600>:
        pos = pos + 1;
      }
      i = i + 1;
      <D.26543>:
      D.31342 = sig->param_count;
      D.31343 = (int) D.31342;
      D.31993 = sig->hasthis;
      D.31994 = (int) D.31993;
      D.31995 = D.31343 + D.31994;
      if (D.31995 > i) goto <D.26542>; else goto <D.26544>;
      <D.26544>:
      D.31357 = BIT_FIELD_REF <*method, 8, 168>;
      D.31358 = D.31357 & 1;
      if (D.31358 != 0) goto <D.31996>; else goto <D.31997>;
      <D.31996>:
      D.31998 = alloc_size - lmf_offset;
      code = emit_save_lmf (cfg, code, D.31998);
      <D.31997>:
      if (tracing != 0) goto <D.31999>; else goto <D.32000>;
      <D.31999>:
      code = mono_arch_instrument_prolog (cfg, mono_trace_enter_method, code, 1);
      <D.32000>:
      D.32001 = cfg->arch.seq_point_info_var;
      if (D.32001 != 0B) goto <D.32002>; else goto <D.32003>;
      <D.32002>:
      {
        struct MonoInst * ins;

        ins = cfg->arch.seq_point_info_var;
        code.258 = (int) code;
        D.31350 = cfg->native_code;
        D.31351 = (int) D.31350;
        D.31352 = code.258 - D.31351;
        D.32004 = cfg->method;
        mono_add_patch_info (cfg, D.31352, 40, D.32004);
        {
          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;
        }
        D.32005 = ins->opcode;
        D.32006 = D.32005 != 367;
        D.32007 = (long int) D.32006;
        D.32008 = __builtin_expect (D.32007, 0);
        if (D.32008 != 0) goto <D.32009>; else goto <D.32010>;
        <D.32009>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5852, "ins->opcode == OP_REGOFFSET");
        <D.32010>:
        D.32011 = ins->data.op[0].const_val;
        D.32012 = (unsigned int) D.32011;
        D.32013 = D.32012 + 4095;
        if (D.32013 <= 8190) goto <D.32014>; else goto <D.32015>;
        <D.32014>:
        {
          int _imm12;

          D.32011 = ins->data.op[0].const_val;
          if (D.32011 >= -4095) goto <D.32017>; else goto <D.32018>;
          <D.32017>:
          D.32011 = ins->data.op[0].const_val;
          iftmp.309 = MIN_EXPR <D.32011, 4095>;
          goto <D.32019>;
          <D.32018>:
          iftmp.309 = -4095;
          <D.32019>:
          _imm12 = iftmp.309;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.32020 = ABS_EXPR <_imm12>;
            D.32021 = ins->sreg1;
            D.32022 = D.32021 << 16;
            D.32023 = D.32020 | D.32022;
            if (_imm12 >= 0) goto <D.32025>; else goto <D.32026>;
            <D.32025>:
            iftmp.310 = 8388608;
            goto <D.32027>;
            <D.32026>:
            iftmp.310 = 0;
            <D.32027>:
            D.32028 = D.32023 | iftmp.310;
            D.32029 = D.32028 | -452984832;
            D.32030 = (unsigned int) D.32029;
            *__ainstrp = D.32030;
            code = __ainstrp + 4;
          }
        }
        goto <D.32031>;
        <D.32015>:
        D.32011 = ins->data.op[0].const_val;
        D.32032 = (unsigned int) D.32011;
        code = mono_arm_emit_load_imm (code, 14, D.32032);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.32021 = ins->sreg1;
          D.32022 = D.32021 << 16;
          D.32033 = D.32022 | -411041778;
          D.32034 = (unsigned int) D.32033;
          *__ainstrp = D.32034;
          code = __ainstrp + 4;
        }
        <D.32031>:
      }
      <D.32003>:
      D.32035 = BIT_FIELD_REF <*cfg, 8, 3432>;
      D.32036 = D.32035 & 1;
      if (D.32036 == 0) goto <D.32037>; else goto <D.32038>;
      <D.32037>:
      {
        struct MonoInst * info_var;
        struct MonoInst * ss_trigger_page_var;
        int dreg;

        info_var = cfg->arch.seq_point_info_var;
        ss_trigger_page_var = cfg->arch.ss_trigger_page_var;
        dreg = 14;
        if (info_var != 0B) goto <D.32039>; else goto <D.32040>;
        <D.32039>:
        D.32041 = info_var->opcode;
        D.32042 = D.32041 != 367;
        D.32043 = (long int) D.32042;
        D.32044 = __builtin_expect (D.32043, 0);
        if (D.32044 != 0) goto <D.32045>; else goto <D.32046>;
        <D.32045>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5869, "info_var->opcode == OP_REGOFFSET");
        <D.32046>:
        D.32047 = info_var->data.op[0].const_val;
        D.32048 = (unsigned int) D.32047;
        D.32049 = D.32048 + 4095;
        D.32050 = D.32049 > 8190;
        D.32051 = (long int) D.32050;
        D.32052 = __builtin_expect (D.32051, 0);
        if (D.32052 != 0) goto <D.32053>; else goto <D.32054>;
        <D.32053>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5870, "arm_is_imm12 (info_var->inst_offset)");
        <D.32054>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.32047 = info_var->data.op[0].const_val;
          D.32055 = ABS_EXPR <D.32047>;
          D.32056 = dreg << 12;
          D.32057 = D.32055 | D.32056;
          D.32058 = info_var->sreg1;
          D.32059 = D.32058 << 16;
          D.32060 = D.32057 | D.32059;
          D.32061 = D.32060 | 1048576;
          D.32047 = info_var->data.op[0].const_val;
          if (D.32047 >= 0) goto <D.32063>; else goto <D.32064>;
          <D.32063>:
          iftmp.311 = 8388608;
          goto <D.32065>;
          <D.32064>:
          iftmp.311 = 0;
          <D.32065>:
          D.32066 = D.32061 | iftmp.311;
          D.32067 = D.32066 | -452984832;
          D.32068 = (unsigned int) D.32067;
          *__ainstrp = D.32068;
          code = __ainstrp + 4;
        }
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.32056 = dreg << 12;
          D.32069 = (unsigned int) D.32056;
          D.32070 = dreg << 16;
          D.32071 = (unsigned int) D.32070;
          D.32072 = D.32069 | D.32071;
          D.32073 = D.32072 | 3851419648;
          *__ainstrp = D.32073;
          code = __ainstrp + 4;
        }
        {
          int _imm12;

          D.32075 = ss_trigger_page_var->data.op[0].const_val;
          if (D.32075 >= -4095) goto <D.32076>; else goto <D.32077>;
          <D.32076>:
          D.32075 = ss_trigger_page_var->data.op[0].const_val;
          iftmp.312 = MIN_EXPR <D.32075, 4095>;
          goto <D.32078>;
          <D.32077>:
          iftmp.312 = -4095;
          <D.32078>:
          _imm12 = iftmp.312;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.32079 = ABS_EXPR <_imm12>;
            D.32056 = dreg << 12;
            D.32080 = D.32079 | D.32056;
            D.32081 = ss_trigger_page_var->sreg1;
            D.32082 = D.32081 << 16;
            D.32083 = D.32080 | D.32082;
            if (_imm12 >= 0) goto <D.32085>; else goto <D.32086>;
            <D.32085>:
            iftmp.313 = 8388608;
            goto <D.32087>;
            <D.32086>:
            iftmp.313 = 0;
            <D.32087>:
            D.32088 = D.32083 | iftmp.313;
            D.32089 = D.32088 | -452984832;
            D.32090 = (unsigned int) D.32089;
            *__ainstrp = D.32090;
            code = __ainstrp + 4;
          }
        }
        <D.32040>:
      }
      <D.32038>:
      D.32091 = cfg->arch.seq_point_read_var;
      if (D.32091 != 0B) goto <D.32092>; else goto <D.32093>;
      <D.32092>:
      {
        struct MonoInst * read_ins;
        struct MonoInst * ss_method_ins;
        struct MonoInst * bp_method_ins;

        read_ins = cfg->arch.seq_point_read_var;
        ss_method_ins = cfg->arch.seq_point_ss_method_var;
        bp_method_ins = cfg->arch.seq_point_bp_method_var;
        D.32094 = read_ins->opcode;
        D.32095 = D.32094 != 367;
        D.32096 = (long int) D.32095;
        D.32097 = __builtin_expect (D.32096, 0);
        if (D.32097 != 0) goto <D.32098>; else goto <D.32099>;
        <D.32098>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5886, "read_ins->opcode == OP_REGOFFSET");
        <D.32099>:
        D.32100 = read_ins->data.op[0].const_val;
        D.32101 = (unsigned int) D.32100;
        D.32102 = D.32101 + 4095;
        D.32103 = D.32102 > 8190;
        D.32104 = (long int) D.32103;
        D.32105 = __builtin_expect (D.32104, 0);
        if (D.32105 != 0) goto <D.32106>; else goto <D.32107>;
        <D.32106>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5887, "arm_is_imm12 (read_ins->inst_offset)");
        <D.32107>:
        D.32108 = ss_method_ins->opcode;
        D.32109 = D.32108 != 367;
        D.32110 = (long int) D.32109;
        D.32111 = __builtin_expect (D.32110, 0);
        if (D.32111 != 0) goto <D.32112>; else goto <D.32113>;
        <D.32112>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5888, "ss_method_ins->opcode == OP_REGOFFSET");
        <D.32113>:
        D.32114 = ss_method_ins->data.op[0].const_val;
        D.32115 = (unsigned int) D.32114;
        D.32116 = D.32115 + 4095;
        D.32117 = D.32116 > 8190;
        D.32118 = (long int) D.32117;
        D.32119 = __builtin_expect (D.32118, 0);
        if (D.32119 != 0) goto <D.32120>; else goto <D.32121>;
        <D.32120>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5889, "arm_is_imm12 (ss_method_ins->inst_offset)");
        <D.32121>:
        D.32122 = bp_method_ins->opcode;
        D.32123 = D.32122 != 367;
        D.32124 = (long int) D.32123;
        D.32125 = __builtin_expect (D.32124, 0);
        if (D.32125 != 0) goto <D.32126>; else goto <D.32127>;
        <D.32126>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5890, "bp_method_ins->opcode == OP_REGOFFSET");
        <D.32127>:
        D.32128 = bp_method_ins->data.op[0].const_val;
        D.32129 = (unsigned int) D.32128;
        D.32130 = D.32129 + 4095;
        D.32131 = D.32130 > 8190;
        D.32132 = (long int) D.32131;
        D.32133 = __builtin_expect (D.32132, 0);
        if (D.32133 != 0) goto <D.32134>; else goto <D.32135>;
        <D.32134>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5891, "arm_is_imm12 (bp_method_ins->inst_offset)");
        <D.32135>:
        {
          arminstr_t * __ainstrp;

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

          __ainstrp = code;
          *__ainstrp = 3925868546;
          code = __ainstrp + 4;
        }
        MEM[(volatile int * *)code] = &ss_trigger_var;
        code = code + 4;
        single_step_func_wrapper.314 = single_step_func_wrapper;
        MEM[(void * *)code] = single_step_func_wrapper.314;
        code = code + 4;
        breakpoint_func_wrapper.315 = breakpoint_func_wrapper;
        MEM[(void * *)code] = breakpoint_func_wrapper.315;
        code = code + 4;
        {
          arminstr_t * __ainstrp;

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

          D.32100 = read_ins->data.op[0].const_val;
          if (D.32100 >= -4095) goto <D.32139>; else goto <D.32140>;
          <D.32139>:
          D.32100 = read_ins->data.op[0].const_val;
          iftmp.316 = MIN_EXPR <D.32100, 4095>;
          goto <D.32141>;
          <D.32140>:
          iftmp.316 = -4095;
          <D.32141>:
          _imm12 = iftmp.316;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.32142 = ABS_EXPR <_imm12>;
            D.32143 = D.32142 | 49152;
            D.32144 = read_ins->sreg1;
            D.32145 = D.32144 << 16;
            D.32146 = D.32143 | D.32145;
            if (_imm12 >= 0) goto <D.32148>; else goto <D.32149>;
            <D.32148>:
            iftmp.317 = 8388608;
            goto <D.32150>;
            <D.32149>:
            iftmp.317 = 0;
            <D.32150>:
            D.32151 = D.32146 | iftmp.317;
            D.32152 = D.32151 | -452984832;
            D.32153 = (unsigned int) D.32152;
            *__ainstrp = D.32153;
            code = __ainstrp + 4;
          }
        }
        {
          arminstr_t * __ainstrp;

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

          D.32114 = ss_method_ins->data.op[0].const_val;
          if (D.32114 >= -4095) goto <D.32155>; else goto <D.32156>;
          <D.32155>:
          D.32114 = ss_method_ins->data.op[0].const_val;
          iftmp.318 = MIN_EXPR <D.32114, 4095>;
          goto <D.32157>;
          <D.32156>:
          iftmp.318 = -4095;
          <D.32157>:
          _imm12 = iftmp.318;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.32158 = ABS_EXPR <_imm12>;
            D.32159 = D.32158 | 49152;
            D.32160 = ss_method_ins->sreg1;
            D.32161 = D.32160 << 16;
            D.32162 = D.32159 | D.32161;
            if (_imm12 >= 0) goto <D.32164>; else goto <D.32165>;
            <D.32164>:
            iftmp.319 = 8388608;
            goto <D.32166>;
            <D.32165>:
            iftmp.319 = 0;
            <D.32166>:
            D.32167 = D.32162 | iftmp.319;
            D.32168 = D.32167 | -452984832;
            D.32169 = (unsigned int) D.32168;
            *__ainstrp = D.32169;
            code = __ainstrp + 4;
          }
        }
        {
          arminstr_t * __ainstrp;

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

          D.32128 = bp_method_ins->data.op[0].const_val;
          if (D.32128 >= -4095) goto <D.32171>; else goto <D.32172>;
          <D.32171>:
          D.32128 = bp_method_ins->data.op[0].const_val;
          iftmp.320 = MIN_EXPR <D.32128, 4095>;
          goto <D.32173>;
          <D.32172>:
          iftmp.320 = -4095;
          <D.32173>:
          _imm12 = iftmp.320;
          {
            arminstr_t * __ainstrp;

            __ainstrp = code;
            D.32174 = ABS_EXPR <_imm12>;
            D.32175 = D.32174 | 49152;
            D.32176 = bp_method_ins->sreg1;
            D.32177 = D.32176 << 16;
            D.32178 = D.32175 | D.32177;
            if (_imm12 >= 0) goto <D.32180>; else goto <D.32181>;
            <D.32180>:
            iftmp.321 = 8388608;
            goto <D.32182>;
            <D.32181>:
            iftmp.321 = 0;
            <D.32182>:
            D.32183 = D.32178 | iftmp.321;
            D.32184 = D.32183 | -452984832;
            D.32185 = (unsigned int) D.32184;
            *__ainstrp = D.32185;
            code = __ainstrp + 4;
          }
        }
      }
      <D.32093>:
      code.258 = (int) code;
      D.31350 = cfg->native_code;
      D.31351 = (int) D.31350;
      D.31352 = code.258 - D.31351;
      D.32186 = (unsigned int) D.31352;
      cfg->code_len = D.32186;
      D.32187 = cfg->code_len;
      D.31347 = cfg->code_size;
      D.32188 = D.32187 >= D.31347;
      D.32189 = (long int) D.32188;
      D.32190 = __builtin_expect (D.32189, 0);
      if (D.32190 != 0) goto <D.32191>; else goto <D.32192>;
      <D.32191>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 5919, "cfg->code_len < cfg->code_size");
      <D.32192>:
      monoeg_g_free (cinfo);
      D.32193 = code;
      return D.32193;
    }
  finally
    {
      rot_amount = {CLOBBER};
    }
}


emit_memcpy (guint8 * code, int size, int dreg, int doffset, int sreg, int soffset)
{
  unsigned int size.322;
  unsigned int size.323;
  int D.32200;
  int D.32201;
  int iftmp.324;
  int D.32206;
  int D.32207;
  unsigned int D.32208;
  guchar * D.32209;
  guint8 * D.32210;
  unsigned int doffset.325;
  unsigned int D.32214;
  int D.32216;
  unsigned int D.32217;
  unsigned int D.32218;
  unsigned int soffset.326;
  unsigned int D.32221;
  int D.32223;
  unsigned int D.32224;
  unsigned int D.32225;
  int D.32227;
  int D.32228;
  int D.32229;
  int D.32230;
  int D.32231;
  int iftmp.327;
  int D.32236;
  int D.32237;
  unsigned int D.32238;
  int iftmp.328;
  int D.32243;
  int D.32244;
  int D.32245;
  int D.32246;
  int iftmp.329;
  int D.32251;
  int D.32252;
  unsigned int D.32253;
  int D.32256;
  int iftmp.330;
  int D.32261;
  int D.32262;
  unsigned int D.32263;
  int iftmp.331;
  int D.32268;
  int D.32269;
  int iftmp.332;
  int D.32274;
  int D.32275;
  unsigned int D.32276;
  _Bool D.32277;
  long int D.32278;
  long int D.32279;

  size.322 = (unsigned int) size;
  if (size.322 > 16) goto <D.32197>; else goto <D.32198>;
  <D.32197>:
  {
    guint8 * start_loop;

    code = emit_big_add (code, 0, sreg, soffset);
    code = emit_big_add (code, 1, dreg, doffset);
    size.323 = (unsigned int) size;
    code = mono_arm_emit_load_imm (code, 2, size.323);
    start_loop = code;
    {
      arminstr_t * __ainstrp;

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

      _imm12 = 0;
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.32200 = ABS_EXPR <_imm12>;
        D.32201 = D.32200 | 77824;
        if (_imm12 >= 0) goto <D.32203>; else goto <D.32204>;
        <D.32203>:
        iftmp.324 = 8388608;
        goto <D.32205>;
        <D.32204>:
        iftmp.324 = 0;
        <D.32205>:
        D.32206 = D.32201 | iftmp.324;
        D.32207 = D.32206 | -452984832;
        D.32208 = (unsigned int) D.32207;
        *__ainstrp = D.32208;
        code = __ainstrp + 4;
      }
    }
    {
      arminstr_t * __ainstrp;

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

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

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

      __ainstrp = code;
      *__ainstrp = 436207616;
      code = __ainstrp + 4;
    }
    D.32209 = code + 4294967292;
    arm_patch (D.32209, start_loop);
    D.32210 = code;
    return D.32210;
  }
  <D.32198>:
  doffset.325 = (unsigned int) doffset;
  D.32214 = doffset.325 + 4095;
  if (D.32214 <= 8190) goto <D.32215>; else goto <D.32211>;
  <D.32215>:
  D.32216 = doffset + size;
  D.32217 = (unsigned int) D.32216;
  D.32218 = D.32217 + 4095;
  if (D.32218 <= 8190) goto <D.32219>; else goto <D.32211>;
  <D.32219>:
  soffset.326 = (unsigned int) soffset;
  D.32221 = soffset.326 + 4095;
  if (D.32221 <= 8190) goto <D.32222>; else goto <D.32211>;
  <D.32222>:
  D.32223 = soffset + size;
  D.32224 = (unsigned int) D.32223;
  D.32225 = D.32224 + 4095;
  if (D.32225 <= 8190) goto <D.32226>; else goto <D.32211>;
  <D.32226>:
  goto <D.24650>;
  <D.24649>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.32227 = ABS_EXPR <soffset>;
    D.32228 = D.32227 | 57344;
    D.32229 = sreg << 16;
    D.32230 = D.32228 | D.32229;
    D.32231 = D.32230 | 1048576;
    if (soffset >= 0) goto <D.32233>; else goto <D.32234>;
    <D.32233>:
    iftmp.327 = 8388608;
    goto <D.32235>;
    <D.32234>:
    iftmp.327 = 0;
    <D.32235>:
    D.32236 = D.32231 | iftmp.327;
    D.32237 = D.32236 | -452984832;
    D.32238 = (unsigned int) D.32237;
    *__ainstrp = D.32238;
    code = __ainstrp + 4;
  }
  {
    int _imm12;

    if (doffset >= -4095) goto <D.32240>; else goto <D.32241>;
    <D.32240>:
    iftmp.328 = MIN_EXPR <doffset, 4095>;
    goto <D.32242>;
    <D.32241>:
    iftmp.328 = -4095;
    <D.32242>:
    _imm12 = iftmp.328;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.32243 = ABS_EXPR <_imm12>;
      D.32244 = D.32243 | 57344;
      D.32245 = dreg << 16;
      D.32246 = D.32244 | D.32245;
      if (_imm12 >= 0) goto <D.32248>; else goto <D.32249>;
      <D.32248>:
      iftmp.329 = 8388608;
      goto <D.32250>;
      <D.32249>:
      iftmp.329 = 0;
      <D.32250>:
      D.32251 = D.32246 | iftmp.329;
      D.32252 = D.32251 | -452984832;
      D.32253 = (unsigned int) D.32252;
      *__ainstrp = D.32253;
      code = __ainstrp + 4;
    }
  }
  doffset = doffset + 4;
  soffset = soffset + 4;
  size = size + -4;
  <D.24650>:
  if (size > 3) goto <D.24649>; else goto <D.24651>;
  <D.24651>:
  goto <D.32212>;
  <D.32211>:
  if (size != 0) goto <D.32254>; else goto <D.32255>;
  <D.32254>:
  code = emit_big_add (code, 0, sreg, soffset);
  code = emit_big_add (code, 1, dreg, doffset);
  soffset = 0;
  doffset = soffset;
  goto <D.24656>;
  <D.24655>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.32227 = ABS_EXPR <soffset>;
    D.32256 = D.32227 | 1105920;
    if (soffset >= 0) goto <D.32258>; else goto <D.32259>;
    <D.32258>:
    iftmp.330 = 8388608;
    goto <D.32260>;
    <D.32259>:
    iftmp.330 = 0;
    <D.32260>:
    D.32261 = D.32256 | iftmp.330;
    D.32262 = D.32261 | -452984832;
    D.32263 = (unsigned int) D.32262;
    *__ainstrp = D.32263;
    code = __ainstrp + 4;
  }
  {
    int _imm12;

    if (doffset >= -4095) goto <D.32265>; else goto <D.32266>;
    <D.32265>:
    iftmp.331 = MIN_EXPR <doffset, 4095>;
    goto <D.32267>;
    <D.32266>:
    iftmp.331 = -4095;
    <D.32267>:
    _imm12 = iftmp.331;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.32268 = ABS_EXPR <_imm12>;
      D.32269 = D.32268 | 122880;
      if (_imm12 >= 0) goto <D.32271>; else goto <D.32272>;
      <D.32271>:
      iftmp.332 = 8388608;
      goto <D.32273>;
      <D.32272>:
      iftmp.332 = 0;
      <D.32273>:
      D.32274 = D.32269 | iftmp.332;
      D.32275 = D.32274 | -452984832;
      D.32276 = (unsigned int) D.32275;
      *__ainstrp = D.32276;
      code = __ainstrp + 4;
    }
  }
  doffset = doffset + 4;
  soffset = soffset + 4;
  size = size + -4;
  <D.24656>:
  if (size > 3) goto <D.24655>; else goto <D.24657>;
  <D.24657>:
  <D.32255>:
  <D.32212>:
  D.32277 = size != 0;
  D.32278 = (long int) D.32277;
  D.32279 = __builtin_expect (D.32278, 0);
  if (D.32279 != 0) goto <D.32280>; else goto <D.32281>;
  <D.32280>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 302, "size == 0");
  <D.32281>:
  D.32210 = code;
  return D.32210;
}


emit_save_lmf (struct MonoCompile * cfg, guint8 * code, gint32 lmf_offset)
{
  int code.333;
  unsigned char * D.32286;
  int D.32287;
  int D.32288;
  int D.32289;
  int D.32290;
  int iftmp.334;
  int D.32295;
  int D.32296;
  unsigned int D.32297;
  int D.32300;
  int D.32301;
  int iftmp.335;
  int D.32306;
  int D.32307;
  unsigned int D.32308;
  int D.32309;
  int D.32310;
  int iftmp.336;
  int D.32315;
  int D.32316;
  unsigned int D.32317;
  int D.32318;
  int D.32319;
  int iftmp.337;
  int D.32324;
  int D.32325;
  unsigned int D.32326;
  int D.32327;
  int D.32328;
  int iftmp.338;
  int D.32333;
  int D.32334;
  unsigned int D.32335;
  int D.32336;
  int D.32337;
  int iftmp.339;
  int D.32342;
  int D.32343;
  unsigned int D.32344;
  int D.32345;
  int D.32346;
  int iftmp.340;
  int D.32351;
  int D.32352;
  unsigned int D.32353;
  int D.32354;
  unsigned int i.341;
  unsigned int D.32356;
  guint8 * D.32357;
  gboolean get_lmf_fast;
  int i;
  gint32 lmf_addr_tls_offset;

  get_lmf_fast = 0;
  lmf_addr_tls_offset = mono_get_lmf_addr_tls_offset ();
  if (lmf_addr_tls_offset != -1) goto <D.32283>; else goto <D.32284>;
  <D.32283>:
  get_lmf_fast = 1;
  code.333 = (int) code;
  D.32286 = cfg->native_code;
  D.32287 = (int) D.32286;
  D.32288 = code.333 - D.32287;
  mono_add_patch_info (cfg, D.32288, 7, "__aeabi_read_tp");
  code = emit_call_seq (cfg, code);
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.32289 = ABS_EXPR <lmf_addr_tls_offset>;
    D.32290 = D.32289 | 1048576;
    if (lmf_addr_tls_offset >= 0) goto <D.32292>; else goto <D.32293>;
    <D.32292>:
    iftmp.334 = 8388608;
    goto <D.32294>;
    <D.32293>:
    iftmp.334 = 0;
    <D.32294>:
    D.32295 = D.32290 | iftmp.334;
    D.32296 = D.32295 | -452984832;
    D.32297 = (unsigned int) D.32296;
    *__ainstrp = D.32297;
    code = __ainstrp + 4;
  }
  get_lmf_fast = 1;
  <D.32284>:
  if (get_lmf_fast == 0) goto <D.32298>; else goto <D.32299>;
  <D.32298>:
  code.333 = (int) code;
  D.32286 = cfg->native_code;
  D.32287 = (int) D.32286;
  D.32288 = code.333 - D.32287;
  mono_add_patch_info (cfg, D.32288, 7, "mono_get_lmf_addr");
  code = emit_call_seq (cfg, code);
  <D.32299>:
  code = emit_big_add (code, 1, 13, lmf_offset);
  {
    int _imm12;

    _imm12 = 4;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.32300 = ABS_EXPR <_imm12>;
      D.32301 = D.32300 | 65536;
      if (_imm12 >= 0) goto <D.32303>; else goto <D.32304>;
      <D.32303>:
      iftmp.335 = 8388608;
      goto <D.32305>;
      <D.32304>:
      iftmp.335 = 0;
      <D.32305>:
      D.32306 = D.32301 | iftmp.335;
      D.32307 = D.32306 | -452984832;
      D.32308 = (unsigned int) D.32307;
      *__ainstrp = D.32308;
      code = __ainstrp + 4;
    }
  }
  {
    arminstr_t * __ainstrp;

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

    _imm12 = 0;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.32309 = ABS_EXPR <_imm12>;
      D.32310 = D.32309 | 114688;
      if (_imm12 >= 0) goto <D.32312>; else goto <D.32313>;
      <D.32312>:
      iftmp.336 = 8388608;
      goto <D.32314>;
      <D.32313>:
      iftmp.336 = 0;
      <D.32314>:
      D.32315 = D.32310 | iftmp.336;
      D.32316 = D.32315 | -452984832;
      D.32317 = (unsigned int) D.32316;
      *__ainstrp = D.32317;
      code = __ainstrp + 4;
    }
  }
  {
    int _imm12;

    _imm12 = 0;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.32318 = ABS_EXPR <_imm12>;
      D.32319 = D.32318 | 4096;
      if (_imm12 >= 0) goto <D.32321>; else goto <D.32322>;
      <D.32321>:
      iftmp.337 = 8388608;
      goto <D.32323>;
      <D.32322>:
      iftmp.337 = 0;
      <D.32323>:
      D.32324 = D.32319 | iftmp.337;
      D.32325 = D.32324 | -452984832;
      D.32326 = (unsigned int) D.32325;
      *__ainstrp = D.32326;
      code = __ainstrp + 4;
    }
  }
  {
    int _imm12;

    _imm12 = 12;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.32327 = ABS_EXPR <_imm12>;
      D.32328 = D.32327 | 118784;
      if (_imm12 >= 0) goto <D.32330>; else goto <D.32331>;
      <D.32330>:
      iftmp.338 = 8388608;
      goto <D.32332>;
      <D.32331>:
      iftmp.338 = 0;
      <D.32332>:
      D.32333 = D.32328 | iftmp.338;
      D.32334 = D.32333 | -452984832;
      D.32335 = (unsigned int) D.32334;
      *__ainstrp = D.32335;
      code = __ainstrp + 4;
    }
  }
  {
    int _imm12;

    _imm12 = 20;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.32336 = ABS_EXPR <_imm12>;
      D.32337 = D.32336 | 110592;
      if (_imm12 >= 0) goto <D.32339>; else goto <D.32340>;
      <D.32339>:
      iftmp.339 = 8388608;
      goto <D.32341>;
      <D.32340>:
      iftmp.339 = 0;
      <D.32341>:
      D.32342 = D.32337 | iftmp.339;
      D.32343 = D.32342 | -452984832;
      D.32344 = (unsigned int) D.32343;
      *__ainstrp = D.32344;
      code = __ainstrp + 4;
    }
  }
  {
    arminstr_t * __ainstrp;

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

    _imm12 = 16;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.32345 = ABS_EXPR <_imm12>;
      D.32346 = D.32345 | 114688;
      if (_imm12 >= 0) goto <D.32348>; else goto <D.32349>;
      <D.32348>:
      iftmp.340 = 8388608;
      goto <D.32350>;
      <D.32349>:
      iftmp.340 = 0;
      <D.32350>:
      D.32351 = D.32346 | iftmp.340;
      D.32352 = D.32351 | -452984832;
      D.32353 = (unsigned int) D.32352;
      *__ainstrp = D.32353;
      code = __ainstrp + 4;
    }
  }
  i = 0;
  goto <D.24721>;
  <D.24720>:
  D.32354 = lmf_offset + i;
  mini_gc_set_slot_type_from_fp (cfg, D.32354, 0);
  i.341 = (unsigned int) i;
  D.32356 = i.341 + 4;
  i = (int) D.32356;
  <D.24721>:
  i.341 = (unsigned int) i;
  if (i.341 <= 207) goto <D.24720>; else goto <D.24722>;
  <D.24722>:
  D.32357 = code;
  return D.32357;
}


mono_arch_emit_epilog (struct MonoCompile * cfg)
{
  struct MonoMethod * D.32359;
  unsigned char D.32360;
  unsigned char D.32361;
  struct MonoTraceSpec * mono_jit_trace_calls.342;
  unsigned int D.32367;
  unsigned int D.32368;
  unsigned int D.32371;
  unsigned int D.32372;
  unsigned char * D.32373;
  void * D.32374;
  int D.32375;
  int D.32376;
  unsigned int D.32377;
  unsigned int max_epilog_size.343;
  unsigned int D.32379;
  unsigned int D.32380;
  int D.32383;
  <unnamed type> D.32386;
  int D.32389;
  unsigned int D.32390;
  unsigned int D.32391;
  int D.32394;
  int D.32395;
  int D.32396;
  int D.32397;
  int D.32398;
  int iftmp.344;
  int D.32403;
  int D.32404;
  unsigned int D.32405;
  unsigned int D.32407;
  int D.32408;
  unsigned int D.32409;
  unsigned char D.32410;
  unsigned char D.32411;
  unsigned int pos.345;
  unsigned int D.32415;
  unsigned int D.32416;
  unsigned int lmf_offset.346;
  unsigned int D.32418;
  int D.32419;
  int D.32420;
  int D.32421;
  unsigned int D.32422;
  unsigned int D.32423;
  unsigned int D.32424;
  int iphone_abi.347;
  unsigned int D.32429;
  int D.32430;
  unsigned int sp_adj.348;
  unsigned int D.32432;
  int D.32433;
  int D.32434;
  unsigned int D.32435;
  int D.32441;
  int rot_amount.349;
  int D.32443;
  int D.32444;
  int D.32445;
  int D.32446;
  unsigned int D.32447;
  unsigned int D.32448;
  unsigned int D.32449;
  unsigned int D.32450;
  unsigned int D.32452;
  unsigned int D.32457;
  unsigned int D.32459;
  int code.350;
  int D.32461;
  int D.32462;
  unsigned int D.32463;
  _Bool D.32464;
  long int D.32465;
  long int D.32466;
  struct MonoMethod * method;
  int pos;
  int i;
  int rot_amount;
  int max_epilog_size;
  guint8 * code;
  struct CallInfo * cinfo;

  try
    {
      method = cfg->method;
      max_epilog_size = 96;
      D.32359 = cfg->method;
      D.32360 = BIT_FIELD_REF <*D.32359, 8, 168>;
      D.32361 = D.32360 & 1;
      if (D.32361 != 0) goto <D.32362>; else goto <D.32363>;
      <D.32362>:
      max_epilog_size = max_epilog_size + 128;
      <D.32363>:
      mono_jit_trace_calls.342 = mono_jit_trace_calls;
      if (mono_jit_trace_calls.342 != 0B) goto <D.32365>; else goto <D.32366>;
      <D.32365>:
      max_epilog_size = max_epilog_size + 50;
      <D.32366>:
      D.32367 = cfg->prof_options;
      D.32368 = D.32367 & 4096;
      if (D.32368 != 0) goto <D.32369>; else goto <D.32370>;
      <D.32369>:
      max_epilog_size = max_epilog_size + 50;
      <D.32370>:
      goto <D.26584>;
      <D.26583>:
      D.32371 = cfg->code_size;
      D.32372 = D.32371 * 2;
      cfg->code_size = D.32372;
      D.32373 = cfg->native_code;
      D.32371 = cfg->code_size;
      D.32374 = monoeg_realloc (D.32373, D.32371);
      cfg->native_code = D.32374;
      D.32375 = cfg->stat_code_reallocs;
      D.32376 = D.32375 + 1;
      cfg->stat_code_reallocs = D.32376;
      <D.26584>:
      D.32377 = cfg->code_len;
      max_epilog_size.343 = (unsigned int) max_epilog_size;
      D.32379 = D.32377 + max_epilog_size.343;
      D.32371 = cfg->code_size;
      D.32380 = D.32371 + 4294967280;
      if (D.32379 > D.32380) goto <D.26583>; else goto <D.26585>;
      <D.26585>:
      D.32373 = cfg->native_code;
      D.32377 = cfg->code_len;
      code = D.32373 + D.32377;
      mono_jit_trace_calls.342 = mono_jit_trace_calls;
      if (mono_jit_trace_calls.342 != 0B) goto <D.32381>; else goto <D.32382>;
      <D.32381>:
      D.32383 = mono_trace_eval (method);
      if (D.32383 != 0) goto <D.32384>; else goto <D.32385>;
      <D.32384>:
      code = mono_arch_instrument_epilog (cfg, mono_trace_leave_method, code, 1);
      <D.32385>:
      <D.32382>:
      pos = 0;
      cinfo = cfg->arch.cinfo;
      D.32386 = cinfo->ret.storage;
      if (D.32386 == 6) goto <D.32387>; else goto <D.32388>;
      <D.32387>:
      {
        struct MonoInst * ins;

        ins = cfg->ret;
        D.32389 = ins->data.op[0].const_val;
        D.32390 = (unsigned int) D.32389;
        D.32391 = D.32390 + 4095;
        if (D.32391 <= 8190) goto <D.32392>; else goto <D.32393>;
        <D.32392>:
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.32389 = ins->data.op[0].const_val;
          D.32394 = ABS_EXPR <D.32389>;
          D.32395 = ins->sreg1;
          D.32396 = D.32395 << 16;
          D.32397 = D.32394 | D.32396;
          D.32398 = D.32397 | 1048576;
          D.32389 = ins->data.op[0].const_val;
          if (D.32389 >= 0) goto <D.32400>; else goto <D.32401>;
          <D.32400>:
          iftmp.344 = 8388608;
          goto <D.32402>;
          <D.32401>:
          iftmp.344 = 0;
          <D.32402>:
          D.32403 = D.32398 | iftmp.344;
          D.32404 = D.32403 | -452984832;
          D.32405 = (unsigned int) D.32404;
          *__ainstrp = D.32405;
          code = __ainstrp + 4;
        }
        goto <D.32406>;
        <D.32393>:
        D.32389 = ins->data.op[0].const_val;
        D.32407 = (unsigned int) D.32389;
        code = mono_arm_emit_load_imm (code, 14, D.32407);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.32395 = ins->sreg1;
          D.32396 = D.32395 << 16;
          D.32408 = D.32396 | -409993202;
          D.32409 = (unsigned int) D.32408;
          *__ainstrp = D.32409;
          code = __ainstrp + 4;
        }
        <D.32406>:
      }
      <D.32388>:
      D.32410 = BIT_FIELD_REF <*method, 8, 168>;
      D.32411 = D.32410 & 1;
      if (D.32411 != 0) goto <D.32412>; else goto <D.32413>;
      <D.32412>:
      {
        int lmf_offset;
        int reg;
        int sp_adj;
        int regmask;

        pos.345 = (unsigned int) pos;
        D.32415 = pos.345 + 168;
        pos = (int) D.32415;
        lmf_offset = pos;
        D.32416 = cfg->stack_usage;
        lmf_offset.346 = (unsigned int) lmf_offset;
        D.32418 = D.32416 - lmf_offset.346;
        D.32419 = (int) D.32418;
        code = emit_restore_lmf (cfg, code, D.32419);
        sp_adj = 168;
        reg = 4;
        regmask = 40944;
        goto <D.26594>;
        <D.26593>:
        D.32420 = 1 << reg;
        D.32421 = ~D.32420;
        regmask = D.32421 & regmask;
        sp_adj = sp_adj + 4;
        reg = reg + 1;
        <D.26594>:
        D.32422 = cfg->used_int_regs;
        D.32420 = 1 << reg;
        D.32423 = (unsigned int) D.32420;
        D.32424 = D.32422 & D.32423;
        if (D.32424 == 0) goto <D.32425>; else goto <D.26595>;
        <D.32425>:
        if (reg <= 10) goto <D.26593>; else goto <D.26595>;
        <D.26595>:
        iphone_abi.347 = iphone_abi;
        if (iphone_abi.347 != 0) goto <D.32427>; else goto <D.32428>;
        <D.32427>:
        regmask = regmask & -32769;
        <D.32428>:
        D.32429 = cfg->frame_reg;
        D.32430 = (int) D.32429;
        D.32416 = cfg->stack_usage;
        lmf_offset.346 = (unsigned int) lmf_offset;
        D.32418 = D.32416 - lmf_offset.346;
        sp_adj.348 = (unsigned int) sp_adj;
        D.32432 = D.32418 + sp_adj.348;
        D.32433 = (int) D.32432;
        code = emit_big_add (code, 13, D.32430, D.32433);
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.32434 = regmask | -390266880;
          D.32435 = (unsigned int) D.32434;
          *__ainstrp = D.32435;
          code = __ainstrp + 4;
        }
        iphone_abi.347 = iphone_abi;
        if (iphone_abi.347 != 0) goto <D.32436>; else goto <D.32437>;
        <D.32436>:
        {
          arminstr_t * __ainstrp;

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

          __ainstrp = code;
          *__ainstrp = 3904733312;
          code = __ainstrp + 4;
        }
        <D.32437>:
      }
      goto <D.32438>;
      <D.32413>:
      D.32416 = cfg->stack_usage;
      i = mono_arm_is_rotated_imm8 (D.32416, &rot_amount);
      if (i >= 0) goto <D.32439>; else goto <D.32440>;
      <D.32439>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.32441 = i & 255;
        rot_amount.349 = rot_amount;
        D.32443 = rot_amount.349 >> 1;
        D.32444 = D.32443 & 15;
        D.32445 = D.32444 << 8;
        D.32446 = D.32441 | D.32445;
        D.32447 = (unsigned int) D.32446;
        D.32429 = cfg->frame_reg;
        D.32448 = D.32429 << 16;
        D.32449 = D.32447 | D.32448;
        D.32450 = D.32449 | 3800092672;
        *__ainstrp = D.32450;
        code = __ainstrp + 4;
      }
      goto <D.32451>;
      <D.32440>:
      D.32416 = cfg->stack_usage;
      code = mono_arm_emit_load_imm (code, 12, D.32416);
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.32429 = cfg->frame_reg;
        D.32448 = D.32429 << 16;
        D.32452 = D.32448 | 3766538252;
        *__ainstrp = D.32452;
        code = __ainstrp + 4;
      }
      <D.32451>:
      iphone_abi.347 = iphone_abi;
      if (iphone_abi.347 != 0) goto <D.32453>; else goto <D.32454>;
      <D.32453>:
      D.32422 = cfg->used_int_regs;
      if (D.32422 != 0) goto <D.32455>; else goto <D.32456>;
      <D.32455>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.32422 = cfg->used_int_regs;
        D.32457 = D.32422 | 3904700416;
        *__ainstrp = D.32457;
        code = __ainstrp + 4;
      }
      <D.32456>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3904733312;
        code = __ainstrp + 4;
      }
      goto <D.32458>;
      <D.32454>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.32422 = cfg->used_int_regs;
        D.32459 = D.32422 | 3904733184;
        *__ainstrp = D.32459;
        code = __ainstrp + 4;
      }
      <D.32458>:
      <D.32438>:
      code.350 = (int) code;
      D.32373 = cfg->native_code;
      D.32461 = (int) D.32373;
      D.32462 = code.350 - D.32461;
      D.32463 = (unsigned int) D.32462;
      cfg->code_len = D.32463;
      D.32377 = cfg->code_len;
      D.32371 = cfg->code_size;
      D.32464 = D.32377 >= D.32371;
      D.32465 = (long int) D.32464;
      D.32466 = __builtin_expect (D.32465, 0);
      if (D.32466 != 0) goto <D.32467>; else goto <D.32468>;
      <D.32467>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6024, "cfg->code_len < cfg->code_size");
      <D.32468>:
    }
  finally
    {
      rot_amount = {CLOBBER};
    }
}


emit_restore_lmf (struct MonoCompile * cfg, guint8 * code, gint32 lmf_offset)
{
  unsigned int D.32471;
  int D.32473;
  int D.32474;
  unsigned int D.32475;
  unsigned int offset.351;
  unsigned int D.32477;
  unsigned int iftmp.352;
  unsigned int D.32482;
  unsigned int D.32483;
  unsigned int D.32484;
  unsigned int D.32485;
  unsigned int iftmp.353;
  int D.32487;
  unsigned int D.32491;
  unsigned int D.32492;
  int D.32493;
  int D.32494;
  int iftmp.354;
  int D.32499;
  int D.32500;
  unsigned int D.32501;
  guint8 * D.32502;
  int basereg;
  int offset;

  if (lmf_offset <= 31) goto <D.32469>; else goto <D.32470>;
  <D.32469>:
  D.32471 = cfg->frame_reg;
  basereg = (int) D.32471;
  offset = lmf_offset;
  goto <D.32472>;
  <D.32470>:
  basereg = 2;
  offset = 0;
  D.32471 = cfg->frame_reg;
  D.32473 = (int) D.32471;
  code = emit_big_add (code, 2, D.32473, lmf_offset);
  <D.32472>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    D.32474 = basereg << 16;
    D.32475 = (unsigned int) D.32474;
    offset.351 = (unsigned int) offset;
    D.32477 = D.32475 | offset.351;
    if (offset >= 0) goto <D.32479>; else goto <D.32480>;
    <D.32479>:
    iftmp.352 = 8388608;
    goto <D.32481>;
    <D.32480>:
    iftmp.352 = 0;
    <D.32481>:
    D.32482 = D.32477 | iftmp.352;
    D.32483 = D.32482 | 3843080192;
    *__ainstrp = D.32483;
    code = __ainstrp + 4;
  }
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    offset.351 = (unsigned int) offset;
    D.32484 = offset.351 + 4;
    D.32474 = basereg << 16;
    D.32475 = (unsigned int) D.32474;
    D.32485 = D.32484 | D.32475;
    offset.351 = (unsigned int) offset;
    D.32484 = offset.351 + 4;
    D.32487 = (int) D.32484;
    if (D.32487 >= 0) goto <D.32488>; else goto <D.32489>;
    <D.32488>:
    iftmp.353 = 8388608;
    goto <D.32490>;
    <D.32489>:
    iftmp.353 = 0;
    <D.32490>:
    D.32491 = D.32485 | iftmp.353;
    D.32492 = D.32491 | 3843088384;
    *__ainstrp = D.32492;
    code = __ainstrp + 4;
  }
  {
    int _imm12;

    _imm12 = 0;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.32493 = ABS_EXPR <_imm12>;
      D.32494 = D.32493 | 966656;
      if (_imm12 >= 0) goto <D.32496>; else goto <D.32497>;
      <D.32496>:
      iftmp.354 = 8388608;
      goto <D.32498>;
      <D.32497>:
      iftmp.354 = 0;
      <D.32498>:
      D.32499 = D.32494 | iftmp.354;
      D.32500 = D.32499 | -452984832;
      D.32501 = (unsigned int) D.32500;
      *__ainstrp = D.32501;
      code = __ainstrp + 4;
    }
  }
  D.32502 = code;
  return D.32502;
}


mono_arch_emit_exceptions (struct MonoCompile * cfg)
{
  <unnamed type> D.32504;
  const void * D.32507;
  unsigned char D.32508;
  unsigned int D.32511;
  unsigned int D.32512;
  unsigned char * D.32513;
  void * D.32514;
  int D.32515;
  int D.32516;
  unsigned int D.32517;
  unsigned int max_epilog_size.355;
  unsigned int D.32519;
  unsigned int D.32520;
  int D.32521;
  sizetype D.32522;
  guint8 * D.32523;
  struct MonoImage * D.32526;
  const char * D.32527;
  _Bool D.32528;
  long int D.32529;
  long int D.32530;
  int code.356;
  int D.32534;
  int D.32535;
  unsigned int D.32536;
  unsigned int D.32537;
  _Bool D.32538;
  long int D.32539;
  long int D.32540;
  struct MonoJumpInfo * patch_info;
  int i;
  guint8 * code;
  guint8 * exc_throw_pos[8];
  guint8 exc_throw_found[8];
  int max_epilog_size;

  try
    {
      max_epilog_size = 50;
      i = 0;
      goto <D.26614>;
      <D.26613>:
      exc_throw_pos[i] = 0B;
      exc_throw_found[i] = 0;
      i = i + 1;
      <D.26614>:
      if (i <= 7) goto <D.26613>; else goto <D.26615>;
      <D.26615>:
      patch_info = cfg->patch_info;
      goto <D.26617>;
      <D.26616>:
      D.32504 = patch_info->type;
      if (D.32504 == 9) goto <D.32505>; else goto <D.32506>;
      <D.32505>:
      D.32507 = patch_info->data.target;
      i = mini_exception_id_by_name (D.32507);
      D.32508 = exc_throw_found[i];
      if (D.32508 == 0) goto <D.32509>; else goto <D.32510>;
      <D.32509>:
      max_epilog_size = max_epilog_size + 32;
      exc_throw_found[i] = 1;
      <D.32510>:
      <D.32506>:
      patch_info = patch_info->next;
      <D.26617>:
      if (patch_info != 0B) goto <D.26616>; else goto <D.26618>;
      <D.26618>:
      goto <D.26620>;
      <D.26619>:
      D.32511 = cfg->code_size;
      D.32512 = D.32511 * 2;
      cfg->code_size = D.32512;
      D.32513 = cfg->native_code;
      D.32511 = cfg->code_size;
      D.32514 = monoeg_realloc (D.32513, D.32511);
      cfg->native_code = D.32514;
      D.32515 = cfg->stat_code_reallocs;
      D.32516 = D.32515 + 1;
      cfg->stat_code_reallocs = D.32516;
      <D.26620>:
      D.32517 = cfg->code_len;
      max_epilog_size.355 = (unsigned int) max_epilog_size;
      D.32519 = D.32517 + max_epilog_size.355;
      D.32511 = cfg->code_size;
      D.32520 = D.32511 + 4294967280;
      if (D.32519 > D.32520) goto <D.26619>; else goto <D.26621>;
      <D.26621>:
      D.32513 = cfg->native_code;
      D.32517 = cfg->code_len;
      code = D.32513 + D.32517;
      patch_info = cfg->patch_info;
      goto <D.26631>;
      <D.26630>:
      D.32504 = patch_info->type;
      switch (D.32504) <default: <D.26629>, case 9: <D.26622>>
      <D.26622>:
      {
        struct MonoClass * exc_class;
        unsigned char * ip;

        D.32513 = cfg->native_code;
        D.32521 = patch_info->ip.i;
        D.32522 = (sizetype) D.32521;
        ip = D.32513 + D.32522;
        D.32507 = patch_info->data.target;
        i = mini_exception_id_by_name (D.32507);
        D.32523 = exc_throw_pos[i];
        if (D.32523 != 0B) goto <D.32524>; else goto <D.32525>;
        <D.32524>:
        D.32523 = exc_throw_pos[i];
        arm_patch (ip, D.32523);
        patch_info->type = 51;
        goto <D.26625>;
        <D.32525>:
        exc_throw_pos[i] = code;
        arm_patch (ip, code);
        D.32526 = mono_defaults.corlib;
        D.32527 = patch_info->data.name;
        exc_class = mono_class_from_name (D.32526, "System", D.32527);
        D.32528 = exc_class == 0B;
        D.32529 = (long int) D.32528;
        D.32530 = __builtin_expect (D.32529, 0);
        if (D.32530 != 0) goto <D.32531>; else goto <D.32532>;
        <D.32531>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6084, "exc_class");
        <D.32532>:
        {
          arminstr_t * __ainstrp;

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

          __ainstrp = code;
          *__ainstrp = 3852402688;
          code = __ainstrp + 4;
        }
        patch_info->type = 7;
        patch_info->data.name = "mono_arch_throw_corlib_exception";
        code.356 = (int) code;
        D.32513 = cfg->native_code;
        D.32534 = (int) D.32513;
        D.32535 = code.356 - D.32534;
        patch_info->ip.i = D.32535;
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          *__ainstrp = 3942645760;
          code = __ainstrp + 4;
        }
        D.32536 = exc_class->type_token;
        MEM[(guint32 *)code] = D.32536;
        code = code + 4;
        goto <D.26625>;
      }
      <D.26629>:
      goto <D.26625>;
      <D.26625>:
      patch_info = patch_info->next;
      <D.26631>:
      if (patch_info != 0B) goto <D.26630>; else goto <D.26632>;
      <D.26632>:
      code.356 = (int) code;
      D.32513 = cfg->native_code;
      D.32534 = (int) D.32513;
      D.32535 = code.356 - D.32534;
      D.32537 = (unsigned int) D.32535;
      cfg->code_len = D.32537;
      D.32517 = cfg->code_len;
      D.32511 = cfg->code_size;
      D.32538 = D.32517 >= D.32511;
      D.32539 = (long int) D.32538;
      D.32540 = __builtin_expect (D.32539, 0);
      if (D.32540 != 0) goto <D.32541>; else goto <D.32542>;
      <D.32541>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6118, "cfg->code_len < cfg->code_size");
      <D.32542>:
    }
  finally
    {
      exc_throw_pos = {CLOBBER};
      exc_throw_found = {CLOBBER};
    }
}


mono_arch_finish_init ()
{
  int lmf_tls_offset.357;
  int lmf_addr_tls_offset.358;

  lmf_tls_offset.357 = mono_get_lmf_tls_offset ();
  lmf_tls_offset = lmf_tls_offset.357;
  lmf_addr_tls_offset.358 = mono_get_lmf_addr_tls_offset ();
  lmf_addr_tls_offset = lmf_addr_tls_offset.358;
}


mono_arch_free_jit_tls_data (struct MonoJitTlsData * tls)
{

}


mono_arch_emit_inst_for_method (struct MonoCompile * cfg, struct MonoMethod * cmethod, struct MonoMethodSignature * fsig, struct MonoInst * * args)
{
  struct MonoInst * D.32546;

  D.32546 = 0B;
  return D.32546;
}


mono_arch_print_tree (struct MonoInst * tree, int arity)
{
  gboolean D.32548;

  D.32548 = 0;
  return D.32548;
}


mono_arch_get_patch_offset (guint8 * code)
{
  guint32 D.32550;

  D.32550 = 8;
  return D.32550;
}


mono_arch_flush_register_windows ()
{

}


mono_arch_emit_imt_argument (struct MonoCompile * cfg, struct MonoCallInst * call, struct MonoInst * imt_arg)
{
  unsigned int D.32552;
  unsigned char D.32553;
  unsigned char D.32554;
  struct MonoMemPool * D.32559;
  int D.32560;
  struct MonoInst * D.32561;
  int D.32562;
  int D.32563;
  const unsigned char * D.32564;
  int D.32565;
  struct MonoBasicBlock * D.32566;
  struct MonoInst * D.32567;
  int D.32572;
  struct MonoInst * D.32573;
  int D.32574;
  int D.32575;
  struct MonoMethod * D.32576;
  struct MonoGenericContext * D.32583;
  int mono_use_llvm.359;
  int D.32587;
  int D.32590;
  struct MonoInst * D.32591;
  int D.32592;
  int D.32593;
  int D.32598;
  struct MonoInst * D.32599;
  int D.32600;
  int D.32601;
  int method_reg;
  int use_jumptables;

  D.32552 = mono_alloc_ireg (cfg);
  method_reg = (int) D.32552;
  use_jumptables = 0;
  D.32553 = BIT_FIELD_REF <*cfg, 8, 3392>;
  D.32554 = D.32553 & 64;
  if (D.32554 != 0) goto <D.32555>; else goto <D.32556>;
  <D.32555>:
  {
    struct MonoInst * ins;

    call->dynamic_imt_arg = 1;
    if (imt_arg != 0B) goto <D.32557>; else goto <D.32558>;
    <D.32557>:
    {
      struct MonoInst * inst;

      D.32559 = cfg->mempool;
      inst = mono_mempool_alloc (D.32559, 56);
      inst->data.op[1].const_val = 0;
      D.32560 = inst->data.op[1].const_val;
      inst->data.op[0].const_val = D.32560;
      inst->prev = 0B;
      D.32561 = inst->prev;
      inst->next = D.32561;
      inst->opcode = 424;
      inst->flags = 0;
      inst->type = 0;
      inst->dreg = -1;
      inst->sreg3 = -1;
      D.32562 = inst->sreg3;
      inst->sreg2 = D.32562;
      D.32563 = inst->sreg2;
      inst->sreg1 = D.32563;
      D.32564 = cfg->ip;
      inst->cil_code = D.32564;
      inst->dreg = method_reg;
      D.32565 = imt_arg->dreg;
      inst->sreg1 = D.32565;
      D.32566 = cfg->cbb;
      D.32567 = D.32566->last_ins;
      if (D.32567 != 0B) goto <D.32568>; else goto <D.32569>;
      <D.32568>:
      D.32566 = cfg->cbb;
      D.32567 = D.32566->last_ins;
      D.32567->next = inst;
      D.32566 = cfg->cbb;
      D.32567 = D.32566->last_ins;
      inst->prev = D.32567;
      D.32566 = cfg->cbb;
      D.32566->last_ins = inst;
      goto <D.32570>;
      <D.32569>:
      D.32566 = cfg->cbb;
      D.32566 = cfg->cbb;
      D.32566->last_ins = inst;
      D.32567 = D.32566->last_ins;
      D.32566->code = D.32567;
      <D.32570>:
    }
    goto <D.32571>;
    <D.32558>:
    D.32559 = cfg->mempool;
    ins = mono_mempool_alloc (D.32559, 56);
    ins->data.op[1].const_val = 0;
    D.32572 = ins->data.op[1].const_val;
    ins->data.op[0].const_val = D.32572;
    ins->prev = 0B;
    D.32573 = ins->prev;
    ins->next = D.32573;
    ins->opcode = 732;
    ins->flags = 0;
    ins->type = 0;
    ins->dreg = -1;
    ins->sreg3 = -1;
    D.32574 = ins->sreg3;
    ins->sreg2 = D.32574;
    D.32575 = ins->sreg2;
    ins->sreg1 = D.32575;
    D.32564 = cfg->ip;
    ins->cil_code = D.32564;
    ins->dreg = method_reg;
    D.32576 = call->method;
    ins->data.op[0].p = D.32576;
    ins->data.op[1].const_val = 6;
    D.32566 = cfg->cbb;
    D.32567 = D.32566->last_ins;
    if (D.32567 != 0B) goto <D.32577>; else goto <D.32578>;
    <D.32577>:
    D.32566 = cfg->cbb;
    D.32567 = D.32566->last_ins;
    D.32567->next = ins;
    D.32566 = cfg->cbb;
    D.32567 = D.32566->last_ins;
    ins->prev = D.32567;
    D.32566 = cfg->cbb;
    D.32566->last_ins = ins;
    goto <D.32579>;
    <D.32578>:
    D.32566 = cfg->cbb;
    D.32566 = cfg->cbb;
    D.32566->last_ins = ins;
    D.32567 = D.32566->last_ins;
    D.32566->code = D.32567;
    <D.32579>:
    <D.32571>:
    mono_call_inst_add_outarg_reg (cfg, call, method_reg, 8, 0);
  }
  goto <D.32580>;
  <D.32556>:
  D.32583 = cfg->generic_context;
  if (D.32583 != 0B) goto <D.32581>; else goto <D.32584>;
  <D.32584>:
  if (imt_arg != 0B) goto <D.32581>; else goto <D.32585>;
  <D.32585>:
  mono_use_llvm.359 = mono_use_llvm;
  D.32587 = mono_use_llvm.359 | use_jumptables;
  if (D.32587 != 0) goto <D.32581>; else goto <D.32582>;
  <D.32581>:
  call->dynamic_imt_arg = 1;
  cfg->uses_rgctx_reg = 1;
  if (imt_arg != 0B) goto <D.32588>; else goto <D.32589>;
  <D.32588>:
  {
    struct MonoInst * inst;

    D.32559 = cfg->mempool;
    inst = mono_mempool_alloc (D.32559, 56);
    inst->data.op[1].const_val = 0;
    D.32590 = inst->data.op[1].const_val;
    inst->data.op[0].const_val = D.32590;
    inst->prev = 0B;
    D.32591 = inst->prev;
    inst->next = D.32591;
    inst->opcode = 424;
    inst->flags = 0;
    inst->type = 0;
    inst->dreg = -1;
    inst->sreg3 = -1;
    D.32592 = inst->sreg3;
    inst->sreg2 = D.32592;
    D.32593 = inst->sreg2;
    inst->sreg1 = D.32593;
    D.32564 = cfg->ip;
    inst->cil_code = D.32564;
    inst->dreg = method_reg;
    D.32565 = imt_arg->dreg;
    inst->sreg1 = D.32565;
    D.32566 = cfg->cbb;
    D.32567 = D.32566->last_ins;
    if (D.32567 != 0B) goto <D.32594>; else goto <D.32595>;
    <D.32594>:
    D.32566 = cfg->cbb;
    D.32567 = D.32566->last_ins;
    D.32567->next = inst;
    D.32566 = cfg->cbb;
    D.32567 = D.32566->last_ins;
    inst->prev = D.32567;
    D.32566 = cfg->cbb;
    D.32566->last_ins = inst;
    goto <D.32596>;
    <D.32595>:
    D.32566 = cfg->cbb;
    D.32566 = cfg->cbb;
    D.32566->last_ins = inst;
    D.32567 = D.32566->last_ins;
    D.32566->code = D.32567;
    <D.32596>:
  }
  goto <D.32597>;
  <D.32589>:
  {
    struct MonoInst * ins;

    D.32559 = cfg->mempool;
    ins = mono_mempool_alloc (D.32559, 56);
    ins->data.op[1].const_val = 0;
    D.32598 = ins->data.op[1].const_val;
    ins->data.op[0].const_val = D.32598;
    ins->prev = 0B;
    D.32599 = ins->prev;
    ins->next = D.32599;
    ins->opcode = 362;
    ins->flags = 0;
    ins->type = 0;
    ins->dreg = -1;
    ins->sreg3 = -1;
    D.32600 = ins->sreg3;
    ins->sreg2 = D.32600;
    D.32601 = ins->sreg2;
    ins->sreg1 = D.32601;
    D.32564 = cfg->ip;
    ins->cil_code = D.32564;
    D.32576 = call->method;
    ins->data.op[0].p = D.32576;
    ins->dreg = method_reg;
    D.32566 = cfg->cbb;
    D.32567 = D.32566->last_ins;
    if (D.32567 != 0B) goto <D.32602>; else goto <D.32603>;
    <D.32602>:
    D.32566 = cfg->cbb;
    D.32567 = D.32566->last_ins;
    D.32567->next = ins;
    D.32566 = cfg->cbb;
    D.32567 = D.32566->last_ins;
    ins->prev = D.32567;
    D.32566 = cfg->cbb;
    D.32566->last_ins = ins;
    goto <D.32604>;
    <D.32603>:
    D.32566 = cfg->cbb;
    D.32566 = cfg->cbb;
    D.32566->last_ins = ins;
    D.32567 = D.32566->last_ins;
    D.32566->code = D.32567;
    <D.32604>:
  }
  <D.32597>:
  mono_call_inst_add_outarg_reg (cfg, call, method_reg, 8, 0);
  <D.32582>:
  <D.32580>:
}


mono_arch_find_imt_method (mgreg_t * regs, guint8 * code)
{
  guint32 * D.32605;
  unsigned int D.32606;
  int mono_use_llvm.360;
  struct MonoMethod * D.32610;
  mgreg_t * D.32611;
  int D.32612;
  void * method;
  guint32 * code_ptr;

  code_ptr = code;
  code_ptr = code_ptr + 4294967288;
  D.32605 = code_ptr + 4;
  D.32606 = *D.32605;
  method = (void *) D.32606;
  mono_use_llvm.360 = mono_use_llvm;
  if (mono_use_llvm.360 != 0) goto <D.32608>; else goto <D.32609>;
  <D.32608>:
  D.32611 = regs + 32;
  D.32612 = *D.32611;
  D.32610 = (struct MonoMethod *) D.32612;
  return D.32610;
  <D.32609>:
  if (method == 0B) goto <D.32613>; else goto <D.32614>;
  <D.32613>:
  D.32611 = regs + 32;
  D.32612 = *D.32611;
  D.32610 = (struct MonoMethod *) D.32612;
  return D.32610;
  <D.32614>:
  D.32610 = method;
  return D.32610;
}


mono_arch_find_static_call_vtable (mgreg_t * regs, guint8 * code)
{
  struct MonoVTable * D.32616;
  mgreg_t * D.32617;
  int D.32618;

  D.32617 = regs + 32;
  D.32618 = *D.32617;
  D.32616 = (struct MonoVTable *) D.32618;
  return D.32616;
}


mono_arch_build_imt_thunk (struct MonoVTable * vtable, struct MonoDomain * domain, struct MonoIMTCheckItem * * imt_entries, int count, void * fail_tramp)
{
  unsigned int count.361;
  unsigned int D.32621;
  unsigned int i.362;
  unsigned int D.32623;
  struct MonoIMTCheckItem * * D.32624;
  unsigned char D.32625;
  int iftmp.363;
  int D.32631;
  unsigned char D.32636;
  int D.32638;
  void * * D.32639;
  int D.32640;
  int vtable.364;
  int D.32642;
  unsigned int D.32643;
  unsigned int D.32644;
  unsigned char D.32645;
  unsigned char D.32646;
  int D.32647;
  unsigned char D.32652;
  unsigned char D.32654;
  unsigned char D.32655;
  unsigned char D.32659;
  unsigned char D.32660;
  unsigned int D.32662;
  unsigned int D.32663;
  struct MonoIMTCheckItem * * D.32664;
  struct MonoIMTCheckItem * D.32665;
  int D.32666;
  int D.32669;
  int mono_use_llvm.365;
  unsigned char D.32680;
  int iftmp.366;
  int D.32686;
  int D.32689;
  unsigned char D.32694;
  unsigned char D.32697;
  int D.32700;
  int D.32701;
  int iftmp.367;
  int D.32706;
  int D.32707;
  unsigned int D.32708;
  void * D.32709;
  unsigned int D.32710;
  int D.32712;
  void * * D.32713;
  int D.32714;
  unsigned int vtable_offset.368;
  unsigned int D.32716;
  int D.32719;
  int D.32720;
  int iftmp.369;
  int D.32725;
  int D.32726;
  unsigned int D.32727;
  unsigned int vtable_offset.370;
  int D.32732;
  int D.32733;
  int iftmp.371;
  int D.32738;
  int D.32739;
  unsigned int D.32740;
  guint8 * D.32743;
  int D.32744;
  int D.32745;
  int iftmp.372;
  int D.32750;
  int D.32751;
  unsigned int D.32752;
  unsigned int fail_tramp.373;
  void * D.32756;
  unsigned int D.32757;
  unsigned int vtable.374;
  unsigned char D.32761;
  unsigned char D.32762;
  guint32 * * D.32763;
  unsigned int extra_space.375;
  unsigned int D.32767;
  guint8 * D.32769;
  int D.32772;
  unsigned int D.32775;
  unsigned int D.32776;
  struct MonoIMTCheckItem * * D.32777;
  struct MonoIMTCheckItem * D.32778;
  guint8 * D.32779;
  unsigned char D.32782;
  unsigned int j.376;
  unsigned int D.32786;
  struct MonoIMTCheckItem * * D.32787;
  struct MonoIMTCheckItem * D.32788;
  guint8 * D.32789;
  void * D.32790;
  unsigned int D.32791;
  unsigned char D.32793;
  long unsigned int D.32794;
  int code.377;
  int start.378;
  int D.32797;
  int D.32798;
  long unsigned int D.32799;
  long unsigned int D.32800;
  _Bool D.32801;
  long int D.32802;
  long int D.32803;
  void * D.32806;
  int size;
  int i;
  arminstr_t * code;
  arminstr_t * start;
  gboolean large_offsets;
  guint32 * * constant_pool_starts;
  arminstr_t * vtable_target;
  int extra_space;

  large_offsets = 0;
  vtable_target = 0B;
  extra_space = 0;
  size = 24;
  count.361 = (unsigned int) count;
  D.32621 = count.361 * 4;
  constant_pool_starts = monoeg_malloc0 (D.32621);
  i = 0;
  goto <D.26700>;
  <D.26699>:
  {
    struct MonoIMTCheckItem * item;

    i.362 = (unsigned int) i;
    D.32623 = i.362 * 4;
    D.32624 = imt_entries + D.32623;
    item = *D.32624;
    D.32625 = item->is_equals;
    if (D.32625 != 0) goto <D.32626>; else goto <D.32627>;
    <D.32626>:
    {
      gboolean fail_case;

      D.32631 = item->check_target_idx;
      if (D.32631 == 0) goto <D.32632>; else goto <D.32629>;
      <D.32632>:
      if (fail_tramp != 0B) goto <D.32633>; else goto <D.32629>;
      <D.32633>:
      iftmp.363 = 1;
      goto <D.32630>;
      <D.32629>:
      iftmp.363 = 0;
      <D.32630>:
      fail_case = iftmp.363;
      D.32636 = item->has_target_code;
      if (D.32636 != 0) goto <D.32634>; else goto <D.32637>;
      <D.32637>:
      D.32638 = item->value.vtable_slot;
      D.32639 = &vtable->vtable[D.32638];
      D.32640 = (int) D.32639;
      vtable.364 = (int) vtable;
      D.32642 = D.32640 - vtable.364;
      D.32643 = (unsigned int) D.32642;
      D.32644 = D.32643 + 4095;
      if (D.32644 > 8190) goto <D.32634>; else goto <D.32635>;
      <D.32634>:
      D.32645 = item->chunk_size;
      D.32646 = D.32645 + 32;
      item->chunk_size = D.32646;
      large_offsets = 1;
      <D.32635>:
      D.32631 = item->check_target_idx;
      D.32647 = D.32631 | fail_case;
      if (D.32647 != 0) goto <D.32648>; else goto <D.32649>;
      <D.32648>:
      D.32652 = item->compare_done;
      if (D.32652 == 0) goto <D.32650>; else goto <D.32653>;
      <D.32653>:
      if (fail_case != 0) goto <D.32650>; else goto <D.32651>;
      <D.32650>:
      D.32645 = item->chunk_size;
      D.32654 = D.32645 + 12;
      item->chunk_size = D.32654;
      <D.32651>:
      D.32645 = item->chunk_size;
      D.32655 = D.32645 + 4;
      item->chunk_size = D.32655;
      goto <D.32656>;
      <D.32649>:
      <D.32656>:
      if (fail_case != 0) goto <D.32657>; else goto <D.32658>;
      <D.32657>:
      D.32645 = item->chunk_size;
      D.32659 = D.32645 + 16;
      item->chunk_size = D.32659;
      large_offsets = 1;
      <D.32658>:
      D.32645 = item->chunk_size;
      D.32660 = D.32645 + 8;
      item->chunk_size = D.32660;
    }
    goto <D.32661>;
    <D.32627>:
    D.32645 = item->chunk_size;
    D.32659 = D.32645 + 16;
    item->chunk_size = D.32659;
    D.32631 = item->check_target_idx;
    D.32662 = (unsigned int) D.32631;
    D.32663 = D.32662 * 4;
    D.32664 = imt_entries + D.32663;
    D.32665 = *D.32664;
    D.32665->compare_done = 1;
    <D.32661>:
    D.32645 = item->chunk_size;
    D.32666 = (int) D.32645;
    size = D.32666 + size;
  }
  i = i + 1;
  <D.26700>:
  if (i < count) goto <D.26699>; else goto <D.26701>;
  <D.26701>:
  if (large_offsets != 0) goto <D.32667>; else goto <D.32668>;
  <D.32667>:
  D.32669 = count * 4;
  size = D.32669 + size;
  <D.32668>:
  if (fail_tramp != 0B) goto <D.32670>; else goto <D.32671>;
  <D.32670>:
  code = mono_method_alloc_generic_virtual_thunk (domain, size);
  goto <D.32672>;
  <D.32671>:
  code = mono_domain_code_reserve (domain, size);
  <D.32672>:
  start = code;
  if (large_offsets != 0) goto <D.32673>; else goto <D.32674>;
  <D.32673>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3912077315;
    code = __ainstrp + 4;
  }
  goto <D.32675>;
  <D.32674>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3912040451;
    code = __ainstrp + 4;
  }
  <D.32675>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3843948548;
    code = __ainstrp + 4;
  }
  vtable_target = code;
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3852451840;
    code = __ainstrp + 4;
  }
  mono_use_llvm.365 = mono_use_llvm;
  if (mono_use_llvm.365 != 0) goto <D.32677>; else goto <D.32678>;
  <D.32677>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785359368;
    code = __ainstrp + 4;
  }
  goto <D.32679>;
  <D.32678>:
  {
    arminstr_t * __ainstrp;

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

    __ainstrp = code;
    *__ainstrp = 27262984;
    code = __ainstrp + 4;
  }
  <D.32679>:
  i = 0;
  goto <D.26738>;
  <D.26737>:
  {
    struct MonoIMTCheckItem * item;
    arminstr_t * imt_method;
    arminstr_t * vtable_offset_ins;
    arminstr_t * target_code_ins;
    gint32 vtable_offset;

    i.362 = (unsigned int) i;
    D.32623 = i.362 * 4;
    D.32624 = imt_entries + D.32623;
    item = *D.32624;
    imt_method = 0B;
    vtable_offset_ins = 0B;
    target_code_ins = 0B;
    item->code_target = code;
    D.32680 = item->is_equals;
    if (D.32680 != 0) goto <D.32681>; else goto <D.32682>;
    <D.32681>:
    {
      gboolean fail_case;

      D.32686 = item->check_target_idx;
      if (D.32686 == 0) goto <D.32687>; else goto <D.32684>;
      <D.32687>:
      if (fail_tramp != 0B) goto <D.32688>; else goto <D.32684>;
      <D.32688>:
      iftmp.366 = 1;
      goto <D.32685>;
      <D.32684>:
      iftmp.366 = 0;
      <D.32685>:
      fail_case = iftmp.366;
      D.32686 = item->check_target_idx;
      D.32689 = D.32686 | fail_case;
      if (D.32689 != 0) goto <D.32690>; else goto <D.32691>;
      <D.32690>:
      D.32694 = item->compare_done;
      if (D.32694 == 0) goto <D.32692>; else goto <D.32695>;
      <D.32695>:
      if (fail_case != 0) goto <D.32692>; else goto <D.32693>;
      <D.32692>:
      imt_method = code;
      {
        arminstr_t * __ainstrp;

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

        __ainstrp = code;
        *__ainstrp = 3780116481;
        code = __ainstrp + 4;
      }
      <D.32693>:
      item->jmp_code = code;
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 436207616;
        code = __ainstrp + 4;
      }
      goto <D.32696>;
      <D.32691>:
      <D.32696>:
      D.32697 = item->has_target_code;
      if (D.32697 != 0) goto <D.32698>; else goto <D.32699>;
      <D.32698>:
      target_code_ins = code;
      {
        arminstr_t * __ainstrp;

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

        _imm12 = 12;
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.32700 = ABS_EXPR <_imm12>;
          D.32701 = D.32700 | 856064;
          if (_imm12 >= 0) goto <D.32703>; else goto <D.32704>;
          <D.32703>:
          iftmp.367 = 8388608;
          goto <D.32705>;
          <D.32704>:
          iftmp.367 = 0;
          <D.32705>:
          D.32706 = D.32701 | iftmp.367;
          D.32707 = D.32706 | -452984832;
          D.32708 = (unsigned int) D.32707;
          *__ainstrp = D.32708;
          code = __ainstrp + 4;
        }
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3904737283;
        code = __ainstrp + 4;
      }
      D.32709 = item->value.target_code;
      D.32710 = (unsigned int) D.32709;
      code = arm_emit_value_and_patch_ldr (code, target_code_ins, D.32710);
      goto <D.32711>;
      <D.32699>:
      D.32712 = item->value.vtable_slot;
      D.32713 = &vtable->vtable[D.32712];
      D.32714 = (int) D.32713;
      vtable.364 = (int) vtable;
      vtable_offset = D.32714 - vtable.364;
      vtable_offset.368 = (unsigned int) vtable_offset;
      D.32716 = vtable_offset.368 + 4095;
      if (D.32716 > 8190) goto <D.32717>; else goto <D.32718>;
      <D.32717>:
      vtable_offset_ins = code;
      {
        arminstr_t * __ainstrp;

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

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

        _imm12 = 12;
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.32719 = ABS_EXPR <_imm12>;
          D.32720 = D.32719 | 856064;
          if (_imm12 >= 0) goto <D.32722>; else goto <D.32723>;
          <D.32722>:
          iftmp.369 = 8388608;
          goto <D.32724>;
          <D.32723>:
          iftmp.369 = 0;
          <D.32724>:
          D.32725 = D.32720 | iftmp.369;
          D.32726 = D.32725 | -452984832;
          D.32727 = (unsigned int) D.32726;
          *__ainstrp = D.32727;
          code = __ainstrp + 4;
        }
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3904737283;
        code = __ainstrp + 4;
      }
      vtable_offset.370 = (unsigned int) vtable_offset;
      code = arm_emit_value_and_patch_ldr (code, vtable_offset_ins, vtable_offset.370);
      goto <D.32729>;
      <D.32718>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3904700419;
        code = __ainstrp + 4;
      }
      if (large_offsets != 0) goto <D.32730>; else goto <D.32731>;
      <D.32730>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3800944648;
        code = __ainstrp + 4;
      }
      <D.32731>:
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        D.32732 = ABS_EXPR <vtable_offset>;
        D.32733 = D.32732 | 1896448;
        if (vtable_offset >= 0) goto <D.32735>; else goto <D.32736>;
        <D.32735>:
        iftmp.371 = 8388608;
        goto <D.32737>;
        <D.32736>:
        iftmp.371 = 0;
        <D.32737>:
        D.32738 = D.32733 | iftmp.371;
        D.32739 = D.32738 | -452984832;
        D.32740 = (unsigned int) D.32739;
        *__ainstrp = D.32740;
        code = __ainstrp + 4;
      }
      <D.32729>:
      <D.32711>:
      if (fail_case != 0) goto <D.32741>; else goto <D.32742>;
      <D.32741>:
      D.32743 = item->jmp_code;
      arm_patch (D.32743, code);
      target_code_ins = code;
      {
        arminstr_t * __ainstrp;

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

        _imm12 = 12;
        {
          arminstr_t * __ainstrp;

          __ainstrp = code;
          D.32744 = ABS_EXPR <_imm12>;
          D.32745 = D.32744 | 856064;
          if (_imm12 >= 0) goto <D.32747>; else goto <D.32748>;
          <D.32747>:
          iftmp.372 = 8388608;
          goto <D.32749>;
          <D.32748>:
          iftmp.372 = 0;
          <D.32749>:
          D.32750 = D.32745 | iftmp.372;
          D.32751 = D.32750 | -452984832;
          D.32752 = (unsigned int) D.32751;
          *__ainstrp = D.32752;
          code = __ainstrp + 4;
        }
      }
      {
        arminstr_t * __ainstrp;

        __ainstrp = code;
        *__ainstrp = 3904737283;
        code = __ainstrp + 4;
      }
      fail_tramp.373 = (unsigned int) fail_tramp;
      code = arm_emit_value_and_patch_ldr (code, target_code_ins, fail_tramp.373);
      item->jmp_code = 0B;
      <D.32742>:
      if (imt_method != 0B) goto <D.32754>; else goto <D.32755>;
      <D.32754>:
      D.32756 = item->key;
      D.32757 = (unsigned int) D.32756;
      code = arm_emit_value_and_patch_ldr (code, imt_method, D.32757);
      <D.32755>:
      if (vtable_target != 0B) goto <D.32758>; else goto <D.32759>;
      <D.32758>:
      vtable.374 = (unsigned int) vtable;
      code = arm_emit_value_and_patch_ldr (code, vtable_target, vtable.374);
      D.32761 = item->chunk_size;
      D.32762 = D.32761 + 4;
      item->chunk_size = D.32762;
      vtable_target = 0B;
      <D.32759>:
      i.362 = (unsigned int) i;
      D.32623 = i.362 * 4;
      D.32763 = constant_pool_starts + D.32623;
      *D.32763 = code;
      if (extra_space != 0) goto <D.32764>; else goto <D.32765>;
      <D.32764>:
      extra_space.375 = (unsigned int) extra_space;
      D.32767 = extra_space.375 * 4;
      code = code + D.32767;
      extra_space = 0;
      <D.32765>:
    }
    goto <D.32768>;
    <D.32682>:
    {
      arminstr_t * __ainstrp;

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

      __ainstrp = code;
      *__ainstrp = 3780116481;
      code = __ainstrp + 4;
    }
    item->jmp_code = code;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      *__ainstrp = 704643072;
      code = __ainstrp + 4;
    }
    extra_space = extra_space + 1;
    <D.32768>:
  }
  i = i + 1;
  <D.26738>:
  if (i < count) goto <D.26737>; else goto <D.26739>;
  <D.26739>:
  i = 0;
  goto <D.26747>;
  <D.26746>:
  {
    struct MonoIMTCheckItem * item;

    i.362 = (unsigned int) i;
    D.32623 = i.362 * 4;
    D.32624 = imt_entries + D.32623;
    item = *D.32624;
    D.32769 = item->jmp_code;
    if (D.32769 != 0B) goto <D.32770>; else goto <D.32771>;
    <D.32770>:
    D.32772 = item->check_target_idx;
    if (D.32772 != 0) goto <D.32773>; else goto <D.32774>;
    <D.32773>:
    D.32769 = item->jmp_code;
    D.32772 = item->check_target_idx;
    D.32775 = (unsigned int) D.32772;
    D.32776 = D.32775 * 4;
    D.32777 = imt_entries + D.32776;
    D.32778 = *D.32777;
    D.32779 = D.32778->code_target;
    arm_patch (D.32769, D.32779);
    <D.32774>:
    <D.32771>:
    if (i > 0) goto <D.32780>; else goto <D.32781>;
    <D.32780>:
    D.32782 = item->is_equals;
    if (D.32782 != 0) goto <D.32783>; else goto <D.32784>;
    <D.32783>:
    {
      int j;
      arminstr_t * space_start;

      i.362 = (unsigned int) i;
      D.32623 = i.362 * 4;
      D.32763 = constant_pool_starts + D.32623;
      space_start = *D.32763;
      j = i + -1;
      goto <D.26744>;
      <D.26743>:
      j.376 = (unsigned int) j;
      D.32786 = j.376 * 4;
      D.32787 = imt_entries + D.32786;
      D.32788 = *D.32787;
      D.32789 = D.32788->code_target;
      j.376 = (unsigned int) j;
      D.32786 = j.376 * 4;
      D.32787 = imt_entries + D.32786;
      D.32788 = *D.32787;
      D.32790 = D.32788->key;
      D.32791 = (unsigned int) D.32790;
      space_start = arm_emit_value_and_patch_ldr (space_start, D.32789, D.32791);
      j = j + -1;
      <D.26744>:
      if (j >= 0) goto <D.32792>; else goto <D.26745>;
      <D.32792>:
      j.376 = (unsigned int) j;
      D.32786 = j.376 * 4;
      D.32787 = imt_entries + D.32786;
      D.32788 = *D.32787;
      D.32793 = D.32788->is_equals;
      if (D.32793 == 0) goto <D.26743>; else goto <D.26745>;
      <D.26745>:
    }
    <D.32784>:
    <D.32781>:
  }
  i = i + 1;
  <D.26747>:
  if (i < count) goto <D.26746>; else goto <D.26748>;
  <D.26748>:
  monoeg_g_free (constant_pool_starts);
  mono_arch_flush_icache (start, size);
  D.32794 = mono_stats.imt_thunks_size;
  code.377 = (int) code;
  start.378 = (int) start;
  D.32797 = code.377 - start.378;
  D.32798 = D.32797 /[ex] 4;
  D.32799 = (long unsigned int) D.32798;
  D.32800 = D.32794 + D.32799;
  mono_stats.imt_thunks_size = D.32800;
  code.377 = (int) code;
  start.378 = (int) start;
  D.32797 = code.377 - start.378;
  D.32801 = D.32797 > size;
  D.32802 = (long int) D.32801;
  D.32803 = __builtin_expect (D.32802, 0);
  if (D.32803 != 0) goto <D.32804>; else goto <D.32805>;
  <D.32804>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6648, "DISTANCE (start, code) <= size");
  <D.32805>:
  D.32806 = start;
  return D.32806;
}


arm_emit_value_and_patch_ldr (arminstr_t * code, arminstr_t * target, guint32 value)
{
  int code.379;
  int target.380;
  int D.32810;
  _Bool D.32811;
  long int D.32812;
  long int D.32813;
  unsigned int D.32816;
  unsigned int D.32817;
  arminstr_t * D.32818;
  guint32 delta;

  code.379 = (int) code;
  target.380 = (int) target;
  D.32810 = code.379 - target.380;
  delta = (guint32) D.32810;
  delta = delta + 4294967288;
  D.32811 = delta > 4095;
  D.32812 = (long int) D.32811;
  D.32813 = __builtin_expect (D.32812, 0);
  if (D.32813 != 0) goto <D.32814>; else goto <D.32815>;
  <D.32814>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6289, "delta >= 0 && delta <= 0xFFF");
  <D.32815>:
  D.32816 = *target;
  D.32817 = D.32816 | delta;
  *target = D.32817;
  *code = value;
  D.32818 = code + 4;
  return D.32818;
}


mono_arch_context_get_int_reg (struct MonoContext * ctx, int reg)
{
  mgreg_t D.32820;

  D.32820 = ctx->regs[reg];
  return D.32820;
}


mono_arch_context_set_int_reg (struct MonoContext * ctx, int reg, mgreg_t val)
{
  ctx->regs[reg] = val;
}


mono_arch_get_trampolines (gboolean aot)
{
  struct GSList * D.32822;

  D.32822 = mono_arm_get_exception_trampolines (aot);
  return D.32822;
}


mono_arch_set_breakpoint (struct MonoJitInfo * ji, guint8 * ip)
{
  int ip.381;
  void * D.32825;
  int D.32826;
  int D.32827;
  int D.32828;
  unsigned char D.32831;
  unsigned char D.32832;
  _Bool D.32833;
  long int D.32834;
  long int D.32835;
  guint8 * D.32838;
  struct MonoDomain * D.32842;
  unsigned int D.32843;
  _Bool D.32844;
  long int D.32845;
  long int D.32846;
  unsigned int D.32849;
  guint8 * D.32850;
  _Bool D.32851;
  long int D.32852;
  long int D.32853;
  void * bp_trigger_page.382;
  int D.32858;
  int D.32859;
  unsigned int D.32860;
  int bp_trigger_page.383;
  int D.32862;
  int D.32863;
  int D.32864;
  unsigned int D.32865;
  guint8 * D.32866;
  guint8 * code;
  guint32 native_offset;
  struct MonoDebugOptions * opt;

  code = ip;
  ip.381 = (int) ip;
  D.32825 = ji->code_start;
  D.32826 = (int) D.32825;
  D.32827 = ip.381 - D.32826;
  native_offset = (guint32) D.32827;
  opt = mini_get_debug_options ();
  D.32828 = opt->soft_breakpoints;
  if (D.32828 != 0) goto <D.32829>; else goto <D.32830>;
  <D.32829>:
  D.32831 = BIT_FIELD_REF <*ji, 8, 176>;
  D.32832 = D.32831 & 16;
  D.32833 = D.32832 != 0;
  D.32834 = (long int) D.32833;
  D.32835 = __builtin_expect (D.32834, 0);
  if (D.32835 != 0) goto <D.32836>; else goto <D.32837>;
  <D.32836>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6694, "!ji->from_aot");
  <D.32837>:
  code = code + 4;
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3778019134;
    code = __ainstrp + 4;
  }
  D.32838 = code + 4294967292;
  mono_arch_flush_icache (D.32838, 4);
  goto <D.32839>;
  <D.32830>:
  D.32831 = BIT_FIELD_REF <*ji, 8, 176>;
  D.32832 = D.32831 & 16;
  if (D.32832 != 0) goto <D.32840>; else goto <D.32841>;
  <D.32840>:
  {
    struct SeqPointInfo * info;

    D.32842 = mono_domain_get ();
    D.32825 = ji->code_start;
    info = mono_arch_get_seq_point_info (D.32842, D.32825);
    D.32843 = native_offset & 3;
    D.32844 = D.32843 != 0;
    D.32845 = (long int) D.32844;
    D.32846 = __builtin_expect (D.32845, 0);
    if (D.32846 != 0) goto <D.32847>; else goto <D.32848>;
    <D.32847>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6701, "native_offset % 4 == 0");
    <D.32848>:
    D.32849 = native_offset / 4;
    D.32850 = info->bp_addrs[D.32849];
    D.32851 = D.32850 != 0B;
    D.32852 = (long int) D.32851;
    D.32853 = __builtin_expect (D.32852, 0);
    if (D.32853 != 0) goto <D.32854>; else goto <D.32855>;
    <D.32854>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6702, "info->bp_addrs [native_offset / 4] == 0");
    <D.32855>:
    D.32849 = native_offset / 4;
    bp_trigger_page.382 = bp_trigger_page;
    info->bp_addrs[D.32849] = bp_trigger_page.382;
  }
  goto <D.32857>;
  <D.32841>:
  {
    int dreg;

    dreg = 14;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.32858 = dreg << 12;
      D.32859 = D.32858 | -442564608;
      D.32860 = (unsigned int) D.32859;
      *__ainstrp = D.32860;
      code = __ainstrp + 4;
    }
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      *__ainstrp = 3925868544;
      code = __ainstrp + 4;
    }
    bp_trigger_page.382 = bp_trigger_page;
    bp_trigger_page.383 = (int) bp_trigger_page.382;
    MEM[(int *)code] = bp_trigger_page.383;
    code = code + 4;
    {
      arminstr_t * __ainstrp;

      __ainstrp = code;
      D.32858 = dreg << 12;
      D.32862 = dreg << 16;
      D.32863 = D.32858 | D.32862;
      D.32864 = D.32863 | -443547648;
      D.32865 = (unsigned int) D.32864;
      *__ainstrp = D.32865;
      code = __ainstrp + 4;
    }
    D.32866 = code + 4294967280;
    mono_arch_flush_icache (D.32866, 16);
  }
  <D.32857>:
  <D.32839>:
}


mono_arch_clear_breakpoint (struct MonoJitInfo * ji, guint8 * ip)
{
  int D.32867;
  unsigned char D.32870;
  unsigned char D.32871;
  _Bool D.32872;
  long int D.32873;
  long int D.32874;
  guint8 * D.32877;
  int ip.384;
  void * D.32882;
  int D.32883;
  int D.32884;
  struct MonoDomain * D.32885;
  unsigned int D.32886;
  _Bool D.32887;
  long int D.32888;
  long int D.32889;
  unsigned int D.32892;
  guint8 * D.32893;
  void * bp_trigger_page.385;
  _Bool D.32895;
  long int D.32896;
  long int D.32897;
  int code.386;
  int D.32902;
  struct MonoDebugOptions * opt;
  guint8 * code;
  int i;

  opt = mini_get_debug_options ();
  code = ip;
  D.32867 = opt->soft_breakpoints;
  if (D.32867 != 0) goto <D.32868>; else goto <D.32869>;
  <D.32868>:
  D.32870 = BIT_FIELD_REF <*ji, 8, 176>;
  D.32871 = D.32870 & 16;
  D.32872 = D.32871 != 0;
  D.32873 = (long int) D.32872;
  D.32874 = __builtin_expect (D.32873, 0);
  if (D.32874 != 0) goto <D.32875>; else goto <D.32876>;
  <D.32875>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6746, "!ji->from_aot");
  <D.32876>:
  code = code + 4;
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785359360;
    code = __ainstrp + 4;
  }
  D.32877 = code + 4294967292;
  mono_arch_flush_icache (D.32877, 4);
  goto <D.32878>;
  <D.32869>:
  D.32870 = BIT_FIELD_REF <*ji, 8, 176>;
  D.32871 = D.32870 & 16;
  if (D.32871 != 0) goto <D.32879>; else goto <D.32880>;
  <D.32879>:
  {
    guint32 native_offset;
    struct SeqPointInfo * info;

    ip.384 = (int) ip;
    D.32882 = ji->code_start;
    D.32883 = (int) D.32882;
    D.32884 = ip.384 - D.32883;
    native_offset = (guint32) D.32884;
    D.32885 = mono_domain_get ();
    D.32882 = ji->code_start;
    info = mono_arch_get_seq_point_info (D.32885, D.32882);
    D.32886 = native_offset & 3;
    D.32887 = D.32886 != 0;
    D.32888 = (long int) D.32887;
    D.32889 = __builtin_expect (D.32888, 0);
    if (D.32889 != 0) goto <D.32890>; else goto <D.32891>;
    <D.32890>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6754, "native_offset % 4 == 0");
    <D.32891>:
    D.32892 = native_offset / 4;
    D.32893 = info->bp_addrs[D.32892];
    bp_trigger_page.385 = bp_trigger_page;
    D.32895 = D.32893 != bp_trigger_page.385;
    D.32896 = (long int) D.32895;
    D.32897 = __builtin_expect (D.32896, 0);
    if (D.32897 != 0) goto <D.32898>; else goto <D.32899>;
    <D.32898>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6755, "info->bp_addrs [native_offset / 4] == bp_trigger_page");
    <D.32899>:
    D.32892 = native_offset / 4;
    info->bp_addrs[D.32892] = 0B;
  }
  goto <D.32900>;
  <D.32880>:
  i = 0;
  goto <D.26786>;
  <D.26785>:
  {
    arminstr_t * __ainstrp;

    __ainstrp = code;
    *__ainstrp = 3785359360;
    code = __ainstrp + 4;
  }
  i = i + 1;
  <D.26786>:
  if (i <= 3) goto <D.26785>; else goto <D.26787>;
  <D.26787>:
  code.386 = (int) code;
  ip.384 = (int) ip;
  D.32902 = code.386 - ip.384;
  mono_arch_flush_icache (ip, D.32902);
  <D.32900>:
  <D.32878>:
}


mono_arch_start_single_stepping ()
{
  void * ss_trigger_page.387;
  int D.32906;
  unsigned int D.32907;

  ss_trigger_page.387 = ss_trigger_page;
  if (ss_trigger_page.387 != 0B) goto <D.32904>; else goto <D.32905>;
  <D.32904>:
  ss_trigger_page.387 = ss_trigger_page;
  D.32906 = mono_pagesize ();
  D.32907 = (unsigned int) D.32906;
  mono_mprotect (ss_trigger_page.387, D.32907, 0);
  goto <D.32908>;
  <D.32905>:
  ss_trigger_var = 1;
  <D.32908>:
}


mono_arch_stop_single_stepping ()
{
  void * ss_trigger_page.388;
  int D.32912;
  unsigned int D.32913;

  ss_trigger_page.388 = ss_trigger_page;
  if (ss_trigger_page.388 != 0B) goto <D.32910>; else goto <D.32911>;
  <D.32910>:
  ss_trigger_page.388 = ss_trigger_page;
  D.32912 = mono_pagesize ();
  D.32913 = (unsigned int) D.32912;
  mono_mprotect (ss_trigger_page.388, D.32913, 1);
  goto <D.32914>;
  <D.32911>:
  ss_trigger_var = 0;
  <D.32914>:
}


mono_arch_is_single_step_event (void * info, void * sigctx)
{
  void * ss_trigger_page.389;
  gboolean D.32918;
  void * D.32920;
  guint8 * D.32922;
  struct siginfo_t * sinfo;

  sinfo = info;
  ss_trigger_page.389 = ss_trigger_page;
  if (ss_trigger_page.389 == 0B) goto <D.32916>; else goto <D.32917>;
  <D.32916>:
  D.32918 = 0;
  return D.32918;
  <D.32917>:
  D.32920 = sinfo->_sifields._sigfault.si_addr;
  ss_trigger_page.389 = ss_trigger_page;
  if (D.32920 >= ss_trigger_page.389) goto <D.32921>; else goto <D.32919>;
  <D.32921>:
  D.32920 = sinfo->_sifields._sigfault.si_addr;
  ss_trigger_page.389 = ss_trigger_page;
  D.32922 = ss_trigger_page.389 + 128;
  if (D.32920 <= D.32922) goto <D.32923>; else goto <D.32919>;
  <D.32923>:
  D.32918 = 1;
  return D.32918;
  <D.32919>:
  D.32918 = 0;
  return D.32918;
}


mono_arch_is_breakpoint_event (void * info, void * sigctx)
{
  void * ss_trigger_page.390;
  gboolean D.32928;
  int D.32929;
  void * D.32933;
  void * bp_trigger_page.391;
  guint8 * D.32936;
  struct siginfo_t * sinfo;

  sinfo = info;
  ss_trigger_page.390 = ss_trigger_page;
  if (ss_trigger_page.390 == 0B) goto <D.32926>; else goto <D.32927>;
  <D.32926>:
  D.32928 = 0;
  return D.32928;
  <D.32927>:
  D.32929 = sinfo->si_signo;
  if (D.32929 == 11) goto <D.32930>; else goto <D.32931>;
  <D.32930>:
  D.32933 = sinfo->_sifields._sigfault.si_addr;
  bp_trigger_page.391 = bp_trigger_page;
  if (D.32933 >= bp_trigger_page.391) goto <D.32935>; else goto <D.32932>;
  <D.32935>:
  D.32933 = sinfo->_sifields._sigfault.si_addr;
  bp_trigger_page.391 = bp_trigger_page;
  D.32936 = bp_trigger_page.391 + 128;
  if (D.32933 <= D.32936) goto <D.32937>; else goto <D.32932>;
  <D.32937>:
  D.32928 = 1;
  return D.32928;
  <D.32932>:
  D.32928 = 0;
  return D.32928;
  <D.32931>:
  D.32928 = 0;
  return D.32928;
}


mono_arch_skip_breakpoint (struct MonoContext * ctx, struct MonoJitInfo * ji)
{
  int D.32939;
  int D.32940;

  D.32939 = ctx->pc;
  D.32940 = D.32939 + 4;
  ctx->pc = D.32940;
}


mono_arch_skip_single_step (struct MonoContext * ctx)
{
  int D.32941;
  int D.32942;

  D.32941 = ctx->pc;
  D.32942 = D.32941 + 4;
  ctx->pc = D.32942;
}


mono_arch_get_seq_point_info (struct MonoDomain * domain, guint8 * code)
{
  union mono_mutex_t * D.32943;
  _Bool D.32946;
  long int D.32947;
  long int D.32948;
  void * D.32951;
  struct GHashTable * D.32952;
  _Bool D.32955;
  long int D.32956;
  long int D.32957;
  _Bool D.32962;
  long int D.32963;
  long int D.32964;
  int D.32967;
  unsigned int D.32968;
  unsigned int D.32969;
  void * ss_trigger_page.392;
  void * bp_trigger_page.393;
  _Bool D.32974;
  long int D.32975;
  long int D.32976;
  _Bool D.32981;
  long int D.32982;
  long int D.32983;
  void * D.32986;
  struct SeqPointInfo * info;
  struct MonoJitInfo * ji;

  {
    int ret;

    D.32943 = &domain->lock.mutex;
    ret = pthread_mutex_lock (D.32943);
    if (ret != 0) goto <D.32944>; else goto <D.32945>;
    <D.32944>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.32945>:
    D.32946 = ret != 0;
    D.32947 = (long int) D.32946;
    D.32948 = __builtin_expect (D.32947, 0);
    if (D.32948 != 0) goto <D.32949>; else goto <D.32950>;
    <D.32949>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6881, "ret == 0");
    <D.32950>:
  }
  D.32951 = domain->runtime_info;
  D.32952 = MEM[(struct MonoJitDomainInfo *)D.32951].arch_seq_points;
  info = monoeg_g_hash_table_lookup (D.32952, code);
  {
    int ret;

    D.32943 = &domain->lock.mutex;
    ret = pthread_mutex_unlock (D.32943);
    if (ret != 0) goto <D.32953>; else goto <D.32954>;
    <D.32953>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.32954>:
    D.32955 = ret != 0;
    D.32956 = (long int) D.32955;
    D.32957 = __builtin_expect (D.32956, 0);
    if (D.32957 != 0) goto <D.32958>; else goto <D.32959>;
    <D.32958>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6884, "ret == 0");
    <D.32959>:
  }
  if (info == 0B) goto <D.32960>; else goto <D.32961>;
  <D.32960>:
  ji = mono_jit_info_table_find (domain, code);
  D.32962 = ji == 0B;
  D.32963 = (long int) D.32962;
  D.32964 = __builtin_expect (D.32963, 0);
  if (D.32964 != 0) goto <D.32965>; else goto <D.32966>;
  <D.32965>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6888, "ji");
  <D.32966>:
  D.32967 = ji->code_size;
  D.32968 = (unsigned int) D.32967;
  D.32969 = D.32968 + 8;
  info = monoeg_malloc0 (D.32969);
  ss_trigger_page.392 = ss_trigger_page;
  info->ss_trigger_page = ss_trigger_page.392;
  bp_trigger_page.393 = bp_trigger_page;
  info->bp_trigger_page = bp_trigger_page.393;
  {
    int ret;

    D.32943 = &domain->lock.mutex;
    ret = pthread_mutex_lock (D.32943);
    if (ret != 0) goto <D.32972>; else goto <D.32973>;
    <D.32972>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.32973>:
    D.32974 = ret != 0;
    D.32975 = (long int) D.32974;
    D.32976 = __builtin_expect (D.32975, 0);
    if (D.32976 != 0) goto <D.32977>; else goto <D.32978>;
    <D.32977>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6895, "ret == 0");
    <D.32978>:
  }
  D.32951 = domain->runtime_info;
  D.32952 = MEM[(struct MonoJitDomainInfo *)D.32951].arch_seq_points;
  monoeg_g_hash_table_insert_replace (D.32952, code, info, 0);
  {
    int ret;

    D.32943 = &domain->lock.mutex;
    ret = pthread_mutex_unlock (D.32943);
    if (ret != 0) goto <D.32979>; else goto <D.32980>;
    <D.32979>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.32980>:
    D.32981 = ret != 0;
    D.32982 = (long int) D.32981;
    D.32983 = __builtin_expect (D.32982, 0);
    if (D.32983 != 0) goto <D.32984>; else goto <D.32985>;
    <D.32984>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-arm.c", 6898, "ret == 0");
    <D.32985>:
  }
  <D.32961>:
  D.32986 = info;
  return D.32986;
}


mono_arch_init_lmf_ext (struct MonoLMFExt * ext, void * prev_lmf)
{
  void * D.32988;
  int D.32989;
  int D.32990;
  void * D.32991;
  int ext.394;

  ext->lmf.previous_lmf = prev_lmf;
  D.32988 = ext->lmf.previous_lmf;
  D.32989 = (int) D.32988;
  D.32990 = D.32989 | 2;
  D.32991 = (void *) D.32990;
  ext->lmf.previous_lmf = D.32991;
  ext.394 = (int) ext;
  ext->lmf.sp = ext.394;
}


mono_arch_set_target (char * mtriple)
{
  char * D.32993;
  char * D.32996;
  char * D.32999;
  char * D.33002;
  char * D.33007;
  char * D.33009;
  char * D.33010;

  D.32993 = strstr (mtriple, "armv7");
  if (D.32993 != 0B) goto <D.32994>; else goto <D.32995>;
  <D.32994>:
  v5_supported = 1;
  v6_supported = 1;
  v7_supported = 1;
  <D.32995>:
  D.32996 = strstr (mtriple, "armv6");
  if (D.32996 != 0B) goto <D.32997>; else goto <D.32998>;
  <D.32997>:
  v5_supported = 1;
  v6_supported = 1;
  <D.32998>:
  D.32999 = strstr (mtriple, "armv7s");
  if (D.32999 != 0B) goto <D.33000>; else goto <D.33001>;
  <D.33000>:
  v7s_supported = 1;
  <D.33001>:
  D.33002 = strstr (mtriple, "thumbv7s");
  if (D.33002 != 0B) goto <D.33003>; else goto <D.33004>;
  <D.33003>:
  v5_supported = 1;
  v6_supported = 1;
  v7_supported = 1;
  v7s_supported = 1;
  thumb_supported = 1;
  thumb2_supported = 1;
  <D.33004>:
  D.33007 = strstr (mtriple, "darwin");
  if (D.33007 != 0B) goto <D.33005>; else goto <D.33008>;
  <D.33008>:
  D.33009 = strstr (mtriple, "ios");
  if (D.33009 != 0B) goto <D.33005>; else goto <D.33006>;
  <D.33005>:
  v5_supported = 1;
  v6_supported = 1;
  thumb_supported = 1;
  iphone_abi = 1;
  <D.33006>:
  D.33010 = strstr (mtriple, "gnueabi");
  if (D.33010 != 0B) goto <D.33011>; else goto <D.33012>;
  <D.33011>:
  eabi_supported = 1;
  <D.33012>:
}


