__attribute__((visibility ("hidden")))
mini_gc_enable_gc_maps_for_aot ()
{
  enable_gc_maps_for_aot = 1;
}


__attribute__((visibility ("hidden")))
mini_gc_set_slot_type_from_fp (struct MonoCompile * cfg, int slot_offset, GCSlotType type)
{
  long unsigned int D.23301;
  long unsigned int D.23302;
  unsigned int slot_offset.0;
  unsigned int D.23306;
  _Bool D.23307;
  long int D.23308;
  long int D.23309;
  struct MonoMemPool * D.23312;
  struct GSList * D.23313;
  int D.23314;
  unsigned int D.23315;
  unsigned int D.23316;
  long int D.23317;
  void * D.23318;
  struct GSList * D.23319;
  struct MonoCompileGC * gcfg;

  gcfg = cfg->gc_info;
  D.23301 = BIT_FIELD_REF <*cfg, 64, 5632>;
  D.23302 = D.23301 & 72057594037927936;
  if (D.23302 == 0) goto <D.23303>; else goto <D.23304>;
  <D.23303>:
  return;
  <D.23304>:
  slot_offset.0 = (unsigned int) slot_offset;
  D.23306 = slot_offset.0 & 7;
  D.23307 = D.23306 != 0;
  D.23308 = (long int) D.23307;
  D.23309 = __builtin_expect (D.23308, 0);
  if (D.23309 != 0) goto <D.23310>; else goto <D.23311>;
  <D.23310>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1279, "slot_offset % SIZEOF_SLOT == 0");
  <D.23311>:
  D.23312 = cfg->mempool;
  D.23313 = gcfg->stack_slots_from_fp;
  D.23314 = slot_offset << 16;
  D.23315 = (unsigned int) D.23314;
  D.23316 = D.23315 | type;
  D.23317 = (long int) D.23316;
  D.23318 = (void *) D.23317;
  D.23319 = g_slist_prepend_mempool (D.23312, D.23313, D.23318);
  gcfg->stack_slots_from_fp = D.23319;
}


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

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


__attribute__((visibility ("hidden")))
mini_gc_set_slot_type_from_cfa (struct MonoCompile * cfg, int slot_offset, GCSlotType type)
{
  long unsigned int D.23323;
  long unsigned int D.23324;
  _Bool D.23327;
  long int D.23328;
  long int D.23329;
  unsigned int slot_offset.1;
  unsigned int D.23333;
  _Bool D.23334;
  long int D.23335;
  long int D.23336;
  struct MonoMemPool * D.23339;
  struct GSList * D.23340;
  int D.23341;
  unsigned int D.23342;
  unsigned int D.23343;
  long unsigned int D.23344;
  void * D.23345;
  struct GSList * D.23346;
  struct MonoCompileGC * gcfg;
  int slot;

  gcfg = cfg->gc_info;
  slot = slot_offset / -8;
  D.23323 = BIT_FIELD_REF <*cfg, 64, 5632>;
  D.23324 = D.23323 & 72057594037927936;
  if (D.23324 == 0) goto <D.23325>; else goto <D.23326>;
  <D.23325>:
  return;
  <D.23326>:
  D.23327 = slot_offset > 0;
  D.23328 = (long int) D.23327;
  D.23329 = __builtin_expect (D.23328, 0);
  if (D.23329 != 0) goto <D.23330>; else goto <D.23331>;
  <D.23330>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1302, "slot_offset <= 0");
  <D.23331>:
  slot_offset.1 = (unsigned int) slot_offset;
  D.23333 = slot_offset.1 & 7;
  D.23334 = D.23333 != 0;
  D.23335 = (long int) D.23334;
  D.23336 = __builtin_expect (D.23335, 0);
  if (D.23336 != 0) goto <D.23337>; else goto <D.23338>;
  <D.23337>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1303, "slot_offset % SIZEOF_SLOT == 0");
  <D.23338>:
  D.23339 = cfg->mempool;
  D.23340 = gcfg->stack_slots_from_cfa;
  D.23341 = slot << 16;
  D.23342 = (unsigned int) D.23341;
  D.23343 = D.23342 | type;
  D.23344 = (long unsigned int) D.23343;
  D.23345 = (void *) D.23344;
  D.23346 = g_slist_prepend_mempool (D.23339, D.23340, D.23345);
  gcfg->stack_slots_from_cfa = D.23346;
}


__attribute__((visibility ("hidden")))
mini_gc_create_gc_map (struct MonoCompile * cfg)
{
  long unsigned int D.23348;
  long unsigned int D.23349;
  unsigned int D.23352;
  unsigned int D.23353;

  D.23348 = BIT_FIELD_REF <*cfg, 64, 5632>;
  D.23349 = D.23348 & 72057594037927936;
  if (D.23349 == 0) goto <D.23350>; else goto <D.23351>;
  <D.23350>:
  return;
  <D.23351>:
  D.23352 = cfg->comp_done;
  D.23353 = D.23352 & 16;
  if (D.23353 == 0) goto <D.23354>; else goto <D.23355>;
  <D.23354>:
  return;
  <D.23355>:
  mono_analyze_liveness_gc (cfg);
  compute_frame_size (cfg);
  init_gcfg (cfg);
  process_spill_slots (cfg);
  process_other_slots (cfg);
  process_param_area_slots (cfg);
  process_variables (cfg);
  process_finally_clauses (cfg);
  create_map (cfg);
}


compute_frame_size (struct MonoCompile * cfg)
{
  struct MonoMethod * D.23357;
  int D.23358;
  unsigned int D.23359;
  unsigned int D.23360;
  int D.23361;
  unsigned int locals_min_offset.2;
  unsigned int D.23363;
  int D.23364;
  unsigned int locals_max_offset.3;
  unsigned int D.23366;
  int D.23367;
  struct MonoInst * * D.23368;
  long unsigned int D.23369;
  long unsigned int D.23370;
  struct MonoInst * * D.23371;
  short unsigned int D.23372;
  struct MonoGenericSharingContext * D.23375;
  struct MonoType * D.23376;
  int D.23377;
  long int D.23378;
  long int D.23379;
  long int D.23380;
  long int D.23381;
  long int D.23382;
  long int D.23383;
  unsigned int D.23384;
  int D.23385;
  unsigned int D.23386;
  unsigned int D.23387;
  int D.23388;
  short unsigned int D.23389;
  int D.23390;
  <unnamed-unsigned:1> D.23391;
  int D.23392;
  int D.23393;
  unsigned int D.23394;
  int D.23395;
  unsigned int D.23396;
  _Bool D.23397;
  long int D.23398;
  long int D.23399;
  int D.23402;
  _Bool D.23403;
  long int D.23404;
  long int D.23405;
  void * D.23408;
  long int D.23409;
  unsigned int D.23410;
  unsigned int D.23411;
  int D.23414;
  unsigned int D.23415;
  unsigned int D.23416;
  int D.23417;
  int D.23418;
  int i;
  int locals_min_offset;
  int locals_max_offset;
  int cfa_min_offset;
  int cfa_max_offset;
  int min_offset;
  int max_offset;
  struct MonoCompileGC * gcfg;
  struct MonoMethodSignature * sig;
  struct GSList * l;

  gcfg = cfg->gc_info;
  D.23357 = cfg->method;
  sig = mono_method_signature (D.23357);
  D.23358 = cfg->locals_min_stack_offset;
  D.23359 = (unsigned int) D.23358;
  D.23360 = D.23359 + 7;
  D.23361 = (int) D.23360;
  locals_min_offset = D.23361 & -8;
  locals_max_offset = cfg->locals_max_stack_offset;
  locals_min_offset.2 = (unsigned int) locals_min_offset;
  D.23363 = locals_min_offset.2 + 7;
  D.23364 = (int) D.23363;
  locals_min_offset = D.23364 & -8;
  locals_max_offset.3 = (unsigned int) locals_max_offset;
  D.23366 = locals_max_offset.3 + 7;
  D.23367 = (int) D.23366;
  locals_max_offset = D.23367 & -8;
  min_offset = locals_min_offset;
  max_offset = locals_max_offset;
  i = 0;
  goto <D.23151>;
  <D.23150>:
  {
    struct MonoInst * ins;

    D.23368 = cfg->args;
    D.23369 = (long unsigned int) i;
    D.23370 = D.23369 * 8;
    D.23371 = D.23368 + D.23370;
    ins = *D.23371;
    D.23372 = ins->opcode;
    if (D.23372 == 367) goto <D.23373>; else goto <D.23374>;
    <D.23373>:
    {
      int size;
      int size_in_slots;

      D.23375 = cfg->generic_sharing_context;
      D.23376 = ins->data.op[1].vtype;
      D.23377 = ins->backend.is_pinvoke;
      size = mini_type_stack_size_full (D.23375, D.23376, 0B, D.23377);
      D.23378 = (long int) size;
      D.23379 = D.23378 + 7;
      D.23380 = D.23379 >> 3;
      size_in_slots = (int) D.23380;
      D.23381 = ins->data.op[0].const_val;
      D.23382 = (long int) min_offset;
      D.23383 = MIN_EXPR <D.23381, D.23382>;
      min_offset = (int) D.23383;
      D.23381 = ins->data.op[0].const_val;
      D.23384 = (unsigned int) D.23381;
      D.23385 = size_in_slots * 8;
      D.23386 = (unsigned int) D.23385;
      D.23387 = D.23384 + D.23386;
      D.23388 = (int) D.23387;
      max_offset = MAX_EXPR <D.23388, max_offset>;
    }
    <D.23374>:
  }
  i = i + 1;
  <D.23151>:
  D.23389 = sig->param_count;
  D.23390 = (int) D.23389;
  D.23391 = sig->hasthis;
  D.23392 = (int) D.23391;
  D.23393 = D.23390 + D.23392;
  if (D.23393 > i) goto <D.23150>; else goto <D.23152>;
  <D.23152>:
  D.23394 = cfg->frame_reg;
  D.23395 = cfg->cfa_reg;
  D.23396 = (unsigned int) D.23395;
  D.23397 = D.23394 != D.23396;
  D.23398 = (long int) D.23397;
  D.23399 = __builtin_expect (D.23398, 0);
  if (D.23399 != 0) goto <D.23400>; else goto <D.23401>;
  <D.23400>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 2030, "cfg->frame_reg == cfg->cfa_reg");
  <D.23401>:
  D.23402 = cfg->cfa_offset;
  D.23403 = D.23402 <= 0;
  D.23404 = (long int) D.23403;
  D.23405 = __builtin_expect (D.23404, 0);
  if (D.23405 != 0) goto <D.23406>; else goto <D.23407>;
  <D.23406>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 2031, "cfg->cfa_offset > 0");
  <D.23407>:
  cfa_min_offset = 0;
  cfa_max_offset = cfg->cfa_offset;
  min_offset = MIN_EXPR <cfa_min_offset, min_offset>;
  max_offset = MAX_EXPR <cfa_max_offset, max_offset>;
  l = gcfg->stack_slots_from_fp;
  goto <D.23156>;
  <D.23155>:
  {
    gint data;
    int offset;

    D.23408 = l->data;
    D.23409 = (long int) D.23408;
    data = (gint) D.23409;
    offset = data >> 16;
    min_offset = MIN_EXPR <offset, min_offset>;
  }
  l = l->next;
  <D.23156>:
  if (l != 0B) goto <D.23155>; else goto <D.23157>;
  <D.23157>:
  D.23410 = cfg->flags;
  D.23411 = D.23410 & 64;
  if (D.23411 == 0) goto <D.23412>; else goto <D.23413>;
  <D.23412>:
  {
    int stack_offset;

    D.23414 = cfg->stack_offset;
    D.23415 = (unsigned int) D.23414;
    D.23416 = D.23415 + 7;
    D.23417 = (int) D.23416;
    stack_offset = D.23417 & -8;
    D.23418 = -stack_offset;
    min_offset = MIN_EXPR <D.23418, min_offset>;
  }
  <D.23413>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-gc.c", 2062);
  gcfg->min_offset = min_offset;
  gcfg->max_offset = max_offset;
  gcfg->locals_min_offset = locals_min_offset;
  gcfg->locals_max_offset = locals_max_offset;
}


init_gcfg (struct MonoCompile * cfg)
{
  struct GSList * D.23419;
  unsigned int D.23420;
  unsigned int ncallsites.4;
  unsigned int D.23422;
  struct MonoMemPool * D.23423;
  long unsigned int D.23424;
  unsigned int D.23425;
  unsigned int D.23426;
  int i.5;
  long unsigned int D.23428;
  long unsigned int D.23429;
  struct GCCallSite * * D.23430;
  void * D.23431;
  long unsigned int D.23432;
  long unsigned int D.23433;
  sizetype D.23434;
  struct GCCallSite * * D.23435;
  struct GCCallSite * D.23436;
  int D.23437;
  struct GCCallSite * * D.23438;
  struct GCCallSite * D.23439;
  int D.23440;
  _Bool D.23441;
  long int D.23442;
  long int D.23443;
  unsigned int D.23446;
  struct MonoMethod * D.23449;
  char * D.23450;
  int D.23451;
  int D.23452;
  int D.23453;
  long int D.23454;
  long int D.23455;
  long int D.23456;
  int D.23457;
  int D.23458;
  int D.23459;
  unsigned int D.23460;
  void * D.23461;
  void * D.23462;
  int D.23463;
  int D.23464;
  unsigned int D.23465;
  void * D.23466;
  void * D.23467;
  guint8 * D.23468;
  int D.23469;
  long unsigned int D.23470;
  long unsigned int D.23471;
  int D.23472;
  long unsigned int D.23473;
  long unsigned int D.23474;
  int i;
  int nregs;
  int nslots;
  struct MonoCompileGC * gcfg;
  struct GCCallSite * * callsites;
  int ncallsites;
  struct MonoBasicBlock * bb;
  struct GSList * l;

  gcfg = cfg->gc_info;
  ncallsites = 0;
  bb = cfg->bb_entry;
  goto <D.23171>;
  <D.23170>:
  D.23419 = bb->gc_callsites;
  D.23420 = monoeg_g_slist_length (D.23419);
  ncallsites.4 = (unsigned int) ncallsites;
  D.23422 = D.23420 + ncallsites.4;
  ncallsites = (int) D.23422;
  bb = bb->next_bb;
  <D.23171>:
  if (bb != 0B) goto <D.23170>; else goto <D.23172>;
  <D.23172>:
  D.23423 = cfg->mempool;
  D.23424 = (long unsigned int) ncallsites;
  D.23425 = (unsigned int) D.23424;
  D.23426 = D.23425 * 8;
  callsites = mono_mempool_alloc0 (D.23423, D.23426);
  i = 0;
  bb = cfg->bb_entry;
  goto <D.23177>;
  <D.23176>:
  l = bb->gc_callsites;
  goto <D.23174>;
  <D.23173>:
  i.5 = i;
  i = i.5 + 1;
  D.23428 = (long unsigned int) i.5;
  D.23429 = D.23428 * 8;
  D.23430 = callsites + D.23429;
  D.23431 = l->data;
  *D.23430 = D.23431;
  l = l->next;
  <D.23174>:
  if (l != 0B) goto <D.23173>; else goto <D.23175>;
  <D.23175>:
  bb = bb->next_bb;
  <D.23177>:
  if (bb != 0B) goto <D.23176>; else goto <D.23178>;
  <D.23178>:
  i = 1;
  goto <D.23180>;
  <D.23179>:
  D.23432 = (long unsigned int) i;
  D.23433 = D.23432 * 8;
  D.23434 = D.23433 + 18446744073709551608;
  D.23435 = callsites + D.23434;
  D.23436 = *D.23435;
  D.23437 = D.23436->pc_offset;
  D.23432 = (long unsigned int) i;
  D.23433 = D.23432 * 8;
  D.23438 = callsites + D.23433;
  D.23439 = *D.23438;
  D.23440 = D.23439->pc_offset;
  D.23441 = D.23437 >= D.23440;
  D.23442 = (long int) D.23441;
  D.23443 = __builtin_expect (D.23442, 0);
  if (D.23443 != 0) goto <D.23444>; else goto <D.23445>;
  <D.23444>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 2097, "callsites [i - 1]->pc_offset < callsites [i]->pc_offset");
  <D.23445>:
  i = i + 1;
  <D.23180>:
  if (i < ncallsites) goto <D.23179>; else goto <D.23181>;
  <D.23181>:
  D.23446 = cfg->verbose_level;
  if (D.23446 > 1) goto <D.23447>; else goto <D.23448>;
  <D.23447>:
  D.23449 = cfg->method;
  D.23450 = mono_method_full_name (D.23449, 1);
  D.23451 = gcfg->min_offset;
  D.23452 = gcfg->max_offset;
  printf ("GC Map for %s: 0x%x-0x%x\n", D.23450, D.23451, D.23452);
  <D.23448>:
  D.23452 = gcfg->max_offset;
  D.23451 = gcfg->min_offset;
  D.23453 = D.23452 - D.23451;
  nslots = D.23453 / 8;
  nregs = 16;
  gcfg->nslots = nslots;
  gcfg->nregs = nregs;
  gcfg->callsites = callsites;
  gcfg->ncallsites = ncallsites;
  D.23454 = (long int) ncallsites;
  D.23455 = D.23454 + 7;
  D.23456 = D.23455 >> 3;
  D.23457 = (int) D.23456;
  gcfg->stack_bitmap_width = D.23457;
  D.23454 = (long int) ncallsites;
  D.23455 = D.23454 + 7;
  D.23456 = D.23455 >> 3;
  D.23457 = (int) D.23456;
  gcfg->reg_bitmap_width = D.23457;
  D.23423 = cfg->mempool;
  D.23458 = gcfg->stack_bitmap_width;
  D.23459 = D.23458 * nslots;
  D.23460 = (unsigned int) D.23459;
  D.23461 = mono_mempool_alloc0 (D.23423, D.23460);
  gcfg->stack_ref_bitmap = D.23461;
  D.23423 = cfg->mempool;
  D.23458 = gcfg->stack_bitmap_width;
  D.23459 = D.23458 * nslots;
  D.23460 = (unsigned int) D.23459;
  D.23462 = mono_mempool_alloc0 (D.23423, D.23460);
  gcfg->stack_pin_bitmap = D.23462;
  D.23423 = cfg->mempool;
  D.23463 = gcfg->reg_bitmap_width;
  D.23464 = D.23463 * nregs;
  D.23465 = (unsigned int) D.23464;
  D.23466 = mono_mempool_alloc0 (D.23423, D.23465);
  gcfg->reg_ref_bitmap = D.23466;
  D.23423 = cfg->mempool;
  D.23463 = gcfg->reg_bitmap_width;
  D.23464 = D.23463 * nregs;
  D.23465 = (unsigned int) D.23464;
  D.23467 = mono_mempool_alloc0 (D.23423, D.23465);
  gcfg->reg_pin_bitmap = D.23467;
  D.23468 = gcfg->stack_pin_bitmap;
  D.23458 = gcfg->stack_bitmap_width;
  D.23469 = D.23458 * nregs;
  D.23470 = (long unsigned int) D.23469;
  memset (D.23468, 255, D.23470);
  i = 0;
  goto <D.23183>;
  <D.23182>:
  D.23471 = cfg->used_int_regs;
  D.23472 = 1 << i;
  D.23473 = (long unsigned int) D.23472;
  D.23474 = D.23471 & D.23473;
  if (D.23474 != 0) goto <D.23475>; else goto <D.23476>;
  <D.23475>:
  set_reg_slot_everywhere (gcfg, i, 0);
  <D.23476>:
  i = i + 1;
  <D.23183>:
  if (i < nregs) goto <D.23182>; else goto <D.23184>;
  <D.23184>:
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__))
printf (const char * restrict __fmt)
{
  int D.23477;

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


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memset (void * __dest, int __ch, size_t __len)
{
  void * D.23479;
  long unsigned int D.23480;

  D.23480 = __builtin_object_size (__dest, 0);
  D.23479 = __builtin___memset_chk (__dest, __ch, __len, D.23480);
  return D.23479;
}


set_reg_slot_everywhere (struct MonoCompileGC * gcfg, int slot, GCSlotType type)
{
  int D.23482;
  int cindex;

  cindex = 0;
  goto <D.22921>;
  <D.22920>:
  set_reg_slot (gcfg, slot, cindex, type);
  cindex = cindex + 1;
  <D.22921>:
  D.23482 = gcfg->ncallsites;
  if (D.23482 > cindex) goto <D.22920>; else goto <D.22922>;
  <D.22922>:
}


set_reg_slot (struct MonoCompileGC * gcfg, int slot, int callsite_index, GCSlotType type)
{
  int iftmp.6;
  int D.23488;
  _Bool D.23489;
  long int D.23490;
  long int D.23491;
  guint8 * D.23496;
  int D.23497;
  guint8 * D.23498;

  if (slot < 0) goto <D.23484>; else goto <D.23487>;
  <D.23487>:
  D.23488 = gcfg->nregs;
  if (D.23488 <= slot) goto <D.23484>; else goto <D.23485>;
  <D.23484>:
  iftmp.6 = 1;
  goto <D.23486>;
  <D.23485>:
  iftmp.6 = 0;
  <D.23486>:
  D.23489 = iftmp.6 != 0;
  D.23490 = (long int) D.23489;
  D.23491 = __builtin_expect (D.23490, 0);
  if (D.23491 != 0) goto <D.23492>; else goto <D.23493>;
  <D.23492>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1385, "slot >= 0 && slot < gcfg->nregs");
  <D.23493>:
  if (type == 2) goto <D.23494>; else goto <D.23495>;
  <D.23494>:
  D.23496 = gcfg->reg_ref_bitmap;
  D.23497 = gcfg->reg_bitmap_width;
  clear_bit (D.23496, D.23497, slot, callsite_index);
  D.23498 = gcfg->reg_pin_bitmap;
  D.23497 = gcfg->reg_bitmap_width;
  set_bit (D.23498, D.23497, slot, callsite_index);
  goto <D.23499>;
  <D.23495>:
  if (type == 1) goto <D.23500>; else goto <D.23501>;
  <D.23500>:
  D.23496 = gcfg->reg_ref_bitmap;
  D.23497 = gcfg->reg_bitmap_width;
  set_bit (D.23496, D.23497, slot, callsite_index);
  D.23498 = gcfg->reg_pin_bitmap;
  D.23497 = gcfg->reg_bitmap_width;
  clear_bit (D.23498, D.23497, slot, callsite_index);
  goto <D.23502>;
  <D.23501>:
  if (type == 0) goto <D.23503>; else goto <D.23504>;
  <D.23503>:
  D.23496 = gcfg->reg_ref_bitmap;
  D.23497 = gcfg->reg_bitmap_width;
  clear_bit (D.23496, D.23497, slot, callsite_index);
  D.23498 = gcfg->reg_pin_bitmap;
  D.23497 = gcfg->reg_bitmap_width;
  clear_bit (D.23498, D.23497, slot, callsite_index);
  <D.23504>:
  <D.23502>:
  <D.23499>:
}


set_bit (guint8 * bitmap, int width, int y, int x)
{
  int D.23505;
  int D.23506;
  int D.23507;
  sizetype D.23508;
  guint8 * D.23509;
  unsigned char D.23510;
  signed char D.23511;
  int D.23512;
  int D.23513;
  signed char D.23514;
  signed char D.23515;
  unsigned char D.23516;

  D.23505 = width * y;
  D.23506 = x / 8;
  D.23507 = D.23505 + D.23506;
  D.23508 = (sizetype) D.23507;
  D.23509 = bitmap + D.23508;
  D.23505 = width * y;
  D.23507 = D.23505 + D.23506;
  D.23508 = (sizetype) D.23507;
  D.23509 = bitmap + D.23508;
  D.23510 = *D.23509;
  D.23511 = (signed char) D.23510;
  D.23512 = x % 8;
  D.23513 = 1 << D.23512;
  D.23514 = (signed char) D.23513;
  D.23515 = D.23511 | D.23514;
  D.23516 = (unsigned char) D.23515;
  *D.23509 = D.23516;
}


clear_bit (guint8 * bitmap, int width, int y, int x)
{
  int D.23517;
  int D.23518;
  int D.23519;
  sizetype D.23520;
  guint8 * D.23521;
  unsigned char D.23522;
  signed char D.23523;
  int D.23524;
  int D.23525;
  signed char D.23526;
  signed char D.23527;
  signed char D.23528;
  unsigned char D.23529;

  D.23517 = width * y;
  D.23518 = x / 8;
  D.23519 = D.23517 + D.23518;
  D.23520 = (sizetype) D.23519;
  D.23521 = bitmap + D.23520;
  D.23517 = width * y;
  D.23519 = D.23517 + D.23518;
  D.23520 = (sizetype) D.23519;
  D.23521 = bitmap + D.23520;
  D.23522 = *D.23521;
  D.23523 = (signed char) D.23522;
  D.23524 = x % 8;
  D.23525 = 1 << D.23524;
  D.23526 = (signed char) D.23525;
  D.23527 = ~D.23526;
  D.23528 = D.23523 & D.23527;
  D.23529 = (unsigned char) D.23528;
  *D.23521 = D.23529;
}


process_spill_slots (struct MonoCompile * cfg)
{
  long int D.23530;
  long int D.23531;
  struct MonoSpillInfo * D.23532;
  long unsigned int D.23533;
  long unsigned int D.23534;
  struct MonoSpillInfo * D.23535;
  unsigned int bank.7;
  unsigned int D.23537;
  long int D.23540;
  long int D.23541;
  struct MonoSpillInfo * D.23542;
  long unsigned int D.23543;
  long unsigned int D.23544;
  struct MonoSpillInfo * D.23545;
  int D.23549;
  int D.23550;
  int D.23551;
  int D.23552;
  unsigned int D.23553;
  const char * D.23556;
  const char * iftmp.8;
  int D.23561;
  struct MonoSpillInfo * D.23562;
  long unsigned int D.23563;
  long unsigned int D.23564;
  struct MonoSpillInfo * D.23565;
  const char * iftmp.9;
  int D.23574;
  int D.23575;
  struct MonoSpillInfo * D.23576;
  struct MonoSpillInfo * D.23577;
  const char * iftmp.10;
  int D.23586;
  int D.23587;
  struct MonoCompileGC * gcfg;
  struct MonoBasicBlock * bb;
  struct GSList * l;
  int i;

  gcfg = cfg->gc_info;
  bb = cfg->bb_entry;
  goto <D.22951>;
  <D.22950>:
  l = bb->spill_slot_defs;
  goto <D.22948>;
  <D.22947>:
  {
    struct MonoInst * def;
    int spill_slot;
    int bank;
    int offset;
    int slot;

    def = l->data;
    D.23530 = def->data.op[0].const_val;
    spill_slot = (int) D.23530;
    D.23531 = def->data.op[1].const_val;
    bank = (int) D.23531;
    D.23532 = cfg->spill_info[bank];
    D.23533 = (long unsigned int) spill_slot;
    D.23534 = D.23533 * 4;
    D.23535 = D.23532 + D.23534;
    offset = D.23535->offset;
    slot = fp_offset_to_slot (cfg, offset);
    bank.7 = (unsigned int) bank;
    D.23537 = bank.7 + 4294967294;
    if (D.23537 <= 1) goto <D.23538>; else goto <D.23539>;
    <D.23538>:
    set_slot_everywhere (gcfg, slot, 0);
    <D.23539>:
  }
  l = l->next;
  <D.22948>:
  if (l != 0B) goto <D.22947>; else goto <D.22949>;
  <D.22949>:
  bb = bb->next_bb;
  <D.22951>:
  if (bb != 0B) goto <D.22950>; else goto <D.22952>;
  <D.22952>:
  bb = cfg->bb_entry;
  goto <D.22963>;
  <D.22962>:
  l = bb->spill_slot_defs;
  goto <D.22960>;
  <D.22959>:
  {
    struct MonoInst * def;
    int spill_slot;
    int bank;
    int offset;
    int slot;
    GCSlotType type;

    def = l->data;
    D.23540 = def->data.op[0].const_val;
    spill_slot = (int) D.23540;
    D.23541 = def->data.op[1].const_val;
    bank = (int) D.23541;
    D.23542 = cfg->spill_info[bank];
    D.23543 = (long unsigned int) spill_slot;
    D.23544 = D.23543 * 4;
    D.23545 = D.23542 + D.23544;
    offset = D.23545->offset;
    slot = fp_offset_to_slot (cfg, offset);
    if (bank == 3) goto <D.23546>; else goto <D.23547>;
    <D.23546>:
    type = 2;
    goto <D.23548>;
    <D.23547>:
    type = 1;
    <D.23548>:
    D.23549 = def->backend.pc_offset;
    D.23550 = bb->native_offset;
    D.23551 = bb->native_length;
    D.23552 = D.23550 + D.23551;
    set_slot_in_range (gcfg, slot, D.23549, D.23552, type);
    D.23553 = cfg->verbose_level;
    if (D.23553 > 1) goto <D.23554>; else goto <D.23555>;
    <D.23554>:
    D.23556 = slot_type_to_string (type);
    if (offset >= 0) goto <D.23558>; else goto <D.23559>;
    <D.23558>:
    iftmp.8 = "";
    goto <D.23560>;
    <D.23559>:
    iftmp.8 = "-";
    <D.23560>:
    D.23561 = ABS_EXPR <offset>;
    printf ("\t%s spill slot at %s0x%x(fp) (slot = %d)\n", D.23556, iftmp.8, D.23561, slot);
    <D.23555>:
  }
  l = l->next;
  <D.22960>:
  if (l != 0B) goto <D.22959>; else goto <D.22961>;
  <D.22961>:
  bb = bb->next_bb;
  <D.22963>:
  if (bb != 0B) goto <D.22962>; else goto <D.22964>;
  <D.22964>:
  i = 0;
  goto <D.22969>;
  <D.22968>:
  {
    int offset;
    int slot;

    D.23562 = cfg->spill_info[1];
    D.23563 = (long unsigned int) i;
    D.23564 = D.23563 * 4;
    D.23565 = D.23562 + D.23564;
    offset = D.23565->offset;
    if (offset == -1) goto <D.23566>; else goto <D.23567>;
    <D.23566>:
    // predicted unlikely by continue predictor.
    goto <D.22967>;
    <D.23567>:
    slot = fp_offset_to_slot (cfg, offset);
    set_slot_everywhere (gcfg, slot, 0);
    D.23553 = cfg->verbose_level;
    if (D.23553 > 1) goto <D.23568>; else goto <D.23569>;
    <D.23568>:
    if (offset >= 0) goto <D.23571>; else goto <D.23572>;
    <D.23571>:
    iftmp.9 = "";
    goto <D.23573>;
    <D.23572>:
    iftmp.9 = "-";
    <D.23573>:
    D.23574 = ABS_EXPR <offset>;
    printf ("\tfp spill slot at %s0x%x(fp) (slot = %d)\n", iftmp.9, D.23574, slot);
    <D.23569>:
  }
  <D.22967>:
  i = i + 1;
  <D.22969>:
  D.23575 = cfg->spill_info_len[1];
  if (D.23575 > i) goto <D.22968>; else goto <D.22970>;
  <D.22970>:
  i = 0;
  goto <D.22975>;
  <D.22974>:
  {
    int offset;
    int slot;

    D.23576 = cfg->spill_info[0];
    D.23563 = (long unsigned int) i;
    D.23564 = D.23563 * 4;
    D.23577 = D.23576 + D.23564;
    offset = D.23577->offset;
    if (offset == -1) goto <D.23578>; else goto <D.23579>;
    <D.23578>:
    // predicted unlikely by continue predictor.
    goto <D.22973>;
    <D.23579>:
    slot = fp_offset_to_slot (cfg, offset);
    set_slot_everywhere (gcfg, slot, 0);
    D.23553 = cfg->verbose_level;
    if (D.23553 > 1) goto <D.23580>; else goto <D.23581>;
    <D.23580>:
    if (offset >= 0) goto <D.23583>; else goto <D.23584>;
    <D.23583>:
    iftmp.10 = "";
    goto <D.23585>;
    <D.23584>:
    iftmp.10 = "-";
    <D.23585>:
    D.23586 = ABS_EXPR <offset>;
    printf ("\tint spill slot at %s0x%x(fp) (slot = %d)\n", iftmp.10, D.23586, slot);
    <D.23581>:
  }
  <D.22973>:
  i = i + 1;
  <D.22975>:
  D.23587 = cfg->spill_info_len[0];
  if (D.23587 > i) goto <D.22974>; else goto <D.22976>;
  <D.22976>:
}


set_slot_in_range (struct MonoCompileGC * gcfg, int slot, int from, int to, GCSlotType type)
{
  struct GCCallSite * * D.23588;
  long unsigned int D.23589;
  long unsigned int D.23590;
  struct GCCallSite * * D.23591;
  struct GCCallSite * D.23592;
  int D.23597;
  int cindex;

  cindex = 0;
  goto <D.22906>;
  <D.22905>:
  {
    int callsite_offset;

    D.23588 = gcfg->callsites;
    D.23589 = (long unsigned int) cindex;
    D.23590 = D.23589 * 8;
    D.23591 = D.23588 + D.23590;
    D.23592 = *D.23591;
    callsite_offset = D.23592->pc_offset;
    if (callsite_offset >= from) goto <D.23593>; else goto <D.23594>;
    <D.23593>:
    if (callsite_offset < to) goto <D.23595>; else goto <D.23596>;
    <D.23595>:
    set_slot (gcfg, slot, cindex, type);
    <D.23596>:
    <D.23594>:
  }
  cindex = cindex + 1;
  <D.22906>:
  D.23597 = gcfg->ncallsites;
  if (D.23597 > cindex) goto <D.22905>; else goto <D.22907>;
  <D.22907>:
}


__attribute__((always_inline))
set_slot (struct MonoCompileGC * gcfg, int slot, int callsite_index, GCSlotType type)
{
  int iftmp.11;
  int D.23603;
  _Bool D.23604;
  long int D.23605;
  long int D.23606;
  guint8 * D.23611;
  int D.23612;
  guint8 * D.23613;

  if (slot < 0) goto <D.23599>; else goto <D.23602>;
  <D.23602>:
  D.23603 = gcfg->nslots;
  if (D.23603 <= slot) goto <D.23599>; else goto <D.23600>;
  <D.23599>:
  iftmp.11 = 1;
  goto <D.23601>;
  <D.23600>:
  iftmp.11 = 0;
  <D.23601>:
  D.23604 = iftmp.11 != 0;
  D.23605 = (long int) D.23604;
  D.23606 = __builtin_expect (D.23605, 0);
  if (D.23606 != 0) goto <D.23607>; else goto <D.23608>;
  <D.23607>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1327, "slot >= 0 && slot < gcfg->nslots");
  <D.23608>:
  if (type == 2) goto <D.23609>; else goto <D.23610>;
  <D.23609>:
  D.23611 = gcfg->stack_ref_bitmap;
  D.23612 = gcfg->stack_bitmap_width;
  clear_bit (D.23611, D.23612, slot, callsite_index);
  D.23613 = gcfg->stack_pin_bitmap;
  D.23612 = gcfg->stack_bitmap_width;
  set_bit (D.23613, D.23612, slot, callsite_index);
  goto <D.23614>;
  <D.23610>:
  if (type == 1) goto <D.23615>; else goto <D.23616>;
  <D.23615>:
  D.23611 = gcfg->stack_ref_bitmap;
  D.23612 = gcfg->stack_bitmap_width;
  set_bit (D.23611, D.23612, slot, callsite_index);
  D.23613 = gcfg->stack_pin_bitmap;
  D.23612 = gcfg->stack_bitmap_width;
  clear_bit (D.23613, D.23612, slot, callsite_index);
  goto <D.23617>;
  <D.23616>:
  if (type == 0) goto <D.23618>; else goto <D.23619>;
  <D.23618>:
  D.23611 = gcfg->stack_ref_bitmap;
  D.23612 = gcfg->stack_bitmap_width;
  clear_bit (D.23611, D.23612, slot, callsite_index);
  D.23613 = gcfg->stack_pin_bitmap;
  D.23612 = gcfg->stack_bitmap_width;
  clear_bit (D.23613, D.23612, slot, callsite_index);
  <D.23619>:
  <D.23617>:
  <D.23614>:
}


slot_type_to_string (GCSlotType type)
{
  const char * D.23620;

  switch (type) <default: <D.22731>, case 0: <D.22729>, case 1: <D.22728>, case 2: <D.22730>>
  <D.22728>:
  D.23620 = "ref";
  return D.23620;
  <D.22729>:
  D.23620 = "noref";
  return D.23620;
  <D.22730>:
  D.23620 = "pin";
  return D.23620;
  <D.22731>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-gc.c", 663);
  D.23620 = 0B;
  return D.23620;
}


fp_offset_to_slot (struct MonoCompile * cfg, int offset)
{
  int D.23622;
  int D.23623;
  int D.23624;
  struct MonoCompileGC * gcfg;

  gcfg = cfg->gc_info;
  D.23623 = gcfg->min_offset;
  D.23624 = offset - D.23623;
  D.23622 = D.23624 / 8;
  return D.23622;
}


set_slot_everywhere (struct MonoCompileGC * gcfg, int slot, GCSlotType type)
{
  sizetype D.23628;
  guint8 * D.23629;
  long unsigned int D.23630;
  guint8 * D.23631;
  int width;
  int pos;
  guint8 * ref_bitmap;
  guint8 * pin_bitmap;

  ref_bitmap = gcfg->stack_ref_bitmap;
  pin_bitmap = gcfg->stack_pin_bitmap;
  width = gcfg->stack_bitmap_width;
  pos = width * slot;
  if (type == 2) goto <D.23626>; else goto <D.23627>;
  <D.23626>:
  D.23628 = (sizetype) pos;
  D.23629 = ref_bitmap + D.23628;
  D.23630 = (long unsigned int) width;
  memset (D.23629, 0, D.23630);
  D.23628 = (sizetype) pos;
  D.23631 = pin_bitmap + D.23628;
  D.23630 = (long unsigned int) width;
  memset (D.23631, 255, D.23630);
  goto <D.23632>;
  <D.23627>:
  if (type == 1) goto <D.23633>; else goto <D.23634>;
  <D.23633>:
  D.23628 = (sizetype) pos;
  D.23629 = ref_bitmap + D.23628;
  D.23630 = (long unsigned int) width;
  memset (D.23629, 255, D.23630);
  D.23628 = (sizetype) pos;
  D.23631 = pin_bitmap + D.23628;
  D.23630 = (long unsigned int) width;
  memset (D.23631, 0, D.23630);
  goto <D.23635>;
  <D.23634>:
  if (type == 0) goto <D.23636>; else goto <D.23637>;
  <D.23636>:
  D.23628 = (sizetype) pos;
  D.23629 = ref_bitmap + D.23628;
  D.23630 = (long unsigned int) width;
  memset (D.23629, 0, D.23630);
  D.23628 = (sizetype) pos;
  D.23631 = pin_bitmap + D.23628;
  D.23630 = (long unsigned int) width;
  memset (D.23631, 0, D.23630);
  <D.23637>:
  <D.23635>:
  <D.23632>:
}


process_other_slots (struct MonoCompile * cfg)
{
  void * D.23638;
  long int D.23639;
  unsigned int D.23640;
  int D.23641;
  int D.23642;
  int D.23643;
  int D.23644;
  int D.23645;
  unsigned int D.23646;
  const char * iftmp.12;
  int D.23655;
  int D.23656;
  int D.23657;
  struct MonoCompileGC * gcfg;
  struct GSList * l;

  gcfg = cfg->gc_info;
  l = gcfg->stack_slots_from_cfa;
  goto <D.22988>;
  <D.22987>:
  {
    guint data;
    int cfa_slot;
    GCSlotType type;
    int slot;

    D.23638 = l->data;
    D.23639 = (long int) D.23638;
    data = (guint) D.23639;
    D.23640 = data >> 16;
    cfa_slot = (int) D.23640;
    type = data & 255;
    D.23641 = cfg->cfa_offset;
    D.23642 = D.23641 / 8;
    D.23643 = D.23642 - cfa_slot;
    D.23644 = gcfg->min_offset;
    D.23645 = D.23644 / -8;
    slot = D.23643 + D.23645;
    set_slot_everywhere (gcfg, slot, type);
    D.23646 = cfg->verbose_level;
    if (D.23646 > 1) goto <D.23647>; else goto <D.23648>;
    <D.23647>:
    {
      int fp_offset;

      fp_offset = slot_to_fp_offset (cfg, slot);
      if (type == 0) goto <D.23649>; else goto <D.23650>;
      <D.23649>:
      if (fp_offset >= 0) goto <D.23652>; else goto <D.23653>;
      <D.23652>:
      iftmp.12 = "";
      goto <D.23654>;
      <D.23653>:
      iftmp.12 = "-";
      <D.23654>:
      D.23655 = ABS_EXPR <fp_offset>;
      D.23656 = cfa_slot * 8;
      printf ("\tnoref slot at %s0x%x(fp) (slot = %d) (cfa - 0x%x)\n", iftmp.12, D.23655, slot, D.23656);
      <D.23650>:
    }
    <D.23648>:
  }
  l = l->next;
  <D.22988>:
  if (l != 0B) goto <D.22987>; else goto <D.22989>;
  <D.22989>:
  l = gcfg->stack_slots_from_fp;
  goto <D.22995>;
  <D.22994>:
  {
    gint data;
    int offset;
    GCSlotType type;
    int slot;

    D.23638 = l->data;
    D.23639 = (long int) D.23638;
    data = (gint) D.23639;
    offset = data >> 16;
    D.23657 = data & 255;
    type = (GCSlotType) D.23657;
    slot = fp_offset_to_slot (cfg, offset);
    set_slot_everywhere (gcfg, slot, type);
    D.23646 = cfg->verbose_level;
    if (D.23646 > 1) goto <D.23658>; else goto <D.23659>;
    <D.23658>:
    if (type == 1) goto <D.23660>; else goto <D.23661>;
    <D.23660>:
    printf ("\tref slot at fp+0x%x (slot = %d)\n", offset, slot);
    goto <D.23662>;
    <D.23661>:
    if (type == 0) goto <D.23663>; else goto <D.23664>;
    <D.23663>:
    printf ("\tnoref slot at 0x%x(fp) (slot = %d)\n", offset, slot);
    <D.23664>:
    <D.23662>:
    <D.23659>:
  }
  l = l->next;
  <D.22995>:
  if (l != 0B) goto <D.22994>; else goto <D.22996>;
  <D.22996>:
}


slot_to_fp_offset (struct MonoCompile * cfg, int slot)
{
  int D.23665;
  int D.23666;
  int D.23667;
  struct MonoCompileGC * gcfg;

  gcfg = cfg->gc_info;
  D.23666 = slot * 8;
  D.23667 = gcfg->min_offset;
  D.23665 = D.23666 + D.23667;
  return D.23665;
}


process_param_area_slots (struct MonoCompile * cfg)
{
  unsigned int D.23669;
  unsigned int D.23670;
  struct MonoMemPool * D.23673;
  int D.23674;
  long unsigned int D.23675;
  unsigned int D.23676;
  unsigned int D.23677;
  struct GCCallSite * * D.23678;
  long unsigned int D.23679;
  long unsigned int D.23680;
  struct GCCallSite * * D.23681;
  long int D.23682;
  int D.23683;
  struct MonoGenericSharingContext * D.23686;
  int D.23687;
  int iftmp.13;
  int D.23693;
  _Bool D.23695;
  long int D.23696;
  long int D.23697;
  long unsigned int D.23700;
  long unsigned int D.23701;
  gboolean * D.23702;
  long unsigned int D.23703;
  unsigned int D.23704;
  long unsigned int D.23705;
  int D.23706;
  long unsigned int D.23707;
  gboolean * D.23708;
  int D.23709;
  struct MonoCompileGC * gcfg;
  int cindex;
  int i;
  gboolean * is_param;

  gcfg = cfg->gc_info;
  D.23669 = cfg->flags;
  D.23670 = D.23669 & 1;
  if (D.23670 != 0) goto <D.23671>; else goto <D.23672>;
  <D.23671>:
  return;
  <D.23672>:
  D.23673 = cfg->mempool;
  D.23674 = gcfg->nslots;
  D.23675 = (long unsigned int) D.23674;
  D.23676 = (unsigned int) D.23675;
  D.23677 = D.23676 * 4;
  is_param = mono_mempool_alloc0 (D.23673, D.23677);
  cindex = 0;
  goto <D.23099>;
  <D.23098>:
  {
    struct GCCallSite * callsite;
    struct GSList * l;

    D.23678 = gcfg->callsites;
    D.23679 = (long unsigned int) cindex;
    D.23680 = D.23679 * 8;
    D.23681 = D.23678 + D.23680;
    callsite = *D.23681;
    l = callsite->param_slots;
    goto <D.23096>;
    <D.23095>:
    {
      struct MonoInst * def;
      struct MonoType * t;
      int sp_offset;
      int fp_offset;
      int slot;
      guint32 align;
      guint32 size;

      try
        {
          def = l->data;
          t = def->data.op[1].vtype;
          D.23682 = def->data.op[0].const_val;
          sp_offset = (int) D.23682;
          fp_offset = sp_offset_to_fp_offset (cfg, sp_offset);
          slot = fp_offset_to_slot (cfg, fp_offset);
          D.23683 = mono_type_is_struct (t);
          if (D.23683 != 0) goto <D.23684>; else goto <D.23685>;
          <D.23684>:
          D.23686 = cfg->generic_sharing_context;
          D.23687 = mini_type_stack_size_full (D.23686, t, &align, 0);
          size = (guint32) D.23687;
          goto <D.23688>;
          <D.23685>:
          size = 8;
          <D.23688>:
          i = 0;
          goto <D.23093>;
          <D.23092>:
          D.23693 = slot + i;
          if (D.23693 < 0) goto <D.23690>; else goto <D.23694>;
          <D.23694>:
          D.23693 = slot + i;
          D.23674 = gcfg->nslots;
          if (D.23693 >= D.23674) goto <D.23690>; else goto <D.23691>;
          <D.23690>:
          iftmp.13 = 1;
          goto <D.23692>;
          <D.23691>:
          iftmp.13 = 0;
          <D.23692>:
          D.23695 = iftmp.13 != 0;
          D.23696 = (long int) D.23695;
          D.23697 = __builtin_expect (D.23696, 0);
          if (D.23697 != 0) goto <D.23698>; else goto <D.23699>;
          <D.23698>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1913, "slot + i >= 0 && slot + i < gcfg->nslots");
          <D.23699>:
          D.23693 = slot + i;
          D.23700 = (long unsigned int) D.23693;
          D.23701 = D.23700 * 4;
          D.23702 = is_param + D.23701;
          *D.23702 = 1;
          i = i + 1;
          <D.23093>:
          D.23703 = (long unsigned int) i;
          D.23704 = size / 8;
          D.23705 = (long unsigned int) D.23704;
          if (D.23703 < D.23705) goto <D.23092>; else goto <D.23094>;
          <D.23094>:
        }
      finally
        {
          align = {CLOBBER};
        }
    }
    l = l->next;
    <D.23096>:
    if (l != 0B) goto <D.23095>; else goto <D.23097>;
    <D.23097>:
  }
  cindex = cindex + 1;
  <D.23099>:
  D.23706 = gcfg->ncallsites;
  if (D.23706 > cindex) goto <D.23098>; else goto <D.23100>;
  <D.23100>:
  i = 0;
  goto <D.23102>;
  <D.23101>:
  D.23703 = (long unsigned int) i;
  D.23707 = D.23703 * 4;
  D.23708 = is_param + D.23707;
  D.23709 = *D.23708;
  if (D.23709 != 0) goto <D.23710>; else goto <D.23711>;
  <D.23710>:
  set_slot_everywhere (gcfg, i, 0);
  <D.23711>:
  i = i + 1;
  <D.23102>:
  D.23674 = gcfg->nslots;
  if (D.23674 > i) goto <D.23101>; else goto <D.23103>;
  <D.23103>:
}


sp_offset_to_fp_offset (struct MonoCompile * cfg, int sp_offset)
{
  int D.23713;

  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-gc.c", 1871);
  D.23713 = -1;
  return D.23713;
}


process_variables (struct MonoCompile * cfg)
{
  struct MonoMethod * D.23715;
  int D.23716;
  int D.23717;
  int D.23718;
  unsigned int D.23719;
  long unsigned int D.23720;
  long unsigned int D.23721;
  struct MonoBasicBlock * D.23722;
  short unsigned int D.23723;
  long int D.23726;
  long unsigned int D.23727;
  long unsigned int D.23728;
  int * D.23729;
  int D.23730;
  int D.23733;
  _Bool D.23734;
  long int D.23735;
  long int D.23736;
  struct MonoInst * * D.23739;
  long unsigned int D.23740;
  long unsigned int D.23741;
  struct MonoInst * * D.23742;
  unsigned int D.23743;
  unsigned int i.14;
  _Bool D.23745;
  struct MonoInst * D.23746;
  short unsigned int D.23751;
  int D.23753;
  struct MonoMethodVar * D.23754;
  long unsigned int D.23755;
  long unsigned int D.23756;
  long unsigned int D.23757;
  struct MonoInst * * D.23760;
  struct MonoInst * D.23761;
  struct MonoClass * D.23764;
  long unsigned int D.23765;
  long unsigned int D.23766;
  <unnamed-unsigned:1> D.23769;
  _Bool D.23772;
  long int D.23773;
  long int D.23774;
  int D.23780;
  _Bool D.23781;
  struct GCCallSite * * D.23785;
  long unsigned int D.23786;
  long unsigned int D.23787;
  struct GCCallSite * * D.23788;
  struct GCCallSite * D.23789;
  guint8 * D.23790;
  int D.23791;
  sizetype D.23792;
  guint8 * D.23793;
  unsigned char D.23794;
  int D.23795;
  int D.23796;
  int D.23797;
  int D.23798;
  int D.23801;
  unsigned int D.23802;
  const char * D.23805;
  const char * iftmp.15;
  const char * D.23810;
  int D.23811;
  long int D.23814;
  unsigned long D.23815;
  unsigned long D.23816;
  int D.23819;
  int D.23820;
  unsigned char D.23823;
  int D.23824;
  int D.23825;
  int pos.16;
  const char * D.23831;
  int D.23832;
  struct MonoType * D.23833;
  char * D.23834;
  int D.23835;
  int D.23838;
  struct MonoClass * D.23841;
  long int D.23843;
  long int D.23844;
  long int D.23845;
  const char * D.23848;
  int D.23849;
  const char * D.23850;
  unsigned int D.23851;
  int D.23852;
  unsigned int D.23853;
  unsigned int D.23854;
  int D.23855;
  int D.23856;
  unsigned int size_in_slots.17;
  unsigned int D.23858;
  char * D.23859;
  long unsigned int D.23860;
  long unsigned int D.23861;
  unsigned int j.18;
  unsigned int D.23867;
  int D.23868;
  long unsigned int D.23873;
  long unsigned int D.23874;
  int * D.23875;
  int D.23876;
  int D.23883;
  long unsigned int D.23886;
  long unsigned int D.23887;
  long unsigned int D.23888;
  gsize * D.23889;
  long unsigned int D.23890;
  unsigned int j.19;
  unsigned int D.23892;
  long unsigned int D.23893;
  long unsigned int D.23894;
  unsigned int D.23897;
  int D.23898;
  GCSlotType iftmp.20;
  int numbits.21;
  const char * iftmp.22;
  int D.23912;
  unsigned int D.23913;
  unsigned int D.23914;
  int D.23915;
  long int D.23923;
  int D.23925;
  long int D.23926;
  long unsigned int D.23927;
  long unsigned int D.23928;
  const char * iftmp.23;
  int iftmp.24;
  char * D.23946;
  int D.23947;
  const char * iftmp.25;
  const char * iftmp.26;
  int iftmp.27;
  char * D.23964;
  unsigned int D.23967;
  int D.23968;
  const char * iftmp.28;
  int iftmp.29;
  unsigned int D.23978;
  int D.23979;
  char * D.23981;
  int D.23982;
  unsigned int D.23992;
  int D.23993;
  const char * iftmp.30;
  int iftmp.31;
  char * D.24005;
  const char * iftmp.32;
  const char * iftmp.33;
  int iftmp.34;
  char * D.24025;
  unsigned int D.24026;
  struct MonoCompileGC * gcfg;
  struct MonoMethodSignature * sig;
  int i;
  int locals_min_slot;
  int locals_max_slot;
  int cindex;
  struct MonoBasicBlock * bb;
  struct MonoInst * tmp;
  int * pc_offsets;
  int locals_min_offset;
  int locals_max_offset;

  gcfg = cfg->gc_info;
  D.23715 = cfg->method;
  sig = mono_method_signature (D.23715);
  locals_min_offset = gcfg->locals_min_offset;
  locals_max_offset = gcfg->locals_max_offset;
  D.23716 = gcfg->min_offset;
  D.23717 = locals_min_offset - D.23716;
  locals_min_slot = D.23717 / 8;
  D.23716 = gcfg->min_offset;
  D.23718 = locals_max_offset - D.23716;
  locals_max_slot = D.23718 / 8;
  i = locals_min_slot;
  goto <D.23023>;
  <D.23022>:
  set_slot_everywhere (gcfg, i, 0);
  i = i + 1;
  <D.23023>:
  if (i < locals_max_slot) goto <D.23022>; else goto <D.23024>;
  <D.23024>:
  D.23719 = cfg->next_vreg;
  D.23720 = (long unsigned int) D.23719;
  D.23721 = D.23720 * 4;
  pc_offsets = monoeg_malloc0 (D.23721);
  D.23722 = cfg->bb_entry;
  bb = D.23722->next_bb;
  tmp = bb->code;
  goto <D.23027>;
  <D.23026>:
  D.23723 = tmp->opcode;
  if (D.23723 == 838) goto <D.23724>; else goto <D.23725>;
  <D.23724>:
  {
    int vreg;

    D.23726 = tmp->data.op[1].const_val;
    vreg = (int) D.23726;
    D.23727 = (long unsigned int) vreg;
    D.23728 = D.23727 * 4;
    D.23729 = pc_offsets + D.23728;
    D.23730 = *D.23729;
    if (D.23730 == 0) goto <D.23731>; else goto <D.23732>;
    <D.23731>:
    D.23733 = tmp->backend.pc_offset;
    D.23734 = D.23733 <= 0;
    D.23735 = (long int) D.23734;
    D.23736 = __builtin_expect (D.23735, 0);
    if (D.23736 != 0) goto <D.23737>; else goto <D.23738>;
    <D.23737>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1613, "tmp->backend.pc_offset > 0");
    <D.23738>:
    D.23727 = (long unsigned int) vreg;
    D.23728 = D.23727 * 4;
    D.23729 = pc_offsets + D.23728;
    D.23733 = tmp->backend.pc_offset;
    *D.23729 = D.23733;
    <D.23732>:
  }
  <D.23725>:
  tmp = tmp->next;
  <D.23027>:
  if (tmp != 0B) goto <D.23026>; else goto <D.23028>;
  <D.23028>:
  i = 0;
  goto <D.23070>;
  <D.23069>:
  {
    struct MonoInst * ins;
    struct MonoType * t;
    struct MonoMethodVar * vmv;
    guint32 pos;
    gboolean byref;
    gboolean is_this;
    gboolean is_arg;

    D.23739 = cfg->varinfo;
    D.23740 = (long unsigned int) i;
    D.23741 = D.23740 * 8;
    D.23742 = D.23739 + D.23741;
    ins = *D.23742;
    t = ins->data.op[1].vtype;
    is_this = 0;
    D.23743 = cfg->locals_start;
    i.14 = (unsigned int) i;
    D.23745 = D.23743 > i.14;
    is_arg = (gboolean) D.23745;
    D.23746 = cfg->ret;
    if (D.23746 == ins) goto <D.23747>; else goto <D.23748>;
    <D.23747>:
    D.23751 = ins->opcode;
    if (D.23751 != 367) goto <D.23749>; else goto <D.23752>;
    <D.23752>:
    D.23753 = mono_type_is_struct (t);
    if (D.23753 == 0) goto <D.23749>; else goto <D.23750>;
    <D.23749>:
    // predicted unlikely by continue predictor.
    goto <D.23036>;
    <D.23750>:
    <D.23748>:
    D.23754 = cfg->vars;
    D.23740 = (long unsigned int) i;
    D.23755 = D.23740 * 80;
    vmv = D.23754 + D.23755;
    D.23756 = BIT_FIELD_REF <*sig, 64, 64>;
    D.23757 = D.23756 & 512;
    if (D.23757 != 0) goto <D.23758>; else goto <D.23759>;
    <D.23758>:
    D.23760 = cfg->args;
    D.23761 = *D.23760;
    if (D.23761 == ins) goto <D.23762>; else goto <D.23763>;
    <D.23762>:
    D.23715 = cfg->method;
    D.23764 = D.23715->klass;
    D.23765 = BIT_FIELD_REF <*D.23764, 64, 256>;
    D.23766 = D.23765 & 1152921504606846976;
    if (D.23766 == 0) goto <D.23767>; else goto <D.23768>;
    <D.23767>:
    D.23715 = cfg->method;
    D.23764 = D.23715->klass;
    t = &D.23764->byval_arg;
    is_this = 1;
    <D.23768>:
    <D.23763>:
    <D.23759>:
    D.23769 = t->byref;
    byref = (gboolean) D.23769;
    D.23751 = ins->opcode;
    if (D.23751 == 366) goto <D.23770>; else goto <D.23771>;
    <D.23770>:
    {
      int hreg;
      GCSlotType slot_type;

      t = mini_type_get_underlying_type (0B, t);
      hreg = ins->dreg;
      D.23772 = hreg > 15;
      D.23773 = (long int) D.23772;
      D.23774 = __builtin_expect (D.23773, 0);
      if (D.23774 != 0) goto <D.23775>; else goto <D.23776>;
      <D.23775>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1653, "hreg < MONO_MAX_IREGS");
      <D.23776>:
      if (byref != 0) goto <D.23777>; else goto <D.23778>;
      <D.23777>:
      slot_type = 2;
      goto <D.23779>;
      <D.23778>:
      D.23780 = mini_type_is_reference (cfg, t);
      D.23781 = D.23780 != 0;
      slot_type = (GCSlotType) D.23781;
      <D.23779>:
      if (slot_type == 2) goto <D.23782>; else goto <D.23783>;
      <D.23782>:
      set_reg_slot_everywhere (gcfg, hreg, slot_type);
      goto <D.23784>;
      <D.23783>:
      cindex = 0;
      goto <D.23040>;
      <D.23039>:
      D.23785 = gcfg->callsites;
      D.23786 = (long unsigned int) cindex;
      D.23787 = D.23786 * 8;
      D.23788 = D.23785 + D.23787;
      D.23789 = *D.23788;
      D.23790 = D.23789->liveness;
      D.23791 = i / 8;
      D.23792 = (sizetype) D.23791;
      D.23793 = D.23790 + D.23792;
      D.23794 = *D.23793;
      D.23795 = (int) D.23794;
      D.23796 = i % 8;
      D.23797 = D.23795 >> D.23796;
      D.23798 = D.23797 & 1;
      if (D.23798 != 0) goto <D.23799>; else goto <D.23800>;
      <D.23799>:
      set_reg_slot (gcfg, hreg, cindex, slot_type);
      <D.23800>:
      cindex = cindex + 1;
      <D.23040>:
      D.23801 = gcfg->ncallsites;
      if (D.23801 > cindex) goto <D.23039>; else goto <D.23041>;
      <D.23041>:
      <D.23784>:
      D.23802 = cfg->verbose_level;
      if (D.23802 > 1) goto <D.23803>; else goto <D.23804>;
      <D.23803>:
      D.23805 = slot_type_to_string (slot_type);
      if (is_arg != 0) goto <D.23807>; else goto <D.23808>;
      <D.23807>:
      iftmp.15 = "arg ";
      goto <D.23809>;
      <D.23808>:
      iftmp.15 = "";
      <D.23809>:
      D.23810 = mono_arch_regname (hreg);
      D.23811 = vmv->vreg;
      printf ("\t%s %sreg %s(R%d)\n", D.23805, iftmp.15, D.23810, D.23811);
      <D.23804>:
      // predicted unlikely by continue predictor.
      goto <D.23036>;
    }
    <D.23771>:
    D.23751 = ins->opcode;
    if (D.23751 != 367) goto <D.23812>; else goto <D.23813>;
    <D.23812>:
    // predicted unlikely by continue predictor.
    goto <D.23036>;
    <D.23813>:
    D.23814 = ins->data.op[0].const_val;
    D.23815 = (unsigned long) D.23814;
    D.23816 = D.23815 & 7;
    if (D.23816 != 0) goto <D.23817>; else goto <D.23818>;
    <D.23817>:
    // predicted unlikely by continue predictor.
    goto <D.23036>;
    <D.23818>:
    D.23814 = ins->data.op[0].const_val;
    D.23819 = (int) D.23814;
    D.23820 = fp_offset_to_slot (cfg, D.23819);
    pos = (guint32) D.23820;
    if (is_arg != 0) goto <D.23821>; else goto <D.23822>;
    <D.23821>:
    D.23823 = ins->flags;
    D.23824 = (int) D.23823;
    D.23825 = D.23824 & 2;
    if (D.23825 != 0) goto <D.23826>; else goto <D.23827>;
    <D.23826>:
    pos.16 = (int) pos;
    set_slot_everywhere (gcfg, pos.16, 0);
    D.23802 = cfg->verbose_level;
    if (D.23802 > 1) goto <D.23829>; else goto <D.23830>;
    <D.23829>:
    D.23814 = ins->data.op[0].const_val;
    D.23819 = (int) D.23814;
    D.23831 = get_offset_sign (D.23819);
    D.23814 = ins->data.op[0].const_val;
    D.23819 = (int) D.23814;
    D.23832 = get_offset_val (D.23819);
    D.23833 = ins->data.op[1].vtype;
    D.23834 = mono_type_full_name (D.23833);
    printf ("\tdead arg at fp%s0x%x (slot = %d): %s\n", D.23831, D.23832, pos, D.23834);
    <D.23830>:
    // predicted unlikely by continue predictor.
    goto <D.23036>;
    <D.23827>:
    <D.23822>:
    D.23835 = mono_type_is_struct (t);
    if (D.23835 != 0) goto <D.23836>; else goto <D.23837>;
    <D.23836>:
    {
      int numbits;
      int j;
      gsize * bitmap;
      gboolean pin;
      int size;
      int size_in_slots;

      try
        {
          numbits = 0;
          bitmap = 0B;
          pin = 0;
          D.23838 = ins->backend.is_pinvoke;
          if (D.23838 != 0) goto <D.23839>; else goto <D.23840>;
          <D.23839>:
          D.23841 = ins->klass;
          size = mono_class_native_size (D.23841, 0B);
          goto <D.23842>;
          <D.23840>:
          D.23841 = ins->klass;
          size = mono_class_value_size (D.23841, 0B);
          <D.23842>:
          D.23843 = (long int) size;
          D.23844 = D.23843 + 7;
          D.23845 = D.23844 >> 3;
          size_in_slots = (int) D.23845;
          D.23802 = cfg->verbose_level;
          if (D.23802 > 1) goto <D.23846>; else goto <D.23847>;
          <D.23846>:
          D.23811 = vmv->vreg;
          D.23814 = ins->data.op[0].const_val;
          D.23819 = (int) D.23814;
          D.23848 = get_offset_sign (D.23819);
          D.23814 = ins->data.op[0].const_val;
          D.23819 = (int) D.23814;
          D.23849 = get_offset_val (D.23819);
          D.23814 = ins->data.op[0].const_val;
          D.23819 = (int) D.23814;
          D.23850 = get_offset_sign (D.23819);
          D.23814 = ins->data.op[0].const_val;
          D.23851 = (unsigned int) D.23814;
          D.23852 = size_in_slots * 8;
          D.23853 = (unsigned int) D.23852;
          D.23854 = D.23851 + D.23853;
          D.23855 = (int) D.23854;
          D.23856 = get_offset_val (D.23855);
          size_in_slots.17 = (unsigned int) size_in_slots;
          D.23858 = pos + size_in_slots.17;
          D.23833 = ins->data.op[1].vtype;
          D.23859 = mono_type_full_name (D.23833);
          printf ("\tvtype R%d at %s0x%x(fp)-%s0x%x(fp) (slot %d-%d): %s\n", D.23811, D.23848, D.23849, D.23850, D.23856, pos, D.23858, D.23859);
          <D.23847>:
          D.23841 = ins->klass;
          D.23860 = BIT_FIELD_REF <*D.23841, 64, 256>;
          D.23861 = D.23860 & 68719476736;
          if (D.23861 == 0) goto <D.23862>; else goto <D.23863>;
          <D.23862>:
          if (is_arg != 0) goto <D.23864>; else goto <D.23865>;
          <D.23864>:
          j = 0;
          goto <D.23049>;
          <D.23048>:
          j.18 = (unsigned int) j;
          D.23867 = pos + j.18;
          D.23868 = (int) D.23867;
          set_slot_everywhere (gcfg, D.23868, 0);
          j = j + 1;
          <D.23049>:
          if (j < size_in_slots) goto <D.23048>; else goto <D.23050>;
          <D.23050>:
          <D.23865>:
          // predicted unlikely by continue predictor.
          goto <D.23036>;
          <D.23863>:
          bitmap = get_vtype_bitmap (t, &numbits);
          if (bitmap == 0B) goto <D.23869>; else goto <D.23870>;
          <D.23869>:
          pin = 1;
          <D.23870>:
          if (is_arg == 0) goto <D.23871>; else goto <D.23872>;
          <D.23871>:
          D.23811 = vmv->vreg;
          D.23873 = (long unsigned int) D.23811;
          D.23874 = D.23873 * 4;
          D.23875 = pc_offsets + D.23874;
          D.23876 = *D.23875;
          if (D.23876 == 0) goto <D.23877>; else goto <D.23878>;
          <D.23877>:
          pin = 1;
          <D.23878>:
          D.23838 = ins->backend.is_pinvoke;
          if (D.23838 != 0) goto <D.23879>; else goto <D.23880>;
          <D.23879>:
          pin = 1;
          <D.23880>:
          <D.23872>:
          if (bitmap != 0B) goto <D.23881>; else goto <D.23882>;
          <D.23881>:
          cindex = 0;
          goto <D.23055>;
          <D.23054>:
          D.23785 = gcfg->callsites;
          D.23786 = (long unsigned int) cindex;
          D.23787 = D.23786 * 8;
          D.23788 = D.23785 + D.23787;
          D.23789 = *D.23788;
          D.23883 = D.23789->pc_offset;
          D.23811 = vmv->vreg;
          D.23873 = (long unsigned int) D.23811;
          D.23874 = D.23873 * 4;
          D.23875 = pc_offsets + D.23874;
          D.23876 = *D.23875;
          if (D.23883 > D.23876) goto <D.23884>; else goto <D.23885>;
          <D.23884>:
          j = 0;
          goto <D.23052>;
          <D.23051>:
          D.23886 = (long unsigned int) j;
          D.23887 = D.23886 / 64;
          D.23888 = D.23887 * 8;
          D.23889 = bitmap + D.23888;
          D.23890 = *D.23889;
          j.19 = (unsigned int) j;
          D.23892 = j.19 & 63;
          D.23893 = D.23890 >> D.23892;
          D.23894 = D.23893 & 1;
          if (D.23894 != 0) goto <D.23895>; else goto <D.23896>;
          <D.23895>:
          j.18 = (unsigned int) j;
          D.23867 = pos + j.18;
          D.23897 = D.23867 + 4294967294;
          D.23898 = (int) D.23897;
          if (pin != 0) goto <D.23900>; else goto <D.23901>;
          <D.23900>:
          iftmp.20 = 2;
          goto <D.23902>;
          <D.23901>:
          iftmp.20 = 1;
          <D.23902>:
          set_slot (gcfg, D.23898, cindex, iftmp.20);
          <D.23896>:
          j = j + 1;
          <D.23052>:
          numbits.21 = numbits;
          if (j < numbits.21) goto <D.23051>; else goto <D.23053>;
          <D.23053>:
          <D.23885>:
          cindex = cindex + 1;
          <D.23055>:
          D.23801 = gcfg->ncallsites;
          if (D.23801 > cindex) goto <D.23054>; else goto <D.23056>;
          <D.23056>:
          D.23802 = cfg->verbose_level;
          if (D.23802 > 1) goto <D.23904>; else goto <D.23905>;
          <D.23904>:
          j = 0;
          goto <D.23058>;
          <D.23057>:
          D.23886 = (long unsigned int) j;
          D.23887 = D.23886 / 64;
          D.23888 = D.23887 * 8;
          D.23889 = bitmap + D.23888;
          D.23890 = *D.23889;
          j.19 = (unsigned int) j;
          D.23892 = j.19 & 63;
          D.23893 = D.23890 >> D.23892;
          D.23894 = D.23893 & 1;
          if (D.23894 != 0) goto <D.23906>; else goto <D.23907>;
          <D.23906>:
          if (pin != 0) goto <D.23909>; else goto <D.23910>;
          <D.23909>:
          iftmp.22 = "pin";
          goto <D.23911>;
          <D.23910>:
          iftmp.22 = "ref";
          <D.23911>:
          D.23814 = ins->data.op[0].const_val;
          D.23851 = (unsigned int) D.23814;
          D.23912 = j * 8;
          D.23913 = (unsigned int) D.23912;
          D.23914 = D.23851 + D.23913;
          D.23915 = (int) D.23914;
          j.18 = (unsigned int) j;
          D.23867 = pos + j.18;
          D.23897 = D.23867 + 4294967294;
          D.23898 = (int) D.23897;
          printf ("\t\t%s slot at 0x%x(fp) (slot = %d)\n", iftmp.22, D.23915, D.23898);
          <D.23907>:
          j = j + 1;
          <D.23058>:
          numbits.21 = numbits;
          if (j < numbits.21) goto <D.23057>; else goto <D.23059>;
          <D.23059>:
          <D.23905>:
          goto <D.23916>;
          <D.23882>:
          D.23802 = cfg->verbose_level;
          if (D.23802 > 1) goto <D.23917>; else goto <D.23918>;
          <D.23917>:
          printf ("\t\tpinned\n");
          <D.23918>:
          j = 0;
          goto <D.23061>;
          <D.23060>:
          j.18 = (unsigned int) j;
          D.23867 = pos + j.18;
          D.23868 = (int) D.23867;
          set_slot_everywhere (gcfg, D.23868, 2);
          j = j + 1;
          <D.23061>:
          if (j < size_in_slots) goto <D.23060>; else goto <D.23062>;
          <D.23062>:
          <D.23916>:
          monoeg_g_free (bitmap);
          // predicted unlikely by continue predictor.
          goto <D.23036>;
        }
      finally
        {
          numbits = {CLOBBER};
        }
    }
    <D.23837>:
    if (is_arg == 0) goto <D.23921>; else goto <D.23922>;
    <D.23921>:
    D.23814 = ins->data.op[0].const_val;
    D.23716 = gcfg->min_offset;
    D.23923 = (long int) D.23716;
    if (D.23814 < D.23923) goto <D.23919>; else goto <D.23924>;
    <D.23924>:
    D.23814 = ins->data.op[0].const_val;
    D.23925 = gcfg->max_offset;
    D.23926 = (long int) D.23925;
    if (D.23814 >= D.23926) goto <D.23919>; else goto <D.23920>;
    <D.23919>:
    // predicted unlikely by continue predictor.
    goto <D.23036>;
    <D.23920>:
    <D.23922>:
    D.23927 = BIT_FIELD_REF <*t, 64, 64>;
    D.23928 = D.23927 & 8589934592;
    if (D.23928 != 0) goto <D.23929>; else goto <D.23930>;
    <D.23929>:
    if (is_arg != 0) goto <D.23931>; else goto <D.23932>;
    <D.23931>:
    pos.16 = (int) pos;
    set_slot_everywhere (gcfg, pos.16, 2);
    goto <D.23933>;
    <D.23932>:
    cindex = 0;
    goto <D.23064>;
    <D.23063>:
    D.23785 = gcfg->callsites;
    D.23786 = (long unsigned int) cindex;
    D.23787 = D.23786 * 8;
    D.23788 = D.23785 + D.23787;
    D.23789 = *D.23788;
    D.23790 = D.23789->liveness;
    D.23791 = i / 8;
    D.23792 = (sizetype) D.23791;
    D.23793 = D.23790 + D.23792;
    D.23794 = *D.23793;
    D.23795 = (int) D.23794;
    D.23796 = i % 8;
    D.23797 = D.23795 >> D.23796;
    D.23798 = D.23797 & 1;
    if (D.23798 != 0) goto <D.23934>; else goto <D.23935>;
    <D.23934>:
    pos.16 = (int) pos;
    set_slot (gcfg, pos.16, cindex, 2);
    <D.23935>:
    cindex = cindex + 1;
    <D.23064>:
    D.23801 = gcfg->ncallsites;
    if (D.23801 > cindex) goto <D.23063>; else goto <D.23065>;
    <D.23065>:
    <D.23933>:
    D.23802 = cfg->verbose_level;
    if (D.23802 > 1) goto <D.23936>; else goto <D.23937>;
    <D.23936>:
    D.23814 = ins->data.op[0].const_val;
    if (D.23814 < 0) goto <D.23939>; else goto <D.23940>;
    <D.23939>:
    iftmp.23 = "-";
    goto <D.23941>;
    <D.23940>:
    iftmp.23 = "";
    <D.23941>:
    D.23814 = ins->data.op[0].const_val;
    if (D.23814 < 0) goto <D.23943>; else goto <D.23944>;
    <D.23943>:
    D.23814 = ins->data.op[0].const_val;
    D.23819 = (int) D.23814;
    iftmp.24 = -D.23819;
    goto <D.23945>;
    <D.23944>:
    D.23814 = ins->data.op[0].const_val;
    iftmp.24 = (int) D.23814;
    <D.23945>:
    D.23811 = vmv->vreg;
    D.23833 = ins->data.op[1].vtype;
    D.23946 = mono_type_full_name (D.23833);
    printf ("\tbyref at %s0x%x(fp) (R%d, slot = %d): %s\n", iftmp.23, iftmp.24, D.23811, pos, D.23946);
    <D.23937>:
    // predicted unlikely by continue predictor.
    goto <D.23036>;
    <D.23930>:
    t = mini_type_get_underlying_type (0B, t);
    D.23947 = mini_type_is_reference (cfg, t);
    if (D.23947 == 0) goto <D.23948>; else goto <D.23949>;
    <D.23948>:
    pos.16 = (int) pos;
    set_slot_everywhere (gcfg, pos.16, 0);
    D.23802 = cfg->verbose_level;
    if (D.23802 > 1) goto <D.23950>; else goto <D.23951>;
    <D.23950>:
    if (is_arg != 0) goto <D.23953>; else goto <D.23954>;
    <D.23953>:
    iftmp.25 = " arg";
    goto <D.23955>;
    <D.23954>:
    iftmp.25 = "";
    <D.23955>:
    D.23814 = ins->data.op[0].const_val;
    if (D.23814 < 0) goto <D.23957>; else goto <D.23958>;
    <D.23957>:
    iftmp.26 = "-";
    goto <D.23959>;
    <D.23958>:
    iftmp.26 = "";
    <D.23959>:
    D.23814 = ins->data.op[0].const_val;
    if (D.23814 < 0) goto <D.23961>; else goto <D.23962>;
    <D.23961>:
    D.23814 = ins->data.op[0].const_val;
    D.23819 = (int) D.23814;
    iftmp.27 = -D.23819;
    goto <D.23963>;
    <D.23962>:
    D.23814 = ins->data.op[0].const_val;
    iftmp.27 = (int) D.23814;
    <D.23963>:
    D.23811 = vmv->vreg;
    D.23833 = ins->data.op[1].vtype;
    D.23964 = mono_type_full_name (D.23833);
    printf ("\tnoref%s at %s0x%x(fp) (R%d, slot = %d): %s\n", iftmp.25, iftmp.26, iftmp.27, D.23811, pos, D.23964);
    <D.23951>:
    if (0 != 0) goto <D.23965>; else goto <D.23966>;
    <D.23965>:
    D.23967 = pos + 1;
    D.23968 = (int) D.23967;
    set_slot_everywhere (gcfg, D.23968, 0);
    D.23802 = cfg->verbose_level;
    if (D.23802 > 1) goto <D.23969>; else goto <D.23970>;
    <D.23969>:
    D.23814 = ins->data.op[0].const_val;
    if (D.23814 < 0) goto <D.23972>; else goto <D.23973>;
    <D.23972>:
    iftmp.28 = "-";
    goto <D.23974>;
    <D.23973>:
    iftmp.28 = "";
    <D.23974>:
    D.23814 = ins->data.op[0].const_val;
    if (D.23814 < 0) goto <D.23976>; else goto <D.23977>;
    <D.23976>:
    D.23814 = ins->data.op[0].const_val;
    D.23851 = (unsigned int) D.23814;
    D.23978 = D.23851 + 4;
    D.23979 = (int) D.23978;
    iftmp.29 = -D.23979;
    goto <D.23980>;
    <D.23977>:
    D.23814 = ins->data.op[0].const_val;
    D.23819 = (int) D.23814;
    iftmp.29 = D.23819 + 4;
    <D.23980>:
    D.23811 = vmv->vreg;
    D.23967 = pos + 1;
    D.23833 = ins->data.op[1].vtype;
    D.23981 = mono_type_full_name (D.23833);
    printf ("\tnoref at %s0x%x(fp) (R%d, slot = %d): %s\n", iftmp.28, iftmp.29, D.23811, D.23967, D.23981);
    <D.23970>:
    <D.23966>:
    // predicted unlikely by continue predictor.
    goto <D.23036>;
    <D.23949>:
    D.23823 = ins->flags;
    D.23824 = (int) D.23823;
    D.23982 = D.23824 & 20;
    if (D.23982 != 0) goto <D.23983>; else goto <D.23984>;
    <D.23983>:
    if (is_this == 0) goto <D.23985>; else goto <D.23986>;
    <D.23985>:
    if (is_arg != 0) goto <D.23987>; else goto <D.23988>;
    <D.23987>:
    pos.16 = (int) pos;
    set_slot_everywhere (gcfg, pos.16, 1);
    goto <D.23989>;
    <D.23988>:
    D.23811 = vmv->vreg;
    D.23873 = (long unsigned int) D.23811;
    D.23874 = D.23873 * 4;
    D.23875 = pc_offsets + D.23874;
    D.23876 = *D.23875;
    if (D.23876 != 0) goto <D.23990>; else goto <D.23991>;
    <D.23990>:
    pos.16 = (int) pos;
    D.23811 = vmv->vreg;
    D.23873 = (long unsigned int) D.23811;
    D.23874 = D.23873 * 4;
    D.23875 = pc_offsets + D.23874;
    D.23876 = *D.23875;
    set_slot_in_range (gcfg, pos.16, 0, D.23876, 2);
    pos.16 = (int) pos;
    D.23811 = vmv->vreg;
    D.23873 = (long unsigned int) D.23811;
    D.23874 = D.23873 * 4;
    D.23875 = pc_offsets + D.23874;
    D.23876 = *D.23875;
    D.23992 = cfg->code_size;
    D.23993 = (int) D.23992;
    set_slot_in_range (gcfg, pos.16, D.23876, D.23993, 1);
    goto <D.23994>;
    <D.23991>:
    pos.16 = (int) pos;
    set_slot_everywhere (gcfg, pos.16, 2);
    <D.23994>:
    <D.23989>:
    D.23802 = cfg->verbose_level;
    if (D.23802 > 1) goto <D.23995>; else goto <D.23996>;
    <D.23995>:
    D.23814 = ins->data.op[0].const_val;
    if (D.23814 < 0) goto <D.23998>; else goto <D.23999>;
    <D.23998>:
    iftmp.30 = "-";
    goto <D.24000>;
    <D.23999>:
    iftmp.30 = "";
    <D.24000>:
    D.23814 = ins->data.op[0].const_val;
    if (D.23814 < 0) goto <D.24002>; else goto <D.24003>;
    <D.24002>:
    D.23814 = ins->data.op[0].const_val;
    D.23819 = (int) D.23814;
    iftmp.31 = -D.23819;
    goto <D.24004>;
    <D.24003>:
    D.23814 = ins->data.op[0].const_val;
    iftmp.31 = (int) D.23814;
    <D.24004>:
    D.23811 = vmv->vreg;
    D.23833 = ins->data.op[1].vtype;
    D.24005 = mono_type_full_name (D.23833);
    printf ("\tvolatile ref at %s0x%x(fp) (R%d, slot = %d): %s\n", iftmp.30, iftmp.31, D.23811, pos, D.24005);
    <D.23996>:
    // predicted unlikely by continue predictor.
    goto <D.23036>;
    <D.23986>:
    <D.23984>:
    if (is_arg != 0) goto <D.24006>; else goto <D.24007>;
    <D.24006>:
    pos.16 = (int) pos;
    set_slot_everywhere (gcfg, pos.16, 1);
    goto <D.24008>;
    <D.24007>:
    cindex = 0;
    goto <D.23067>;
    <D.23066>:
    D.23785 = gcfg->callsites;
    D.23786 = (long unsigned int) cindex;
    D.23787 = D.23786 * 8;
    D.23788 = D.23785 + D.23787;
    D.23789 = *D.23788;
    D.23790 = D.23789->liveness;
    D.23791 = i / 8;
    D.23792 = (sizetype) D.23791;
    D.23793 = D.23790 + D.23792;
    D.23794 = *D.23793;
    D.23795 = (int) D.23794;
    D.23796 = i % 8;
    D.23797 = D.23795 >> D.23796;
    D.23798 = D.23797 & 1;
    if (D.23798 != 0) goto <D.24009>; else goto <D.24010>;
    <D.24009>:
    pos.16 = (int) pos;
    set_slot (gcfg, pos.16, cindex, 1);
    <D.24010>:
    cindex = cindex + 1;
    <D.23067>:
    D.23801 = gcfg->ncallsites;
    if (D.23801 > cindex) goto <D.23066>; else goto <D.23068>;
    <D.23068>:
    <D.24008>:
    D.23802 = cfg->verbose_level;
    if (D.23802 > 1) goto <D.24011>; else goto <D.24012>;
    <D.24011>:
    if (is_arg != 0) goto <D.24014>; else goto <D.24015>;
    <D.24014>:
    iftmp.32 = " arg";
    goto <D.24016>;
    <D.24015>:
    iftmp.32 = "";
    <D.24016>:
    D.23814 = ins->data.op[0].const_val;
    if (D.23814 < 0) goto <D.24018>; else goto <D.24019>;
    <D.24018>:
    iftmp.33 = "-";
    goto <D.24020>;
    <D.24019>:
    iftmp.33 = "";
    <D.24020>:
    D.23814 = ins->data.op[0].const_val;
    if (D.23814 < 0) goto <D.24022>; else goto <D.24023>;
    <D.24022>:
    D.23814 = ins->data.op[0].const_val;
    D.23819 = (int) D.23814;
    iftmp.34 = -D.23819;
    goto <D.24024>;
    <D.24023>:
    D.23814 = ins->data.op[0].const_val;
    iftmp.34 = (int) D.23814;
    <D.24024>:
    D.23811 = vmv->vreg;
    D.23833 = ins->data.op[1].vtype;
    D.24025 = mono_type_full_name (D.23833);
    printf ("\tref%s at %s0x%x(fp) (R%d, slot = %d): %s\n", iftmp.32, iftmp.33, iftmp.34, D.23811, pos, D.24025);
    <D.24012>:
  }
  <D.23036>:
  i = i + 1;
  <D.23070>:
  D.24026 = cfg->num_varinfo;
  i.14 = (unsigned int) i;
  if (D.24026 > i.14) goto <D.23069>; else goto <D.23071>;
  <D.23071>:
  monoeg_g_free (pc_offsets);
}


get_offset_sign (int offset)
{
  const char * D.24028;
  const char * iftmp.35;

  if (offset < 0) goto <D.24030>; else goto <D.24031>;
  <D.24030>:
  iftmp.35 = "-";
  goto <D.24032>;
  <D.24031>:
  iftmp.35 = "+";
  <D.24032>:
  D.24028 = iftmp.35;
  return D.24028;
}


get_offset_val (int offset)
{
  int D.24034;

  D.24034 = ABS_EXPR <offset>;
  return D.24034;
}


get_vtype_bitmap (struct MonoType * t, int * numbits)
{
  struct MonoGenericContainer * D.24038;
  int D.24040;
  gsize * D.24041;
  void * D.24042;
  struct MonoClass * klass;

  klass = mono_class_from_mono_type (t);
  D.24038 = klass->generic_container;
  if (D.24038 != 0B) goto <D.24036>; else goto <D.24039>;
  <D.24039>:
  D.24040 = mono_class_is_open_constructed_type (t);
  if (D.24040 != 0) goto <D.24036>; else goto <D.24037>;
  <D.24036>:
  D.24041 = 0B;
  return D.24041;
  <D.24037>:
  mono_class_compute_gc_descriptor (klass);
  D.24042 = klass->gc_descr;
  D.24041 = mono_gc_get_bitmap_for_descr (D.24042, numbits);
  return D.24041;
}


process_finally_clauses (struct MonoCompile * cfg)
{
  struct MonoMethodHeader * D.24044;
  struct MonoExceptionClause * D.24045;
  long unsigned int D.24046;
  long unsigned int D.24047;
  unsigned int D.24048;
  <unnamed-unsigned:15> D.24051;
  int D.24052;
  unsigned int D.24055;
  long unsigned int D.24058;
  long unsigned int D.24059;
  struct GCCallSite * * D.24060;
  struct GCCallSite * D.24061;
  unsigned int D.24062;
  unsigned int D.24063;
  unsigned int D.24066;
  unsigned int D.24067;
  unsigned int D.24070;
  struct MonoCompileGC * gcfg;
  struct GCCallSite * * callsites;
  int ncallsites;
  gboolean has_finally;
  int i;
  int j;
  int nslots;
  int nregs;

  gcfg = cfg->gc_info;
  ncallsites = gcfg->ncallsites;
  nslots = gcfg->nslots;
  nregs = gcfg->nregs;
  callsites = gcfg->callsites;
  has_finally = 0;
  i = 0;
  goto <D.23117>;
  <D.23116>:
  {
    struct MonoExceptionClause * clause;

    D.24044 = cfg->header;
    D.24045 = D.24044->clauses;
    D.24046 = (long unsigned int) i;
    D.24047 = D.24046 * 32;
    clause = D.24045 + D.24047;
    D.24048 = clause->flags;
    if (D.24048 == 2) goto <D.24049>; else goto <D.24050>;
    <D.24049>:
    has_finally = 1;
    <D.24050>:
  }
  i = i + 1;
  <D.23117>:
  D.24044 = cfg->header;
  D.24051 = D.24044->num_clauses;
  D.24052 = (int) D.24051;
  if (D.24052 > i) goto <D.23116>; else goto <D.23118>;
  <D.23118>:
  if (has_finally != 0) goto <D.24053>; else goto <D.24054>;
  <D.24053>:
  D.24055 = cfg->verbose_level;
  if (D.24055 > 1) goto <D.24056>; else goto <D.24057>;
  <D.24056>:
  printf ("\tMethod has finally clauses, pessimizing live ranges.\n");
  <D.24057>:
  j = 0;
  goto <D.23132>;
  <D.23131>:
  {
    struct MonoBasicBlock * bb;
    struct MonoExceptionClause * clause;
    gboolean is_in_finally;

    D.24058 = (long unsigned int) j;
    D.24059 = D.24058 * 8;
    D.24060 = callsites + D.24059;
    D.24061 = *D.24060;
    bb = D.24061->bb;
    is_in_finally = 0;
    i = 0;
    goto <D.23124>;
    <D.23123>:
    D.24044 = cfg->header;
    D.24045 = D.24044->clauses;
    D.24046 = (long unsigned int) i;
    D.24047 = D.24046 * 32;
    clause = D.24045 + D.24047;
    D.24062 = clause->handler_offset;
    D.24063 = bb->real_offset;
    if (D.24062 <= D.24063) goto <D.24064>; else goto <D.24065>;
    <D.24064>:
    D.24063 = bb->real_offset;
    D.24062 = clause->handler_offset;
    D.24066 = clause->handler_len;
    D.24067 = D.24062 + D.24066;
    if (D.24063 < D.24067) goto <D.24068>; else goto <D.24069>;
    <D.24068>:
    D.24070 = clause->flags;
    if (D.24070 == 2) goto <D.24071>; else goto <D.24072>;
    <D.24071>:
    is_in_finally = 1;
    goto <D.23122>;
    <D.24072>:
    <D.24069>:
    <D.24065>:
    i = i + 1;
    <D.23124>:
    D.24044 = cfg->header;
    D.24051 = D.24044->num_clauses;
    D.24052 = (int) D.24051;
    if (D.24052 > i) goto <D.23123>; else goto <D.23122>;
    <D.23122>:
    if (is_in_finally != 0) goto <D.24073>; else goto <D.24074>;
    <D.24073>:
    i = 0;
    goto <D.23126>;
    <D.23125>:
    set_slot (gcfg, i, j, 2);
    i = i + 1;
    <D.23126>:
    if (i < nslots) goto <D.23125>; else goto <D.23127>;
    <D.23127>:
    i = 0;
    goto <D.23129>;
    <D.23128>:
    set_reg_slot (gcfg, i, j, 2);
    i = i + 1;
    <D.23129>:
    if (i < nregs) goto <D.23128>; else goto <D.23130>;
    <D.23130>:
    <D.24074>:
  }
  j = j + 1;
  <D.23132>:
  if (j < ncallsites) goto <D.23131>; else goto <D.23133>;
  <D.23133>:
  <D.24054>:
}


create_map (struct MonoCompile * cfg)
{
  guint8 * D.24075;
  int D.24076;
  int D.24077;
  guint8 * D.24080;
  int D.24081;
  int D.24090;
  int D.24091;
  int D.24095;
  int D.24096;
  int D.24098;
  int D.24099;
  _Bool D.24108;
  long int D.24109;
  long int D.24110;
  _Bool D.24113;
  long int D.24114;
  long int D.24115;
  long unsigned int D.24118;
  int D.24119;
  long unsigned int D.24120;
  long unsigned int D.24121;
  guint8 * D.24124;
  int D.24125;
  int D.24126;
  guint8 * D.24129;
  int D.24130;
  unsigned int D.24135;
  unsigned int D.24138;
  long int D.24141;
  long int D.24142;
  long int D.24143;
  long int D.24144;
  long int D.24145;
  long int D.24146;
  long int D.24147;
  long int D.24148;
  long int D.24149;
  long int D.24150;
  long int D.24151;
  int iftmp.36;
  int iftmp.37;
  int D.24160;
  int iftmp.38;
  int D.24165;
  int iftmp.39;
  struct MonoMemPool * D.24170;
  unsigned int D.24171;
  unsigned char D.24172;
  int D.24173;
  int D.24174;
  int D.24175;
  int D.24176;
  int D.24177;
  unsigned char D.24178;
  <unnamed-unsigned:1> D.24179;
  unsigned char D.24180;
  <unnamed-unsigned:1> D.24181;
  unsigned char D.24182;
  <unnamed-unsigned:1> D.24183;
  unsigned char D.24184;
  <unnamed-unsigned:1> D.24185;
  _Bool D.24186;
  long int D.24187;
  long int D.24188;
  unsigned int D.24191;
  unsigned char D.24192;
  unsigned char D.24193;
  unsigned int bitmaps_size.40;
  unsigned int bitmaps_offset.41;
  unsigned int D.24198;
  sizetype D.24199;
  int D.24200;
  int D.24203;
  unsigned int D.24206;
  sizetype D.24207;
  int D.24208;
  unsigned int D.24213;
  sizetype D.24214;
  unsigned int D.24215;
  int D.24218;
  unsigned int D.24223;
  sizetype D.24224;
  unsigned int D.24225;
  int D.24228;
  unsigned int D.24231;
  guint8 * endbuf.42;
  long int endbuf.43;
  long int buf.44;
  long int D.24241;
  _Bool D.24242;
  long int D.24243;
  long int D.24244;
  unsigned char D.24247;
  unsigned int D.24248;
  unsigned int encoded_size.45;
  unsigned int D.24250;
  unsigned int D.24251;
  signed int D.24252;
  int D.24253;
  int D.24254;
  signed int D.24255;
  unsigned int D.24256;
  int D.24257;
  int D.24258;
  unsigned int D.24259;
  unsigned int D.24260;
  unsigned int bitmaps_size.46;
  unsigned int D.24262;
  struct MonoDomain * D.24263;
  unsigned int alloc_size.47;
  long unsigned int D.24265;
  sizetype D.24266;
  int D.24267;
  long int D.24268;
  long int p.48;
  long int D.24270;
  long int D.24271;
  long int D.24272;
  sizetype D.24275;
  guint8 * D.24276;
  long unsigned int D.24277;
  long unsigned int D.24278;
  struct GCCallSite * * D.24279;
  struct GCCallSite * D.24280;
  int D.24281;
  unsigned char D.24282;
  int D.24283;
  unsigned int D.24284;
  unsigned int ncallsites.49;
  unsigned int D.24286;
  int D.24287;
  long unsigned int D.24291;
  guint16 * D.24292;
  short unsigned int D.24293;
  int D.24294;
  unsigned int D.24295;
  long unsigned int D.24296;
  unsigned int D.24297;
  unsigned int D.24298;
  unsigned int D.24299;
  int D.24300;
  long unsigned int D.24302;
  guint32 * D.24303;
  unsigned int D.24304;
  int D.24305;
  unsigned int D.24306;
  unsigned int D.24307;
  unsigned int D.24308;
  int D.24309;
  int D.24310;
  sizetype D.24311;
  long unsigned int D.24312;
  sizetype D.24313;
  long int emap.50;
  long int D.24315;
  long int D.24316;
  _Bool D.24317;
  long int D.24318;
  long int D.24319;
  int D.24322;
  int D.24323;
  int D.24324;
  int D.24325;
  int D.24326;
  int D.24327;
  int D.24328;
  unsigned int D.24329;
  unsigned int D.24330;
  int D.24331;
  struct MonoJitInfo * D.24332;
  unsigned int alloc_size.51;
  int D.24334;
  int D.24335;
  int D.24336;
  int D.24337;
  int D.24338;
  int D.24339;
  int D.24340;
  int D.24341;
  struct GCMap * map;
  int i;
  int j;
  int nregs;
  int nslots;
  int nref_regs;
  int npin_regs;
  int alloc_size;
  int bitmaps_size;
  int bitmaps_offset;
  int ntypes[16];
  int stack_bitmap_width;
  int stack_bitmap_size;
  int reg_ref_bitmap_width;
  int reg_ref_bitmap_size;
  int reg_pin_bitmap_width;
  int reg_pin_bitmap_size;
  int bindex;
  int start;
  int end;
  gboolean has_ref_slots;
  gboolean has_pin_slots;
  gboolean has_ref_regs;
  gboolean has_pin_regs;
  struct MonoCompileGC * gcfg;
  struct GCCallSite * * callsites;
  int ncallsites;
  guint8 * bitmap;
  guint8 * bitmaps;
  guint32 reg_ref_mask;
  guint32 reg_pin_mask;

  try
    {
      gcfg = cfg->gc_info;
      ncallsites = gcfg->ncallsites;
      nslots = gcfg->nslots;
      nregs = gcfg->nregs;
      callsites = gcfg->callsites;
      has_ref_slots = 0;
      has_pin_slots = 0;
      start = -1;
      end = -1;
      memset (&ntypes, 0, 64);
      i = 0;
      goto <D.23232>;
      <D.23231>:
      {
        gboolean has_ref;
        gboolean has_pin;

        has_ref = 0;
        has_pin = 0;
        D.24075 = gcfg->stack_pin_bitmap;
        D.24076 = gcfg->stack_bitmap_width;
        D.24077 = has_bit_set (D.24075, D.24076, i);
        if (D.24077 != 0) goto <D.24078>; else goto <D.24079>;
        <D.24078>:
        has_pin = 1;
        <D.24079>:
        D.24080 = gcfg->stack_ref_bitmap;
        D.24076 = gcfg->stack_bitmap_width;
        D.24081 = has_bit_set (D.24080, D.24076, i);
        if (D.24081 != 0) goto <D.24082>; else goto <D.24083>;
        <D.24082>:
        has_ref = 1;
        <D.24083>:
        if (has_ref != 0) goto <D.24084>; else goto <D.24085>;
        <D.24084>:
        has_ref_slots = 1;
        <D.24085>:
        if (has_pin != 0) goto <D.24086>; else goto <D.24087>;
        <D.24086>:
        has_pin_slots = 1;
        <D.24087>:
        if (has_ref != 0) goto <D.24088>; else goto <D.24089>;
        <D.24088>:
        D.24090 = ntypes[1];
        D.24091 = D.24090 + 1;
        ntypes[1] = D.24091;
        goto <D.24092>;
        <D.24089>:
        if (has_pin != 0) goto <D.24093>; else goto <D.24094>;
        <D.24093>:
        D.24095 = ntypes[2];
        D.24096 = D.24095 + 1;
        ntypes[2] = D.24096;
        goto <D.24097>;
        <D.24094>:
        D.24098 = ntypes[0];
        D.24099 = D.24098 + 1;
        ntypes[0] = D.24099;
        <D.24097>:
        <D.24092>:
        if (has_ref != 0) goto <D.24100>; else goto <D.24102>;
        <D.24102>:
        if (has_pin != 0) goto <D.24100>; else goto <D.24101>;
        <D.24100>:
        if (start == -1) goto <D.24103>; else goto <D.24104>;
        <D.24103>:
        start = i;
        <D.24104>:
        end = i + 1;
        <D.24101>:
      }
      i = i + 1;
      <D.23232>:
      if (i < nslots) goto <D.23231>; else goto <D.23233>;
      <D.23233>:
      if (start == -1) goto <D.24105>; else goto <D.24106>;
      <D.24105>:
      end = nslots;
      start = end;
      goto <D.24107>;
      <D.24106>:
      D.24108 = start == -1;
      D.24109 = (long int) D.24108;
      D.24110 = __builtin_expect (D.24109, 0);
      if (D.24110 != 0) goto <D.24111>; else goto <D.24112>;
      <D.24111>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 2214, "start != -1");
      <D.24112>:
      D.24113 = start >= end;
      D.24114 = (long int) D.24113;
      D.24115 = __builtin_expect (D.24114, 0);
      if (D.24115 != 0) goto <D.24116>; else goto <D.24117>;
      <D.24116>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 2215, "start < end");
      <D.24117>:
      <D.24107>:
      has_ref_regs = 0;
      has_pin_regs = 0;
      reg_ref_mask = 0;
      reg_pin_mask = 0;
      nref_regs = 0;
      npin_regs = 0;
      i = 0;
      goto <D.23238>;
      <D.23237>:
      {
        gboolean has_ref;
        gboolean has_pin;

        has_ref = 0;
        has_pin = 0;
        D.24118 = cfg->used_int_regs;
        D.24119 = 1 << i;
        D.24120 = (long unsigned int) D.24119;
        D.24121 = D.24118 & D.24120;
        if (D.24121 == 0) goto <D.24122>; else goto <D.24123>;
        <D.24122>:
        // predicted unlikely by continue predictor.
        goto <D.23236>;
        <D.24123>:
        D.24124 = gcfg->reg_pin_bitmap;
        D.24125 = gcfg->reg_bitmap_width;
        D.24126 = has_bit_set (D.24124, D.24125, i);
        if (D.24126 != 0) goto <D.24127>; else goto <D.24128>;
        <D.24127>:
        has_pin = 1;
        <D.24128>:
        D.24129 = gcfg->reg_ref_bitmap;
        D.24125 = gcfg->reg_bitmap_width;
        D.24130 = has_bit_set (D.24129, D.24125, i);
        if (D.24130 != 0) goto <D.24131>; else goto <D.24132>;
        <D.24131>:
        has_ref = 1;
        <D.24132>:
        if (has_ref != 0) goto <D.24133>; else goto <D.24134>;
        <D.24133>:
        D.24119 = 1 << i;
        D.24135 = (unsigned int) D.24119;
        reg_ref_mask = D.24135 | reg_ref_mask;
        has_ref_regs = 1;
        nref_regs = nref_regs + 1;
        <D.24134>:
        if (has_pin != 0) goto <D.24136>; else goto <D.24137>;
        <D.24136>:
        D.24119 = 1 << i;
        D.24135 = (unsigned int) D.24119;
        reg_pin_mask = D.24135 | reg_pin_mask;
        has_pin_regs = 1;
        npin_regs = npin_regs + 1;
        <D.24137>:
      }
      <D.23236>:
      i = i + 1;
      <D.23238>:
      if (i < nregs) goto <D.23237>; else goto <D.23239>;
      <D.23239>:
      D.24138 = cfg->verbose_level;
      if (D.24138 > 1) goto <D.24139>; else goto <D.24140>;
      <D.24139>:
      D.24090 = ntypes[1];
      D.24098 = ntypes[0];
      D.24095 = ntypes[2];
      printf ("Slots: %d Start: %d End: %d Refs: %d NoRefs: %d Pin: %d Callsites: %d\n", nslots, start, end, D.24090, D.24098, D.24095, ncallsites);
      <D.24140>:
      D.24141 = (long int) end;
      D.24142 = (long int) start;
      D.24143 = D.24141 - D.24142;
      D.24144 = D.24143 + 7;
      D.24145 = D.24144 >> 3;
      stack_bitmap_width = (int) D.24145;
      stack_bitmap_size = stack_bitmap_width * ncallsites;
      D.24146 = (long int) nref_regs;
      D.24147 = D.24146 + 7;
      D.24148 = D.24147 >> 3;
      reg_ref_bitmap_width = (int) D.24148;
      reg_ref_bitmap_size = reg_ref_bitmap_width * ncallsites;
      D.24149 = (long int) npin_regs;
      D.24150 = D.24149 + 7;
      D.24151 = D.24150 >> 3;
      reg_pin_bitmap_width = (int) D.24151;
      reg_pin_bitmap_size = reg_pin_bitmap_width * ncallsites;
      if (has_ref_slots != 0) goto <D.24153>; else goto <D.24154>;
      <D.24153>:
      iftmp.36 = stack_bitmap_size;
      goto <D.24155>;
      <D.24154>:
      iftmp.36 = 0;
      <D.24155>:
      if (has_pin_slots != 0) goto <D.24157>; else goto <D.24158>;
      <D.24157>:
      iftmp.37 = stack_bitmap_size;
      goto <D.24159>;
      <D.24158>:
      iftmp.37 = 0;
      <D.24159>:
      D.24160 = iftmp.36 + iftmp.37;
      if (has_ref_regs != 0) goto <D.24162>; else goto <D.24163>;
      <D.24162>:
      iftmp.38 = reg_ref_bitmap_size;
      goto <D.24164>;
      <D.24163>:
      iftmp.38 = 0;
      <D.24164>:
      D.24165 = D.24160 + iftmp.38;
      if (has_pin_regs != 0) goto <D.24167>; else goto <D.24168>;
      <D.24167>:
      iftmp.39 = reg_pin_bitmap_size;
      goto <D.24169>;
      <D.24168>:
      iftmp.39 = 0;
      <D.24169>:
      bitmaps_size = D.24165 + iftmp.39;
      D.24170 = cfg->mempool;
      map = mono_mempool_alloc0 (D.24170, 72);
      D.24171 = cfg->frame_reg;
      D.24172 = (unsigned char) D.24171;
      map->frame_reg = D.24172;
      D.24173 = gcfg->min_offset;
      map->start_offset = D.24173;
      D.24173 = gcfg->min_offset;
      D.24174 = nslots * 8;
      D.24175 = D.24173 + D.24174;
      map->end_offset = D.24175;
      D.24176 = start * 8;
      map->map_offset = D.24176;
      D.24177 = end - start;
      map->nslots = D.24177;
      D.24178 = (unsigned char) has_ref_slots;
      D.24179 = (<unnamed-unsigned:1>) D.24178;
      map->has_ref_slots = D.24179;
      D.24180 = (unsigned char) has_pin_slots;
      D.24181 = (<unnamed-unsigned:1>) D.24180;
      map->has_pin_slots = D.24181;
      D.24182 = (unsigned char) has_ref_regs;
      D.24183 = (<unnamed-unsigned:1>) D.24182;
      map->has_ref_regs = D.24183;
      D.24184 = (unsigned char) has_pin_regs;
      D.24185 = (<unnamed-unsigned:1>) D.24184;
      map->has_pin_regs = D.24185;
      D.24186 = nregs > 31;
      D.24187 = (long int) D.24186;
      D.24188 = __builtin_expect (D.24187, 0);
      if (D.24188 != 0) goto <D.24189>; else goto <D.24190>;
      <D.24189>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 2273, "nregs < 32");
      <D.24190>:
      D.24118 = cfg->used_int_regs;
      D.24191 = (unsigned int) D.24118;
      map->used_int_regs = D.24191;
      map->reg_ref_mask = reg_ref_mask;
      map->reg_pin_mask = reg_pin_mask;
      D.24192 = (unsigned char) nref_regs;
      map->nref_regs = D.24192;
      D.24193 = (unsigned char) npin_regs;
      map->npin_regs = D.24193;
      D.24170 = cfg->mempool;
      bitmaps_size.40 = (unsigned int) bitmaps_size;
      bitmaps = mono_mempool_alloc0 (D.24170, bitmaps_size.40);
      bitmaps_offset = 0;
      if (has_ref_slots != 0) goto <D.24195>; else goto <D.24196>;
      <D.24195>:
      bitmaps_offset.41 = (unsigned int) bitmaps_offset;
      map->stack_ref_bitmap_offset = bitmaps_offset.41;
      bitmaps_offset = bitmaps_offset + stack_bitmap_size;
      D.24198 = map->stack_ref_bitmap_offset;
      D.24199 = (sizetype) D.24198;
      bitmap = bitmaps + D.24199;
      i = 0;
      goto <D.23244>;
      <D.23243>:
      j = 0;
      goto <D.23241>;
      <D.23240>:
      D.24080 = gcfg->stack_ref_bitmap;
      D.24076 = gcfg->stack_bitmap_width;
      D.24200 = get_bit (D.24080, D.24076, i, j);
      if (D.24200 != 0) goto <D.24201>; else goto <D.24202>;
      <D.24201>:
      D.24203 = i - start;
      set_bit (bitmap, stack_bitmap_width, j, D.24203);
      <D.24202>:
      j = j + 1;
      <D.23241>:
      if (j < ncallsites) goto <D.23240>; else goto <D.23242>;
      <D.23242>:
      i = i + 1;
      <D.23244>:
      if (i < nslots) goto <D.23243>; else goto <D.23245>;
      <D.23245>:
      <D.24196>:
      if (has_pin_slots != 0) goto <D.24204>; else goto <D.24205>;
      <D.24204>:
      bitmaps_offset.41 = (unsigned int) bitmaps_offset;
      map->stack_pin_bitmap_offset = bitmaps_offset.41;
      bitmaps_offset = bitmaps_offset + stack_bitmap_size;
      D.24206 = map->stack_pin_bitmap_offset;
      D.24207 = (sizetype) D.24206;
      bitmap = bitmaps + D.24207;
      i = 0;
      goto <D.23250>;
      <D.23249>:
      j = 0;
      goto <D.23247>;
      <D.23246>:
      D.24075 = gcfg->stack_pin_bitmap;
      D.24076 = gcfg->stack_bitmap_width;
      D.24208 = get_bit (D.24075, D.24076, i, j);
      if (D.24208 != 0) goto <D.24209>; else goto <D.24210>;
      <D.24209>:
      D.24203 = i - start;
      set_bit (bitmap, stack_bitmap_width, j, D.24203);
      <D.24210>:
      j = j + 1;
      <D.23247>:
      if (j < ncallsites) goto <D.23246>; else goto <D.23248>;
      <D.23248>:
      i = i + 1;
      <D.23250>:
      if (i < nslots) goto <D.23249>; else goto <D.23251>;
      <D.23251>:
      <D.24205>:
      if (has_ref_regs != 0) goto <D.24211>; else goto <D.24212>;
      <D.24211>:
      bitmaps_offset.41 = (unsigned int) bitmaps_offset;
      map->reg_ref_bitmap_offset = bitmaps_offset.41;
      bitmaps_offset = bitmaps_offset + reg_ref_bitmap_size;
      D.24213 = map->reg_ref_bitmap_offset;
      D.24214 = (sizetype) D.24213;
      bitmap = bitmaps + D.24214;
      bindex = 0;
      i = 0;
      goto <D.23256>;
      <D.23255>:
      D.24119 = 1 << i;
      D.24135 = (unsigned int) D.24119;
      D.24215 = D.24135 & reg_ref_mask;
      if (D.24215 != 0) goto <D.24216>; else goto <D.24217>;
      <D.24216>:
      j = 0;
      goto <D.23253>;
      <D.23252>:
      D.24129 = gcfg->reg_ref_bitmap;
      D.24125 = gcfg->reg_bitmap_width;
      D.24218 = get_bit (D.24129, D.24125, i, j);
      if (D.24218 != 0) goto <D.24219>; else goto <D.24220>;
      <D.24219>:
      set_bit (bitmap, reg_ref_bitmap_width, j, bindex);
      <D.24220>:
      j = j + 1;
      <D.23253>:
      if (j < ncallsites) goto <D.23252>; else goto <D.23254>;
      <D.23254>:
      bindex = bindex + 1;
      <D.24217>:
      i = i + 1;
      <D.23256>:
      if (i < nregs) goto <D.23255>; else goto <D.23257>;
      <D.23257>:
      <D.24212>:
      if (has_pin_regs != 0) goto <D.24221>; else goto <D.24222>;
      <D.24221>:
      bitmaps_offset.41 = (unsigned int) bitmaps_offset;
      map->reg_pin_bitmap_offset = bitmaps_offset.41;
      bitmaps_offset = bitmaps_offset + reg_pin_bitmap_size;
      D.24223 = map->reg_pin_bitmap_offset;
      D.24224 = (sizetype) D.24223;
      bitmap = bitmaps + D.24224;
      bindex = 0;
      i = 0;
      goto <D.23262>;
      <D.23261>:
      D.24119 = 1 << i;
      D.24135 = (unsigned int) D.24119;
      D.24225 = D.24135 & reg_pin_mask;
      if (D.24225 != 0) goto <D.24226>; else goto <D.24227>;
      <D.24226>:
      j = 0;
      goto <D.23259>;
      <D.23258>:
      D.24124 = gcfg->reg_pin_bitmap;
      D.24125 = gcfg->reg_bitmap_width;
      D.24228 = get_bit (D.24124, D.24125, i, j);
      if (D.24228 != 0) goto <D.24229>; else goto <D.24230>;
      <D.24229>:
      set_bit (bitmap, reg_pin_bitmap_width, j, bindex);
      <D.24230>:
      j = j + 1;
      <D.23259>:
      if (j < ncallsites) goto <D.23258>; else goto <D.23260>;
      <D.23260>:
      bindex = bindex + 1;
      <D.24227>:
      i = i + 1;
      <D.23262>:
      if (i < nregs) goto <D.23261>; else goto <D.23263>;
      <D.23263>:
      <D.24222>:
      map->ncallsites = ncallsites;
      D.24231 = cfg->code_len;
      if (D.24231 <= 255) goto <D.24232>; else goto <D.24233>;
      <D.24232>:
      map->callsite_entry_size = 1;
      goto <D.24234>;
      <D.24233>:
      D.24231 = cfg->code_len;
      if (D.24231 <= 65535) goto <D.24235>; else goto <D.24236>;
      <D.24235>:
      map->callsite_entry_size = 2;
      goto <D.24237>;
      <D.24236>:
      map->callsite_entry_size = 4;
      <D.24237>:
      <D.24234>:
      {
        guint8 buf[256];
        guint8 * endbuf;
        struct GCEncodedMap * emap;
        int encoded_size;
        guint8 * p;

        try
          {
            encode_gc_map (map, &buf, &endbuf);
            endbuf.42 = endbuf;
            endbuf.43 = (long int) endbuf.42;
            buf.44 = (long int) &buf;
            D.24241 = endbuf.43 - buf.44;
            D.24242 = D.24241 > 255;
            D.24243 = (long int) D.24242;
            D.24244 = __builtin_expect (D.24243, 0);
            if (D.24244 != 0) goto <D.24245>; else goto <D.24246>;
            <D.24245>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 2358, "endbuf - buf < 256");
            <D.24246>:
            endbuf.42 = endbuf;
            endbuf.43 = (long int) endbuf.42;
            buf.44 = (long int) &buf;
            D.24241 = endbuf.43 - buf.44;
            encoded_size = (int) D.24241;
            D.24247 = map->callsite_entry_size;
            D.24248 = (unsigned int) D.24247;
            encoded_size.45 = (unsigned int) encoded_size;
            D.24250 = D.24248 + encoded_size.45;
            D.24251 = D.24250 + 4294967295;
            D.24252 = (signed int) D.24251;
            D.24247 = map->callsite_entry_size;
            D.24253 = (int) D.24247;
            D.24254 = -D.24253;
            D.24255 = D.24252 & D.24254;
            D.24256 = (unsigned int) D.24255;
            D.24247 = map->callsite_entry_size;
            D.24253 = (int) D.24247;
            D.24257 = map->ncallsites;
            D.24258 = D.24253 * D.24257;
            D.24259 = (unsigned int) D.24258;
            D.24260 = D.24256 + D.24259;
            bitmaps_size.46 = (unsigned int) bitmaps_size;
            D.24262 = D.24260 + bitmaps_size.46;
            alloc_size = (int) D.24262;
            D.24263 = cfg->domain;
            alloc_size.47 = (unsigned int) alloc_size;
            emap = mono_domain_alloc0 (D.24263, alloc_size.47);
            p = &emap->encoded[0];
            D.24265 = (long unsigned int) encoded_size;
            memcpy (p, &buf, D.24265);
            D.24266 = (sizetype) encoded_size;
            p = p + D.24266;
            D.24247 = map->callsite_entry_size;
            D.24253 = (int) D.24247;
            D.24267 = D.24253 + -1;
            D.24268 = (long int) D.24267;
            p.48 = (long int) p;
            D.24270 = D.24268 + p.48;
            D.24247 = map->callsite_entry_size;
            D.24253 = (int) D.24247;
            D.24254 = -D.24253;
            D.24271 = (long int) D.24254;
            D.24272 = D.24270 & D.24271;
            p = (guint8 *) D.24272;
            D.24247 = map->callsite_entry_size;
            if (D.24247 == 1) goto <D.24273>; else goto <D.24274>;
            <D.24273>:
            {
              guint8 * offsets;

              offsets = p;
              i = 0;
              goto <D.23271>;
              <D.23270>:
              D.24275 = (sizetype) i;
              D.24276 = offsets + D.24275;
              D.24277 = (long unsigned int) i;
              D.24278 = D.24277 * 8;
              D.24279 = callsites + D.24278;
              D.24280 = *D.24279;
              D.24281 = D.24280->pc_offset;
              D.24282 = (unsigned char) D.24281;
              *D.24276 = D.24282;
              i = i + 1;
              <D.23271>:
              if (i < ncallsites) goto <D.23270>; else goto <D.23272>;
              <D.23272>:
              D.24283 = stats.gc_callsites8_size;
              D.24284 = (unsigned int) D.24283;
              ncallsites.49 = (unsigned int) ncallsites;
              D.24286 = D.24284 + ncallsites.49;
              D.24287 = (int) D.24286;
              stats.gc_callsites8_size = D.24287;
            }
            goto <D.24288>;
            <D.24274>:
            D.24247 = map->callsite_entry_size;
            if (D.24247 == 2) goto <D.24289>; else goto <D.24290>;
            <D.24289>:
            {
              guint16 * offsets;

              offsets = p;
              i = 0;
              goto <D.23275>;
              <D.23274>:
              D.24277 = (long unsigned int) i;
              D.24291 = D.24277 * 2;
              D.24292 = offsets + D.24291;
              D.24277 = (long unsigned int) i;
              D.24278 = D.24277 * 8;
              D.24279 = callsites + D.24278;
              D.24280 = *D.24279;
              D.24281 = D.24280->pc_offset;
              D.24293 = (short unsigned int) D.24281;
              *D.24292 = D.24293;
              i = i + 1;
              <D.23275>:
              if (i < ncallsites) goto <D.23274>; else goto <D.23276>;
              <D.23276>:
              D.24294 = stats.gc_callsites16_size;
              D.24295 = (unsigned int) D.24294;
              D.24296 = (long unsigned int) ncallsites;
              D.24297 = (unsigned int) D.24296;
              D.24298 = D.24297 * 2;
              D.24299 = D.24295 + D.24298;
              D.24300 = (int) D.24299;
              stats.gc_callsites16_size = D.24300;
            }
            goto <D.24301>;
            <D.24290>:
            {
              guint32 * offsets;

              offsets = p;
              i = 0;
              goto <D.23279>;
              <D.23278>:
              D.24277 = (long unsigned int) i;
              D.24302 = D.24277 * 4;
              D.24303 = offsets + D.24302;
              D.24277 = (long unsigned int) i;
              D.24278 = D.24277 * 8;
              D.24279 = callsites + D.24278;
              D.24280 = *D.24279;
              D.24281 = D.24280->pc_offset;
              D.24304 = (unsigned int) D.24281;
              *D.24303 = D.24304;
              i = i + 1;
              <D.23279>:
              if (i < ncallsites) goto <D.23278>; else goto <D.23280>;
              <D.23280>:
              D.24305 = stats.gc_callsites32_size;
              D.24306 = (unsigned int) D.24305;
              D.24296 = (long unsigned int) ncallsites;
              D.24297 = (unsigned int) D.24296;
              D.24307 = D.24297 * 4;
              D.24308 = D.24306 + D.24307;
              D.24309 = (int) D.24308;
              stats.gc_callsites32_size = D.24309;
            }
            <D.24301>:
            <D.24288>:
            D.24247 = map->callsite_entry_size;
            D.24253 = (int) D.24247;
            D.24310 = D.24253 * ncallsites;
            D.24311 = (sizetype) D.24310;
            p = p + D.24311;
            D.24312 = (long unsigned int) bitmaps_size;
            memcpy (p, bitmaps, D.24312);
            D.24313 = (sizetype) bitmaps_size;
            p = p + D.24313;
            p.48 = (long int) p;
            emap.50 = (long int) emap;
            D.24315 = p.48 - emap.50;
            D.24316 = (long int) alloc_size;
            D.24317 = D.24315 > D.24316;
            D.24318 = (long int) D.24317;
            D.24319 = __builtin_expect (D.24318, 0);
            if (D.24319 != 0) goto <D.24320>; else goto <D.24321>;
            <D.24320>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 2396, "(guint8*)p - (guint8*)emap <= alloc_size");
            <D.24321>:
            D.24322 = stats.gc_maps_size;
            D.24323 = D.24322 + alloc_size;
            stats.gc_maps_size = D.24323;
            D.24324 = stats.gc_callsites_size;
            D.24247 = map->callsite_entry_size;
            D.24253 = (int) D.24247;
            D.24310 = D.24253 * ncallsites;
            D.24325 = D.24324 + D.24310;
            stats.gc_callsites_size = D.24325;
            D.24326 = stats.gc_bitmaps_size;
            D.24327 = D.24326 + bitmaps_size;
            stats.gc_bitmaps_size = D.24327;
            D.24328 = stats.gc_map_struct_size;
            D.24329 = (unsigned int) D.24328;
            encoded_size.45 = (unsigned int) encoded_size;
            D.24330 = D.24329 + encoded_size.45;
            D.24331 = (int) D.24330;
            stats.gc_map_struct_size = D.24331;
            D.24332 = cfg->jit_info;
            D.24332->gc_info = emap;
            cfg->gc_map = emap;
            alloc_size.51 = (unsigned int) alloc_size;
            cfg->gc_map_size = alloc_size.51;
          }
        finally
          {
            buf = {CLOBBER};
            endbuf = {CLOBBER};
          }
      }
      D.24334 = stats.all_slots;
      D.24335 = D.24334 + nslots;
      stats.all_slots = D.24335;
      D.24336 = stats.ref_slots;
      D.24090 = ntypes[1];
      D.24337 = D.24336 + D.24090;
      stats.ref_slots = D.24337;
      D.24338 = stats.noref_slots;
      D.24098 = ntypes[0];
      D.24339 = D.24338 + D.24098;
      stats.noref_slots = D.24339;
      D.24340 = stats.pin_slots;
      D.24095 = ntypes[2];
      D.24341 = D.24340 + D.24095;
      stats.pin_slots = D.24341;
    }
  finally
    {
      ntypes = {CLOBBER};
    }
}


has_bit_set (guint8 * bitmap, int width, int slot)
{
  int D.24342;
  sizetype D.24343;
  guint8 * D.24344;
  unsigned char D.24345;
  gboolean D.24347;
  _Bool D.24348;
  int i;
  int pos;

  pos = width * slot;
  i = 0;
  goto <D.23194>;
  <D.23193>:
  D.24342 = pos + i;
  D.24343 = (sizetype) D.24342;
  D.24344 = bitmap + D.24343;
  D.24345 = *D.24344;
  if (D.24345 != 0) goto <D.23192>; else goto <D.24346>;
  <D.24346>:
  i = i + 1;
  <D.23194>:
  if (i < width) goto <D.23193>; else goto <D.23192>;
  <D.23192>:
  D.24348 = i < width;
  D.24347 = (gboolean) D.24348;
  return D.24347;
}


get_bit (guint8 * bitmap, int width, int y, int x)
{
  int D.24350;
  int D.24351;
  int D.24352;
  int D.24353;
  sizetype D.24354;
  guint8 * D.24355;
  unsigned char D.24356;
  int D.24357;
  int D.24358;
  int D.24359;

  D.24351 = width * y;
  D.24352 = x / 8;
  D.24353 = D.24351 + D.24352;
  D.24354 = (sizetype) D.24353;
  D.24355 = bitmap + D.24354;
  D.24356 = *D.24355;
  D.24357 = (int) D.24356;
  D.24358 = x % 8;
  D.24359 = 1 << D.24358;
  D.24350 = D.24357 & D.24359;
  return D.24350;
}


encode_gc_map (struct GCMap * map, guint8 * buf, guint8 * * endbuf)
{
  int D.24361;
  int D.24362;
  guint8 * buf.52;
  int D.24364;
  int D.24365;
  int D.24366;
  int D.24367;
  int D.24368;
  unsigned int D.24369;
  unsigned char D.24370;
  _Bool D.24371;
  long int D.24372;
  long int D.24373;
  unsigned char D.24376;
  int D.24377;
  int D.24378;
  _Bool D.24379;
  long int D.24380;
  long int D.24381;
  long unsigned int D.24384;
  long unsigned int D.24385;
  _Bool D.24386;
  int D.24387;
  int iftmp.53;
  long unsigned int D.24389;
  int D.24393;
  int iftmp.54;
  long unsigned int D.24395;
  int D.24399;
  int iftmp.55;
  long unsigned int D.24401;
  int D.24405;
  int D.24406;
  int D.24407;
  int D.24408;
  int D.24409;
  unsigned int D.24410;
  unsigned int D.24411;
  unsigned int D.24412;
  unsigned int D.24413;
  unsigned int D.24416;
  unsigned int D.24417;
  unsigned int D.24420;
  unsigned int D.24421;
  int D.24422;
  unsigned int D.24423;
  guint32 flags;
  guint32 freg;

  D.24361 = map->start_offset;
  D.24362 = D.24361 / 8;
  buf.52 = buf;
  encode_sleb128 (D.24362, buf.52, &buf);
  D.24364 = map->end_offset;
  D.24365 = D.24364 / 8;
  buf.52 = buf;
  encode_sleb128 (D.24365, buf.52, &buf);
  D.24366 = map->map_offset;
  D.24367 = D.24366 / 8;
  buf.52 = buf;
  encode_sleb128 (D.24367, buf.52, &buf);
  D.24368 = map->nslots;
  D.24369 = (unsigned int) D.24368;
  buf.52 = buf;
  encode_uleb128 (D.24369, buf.52, &buf);
  D.24370 = map->callsite_entry_size;
  D.24371 = D.24370 > 4;
  D.24372 = (long int) D.24371;
  D.24373 = __builtin_expect (D.24372, 0);
  if (D.24373 != 0) goto <D.24374>; else goto <D.24375>;
  <D.24374>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 487, "map->callsite_entry_size <= 4");
  <D.24375>:
  D.24376 = map->frame_reg;
  D.24377 = (int) D.24376;
  D.24378 = encode_frame_reg (D.24377);
  freg = (guint32) D.24378;
  D.24379 = freg > 1;
  D.24380 = (long int) D.24379;
  D.24381 = __builtin_expect (D.24380, 0);
  if (D.24381 != 0) goto <D.24382>; else goto <D.24383>;
  <D.24382>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 489, "freg < 2");
  <D.24383>:
  D.24384 = BIT_FIELD_REF <*map, 64, 128>;
  D.24385 = D.24384 & 70368744177664;
  D.24386 = D.24385 != 0;
  D.24387 = (int) D.24386;
  D.24384 = BIT_FIELD_REF <*map, 64, 128>;
  D.24389 = D.24384 & 140737488355328;
  if (D.24389 != 0) goto <D.24390>; else goto <D.24391>;
  <D.24390>:
  iftmp.53 = 2;
  goto <D.24392>;
  <D.24391>:
  iftmp.53 = 0;
  <D.24392>:
  D.24393 = D.24387 | iftmp.53;
  D.24384 = BIT_FIELD_REF <*map, 64, 128>;
  D.24395 = D.24384 & 35184372088832;
  if (D.24395 != 0) goto <D.24396>; else goto <D.24397>;
  <D.24396>:
  iftmp.54 = 4;
  goto <D.24398>;
  <D.24397>:
  iftmp.54 = 0;
  <D.24398>:
  D.24399 = D.24393 | iftmp.54;
  D.24384 = BIT_FIELD_REF <*map, 64, 128>;
  D.24401 = D.24384 & 17592186044416;
  if (D.24401 != 0) goto <D.24402>; else goto <D.24403>;
  <D.24402>:
  iftmp.55 = 8;
  goto <D.24404>;
  <D.24403>:
  iftmp.55 = 0;
  <D.24404>:
  D.24405 = D.24399 | iftmp.55;
  D.24370 = map->callsite_entry_size;
  D.24406 = (int) D.24370;
  D.24407 = D.24406 + -1;
  D.24408 = D.24407 << 4;
  D.24409 = D.24405 | D.24408;
  D.24410 = (unsigned int) D.24409;
  D.24411 = freg << 6;
  flags = D.24410 | D.24411;
  buf.52 = buf;
  encode_uleb128 (flags, buf.52, &buf);
  D.24412 = map->used_int_regs;
  D.24413 = encode_regmask (D.24412);
  buf.52 = buf;
  encode_uleb128 (D.24413, buf.52, &buf);
  D.24384 = BIT_FIELD_REF <*map, 64, 128>;
  D.24395 = D.24384 & 35184372088832;
  if (D.24395 != 0) goto <D.24414>; else goto <D.24415>;
  <D.24414>:
  D.24416 = map->reg_ref_mask;
  D.24417 = encode_regmask (D.24416);
  buf.52 = buf;
  encode_uleb128 (D.24417, buf.52, &buf);
  <D.24415>:
  D.24384 = BIT_FIELD_REF <*map, 64, 128>;
  D.24401 = D.24384 & 17592186044416;
  if (D.24401 != 0) goto <D.24418>; else goto <D.24419>;
  <D.24418>:
  D.24420 = map->reg_pin_mask;
  D.24421 = encode_regmask (D.24420);
  buf.52 = buf;
  encode_uleb128 (D.24421, buf.52, &buf);
  <D.24419>:
  D.24422 = map->ncallsites;
  D.24423 = (unsigned int) D.24422;
  buf.52 = buf;
  encode_uleb128 (D.24423, buf.52, &buf);
  buf.52 = buf;
  *endbuf = buf.52;
}


__attribute__((__unused__))
encode_sleb128 (gint32 value, guint8 * buf, guint8 * * endbuf)
{
  _Bool D.24424;
  unsigned char D.24425;
  unsigned int D.24428;
  int D.24429;
  int D.24430;
  int D.24436;
  int D.24437;
  guint8 * p.56;
  gboolean more;
  gboolean negative;
  guint32 size;
  guint8 byte;
  guint8 * p;

  more = 1;
  D.24424 = value < 0;
  negative = (gboolean) D.24424;
  size = 32;
  p = buf;
  goto <D.22621>;
  <D.22620>:
  D.24425 = (unsigned char) value;
  byte = D.24425 & 127;
  value = value >> 7;
  if (negative != 0) goto <D.24426>; else goto <D.24427>;
  <D.24426>:
  D.24428 = size + 4294967289;
  D.24429 = 1 << D.24428;
  D.24430 = -D.24429;
  value = D.24430 | value;
  <D.24427>:
  if (value == 0) goto <D.24435>; else goto <D.24431>;
  <D.24435>:
  D.24436 = (int) byte;
  D.24437 = D.24436 & 64;
  if (D.24437 == 0) goto <D.24432>; else goto <D.24431>;
  <D.24431>:
  if (value == -1) goto <D.24438>; else goto <D.24433>;
  <D.24438>:
  D.24436 = (int) byte;
  D.24437 = D.24436 & 64;
  if (D.24437 != 0) goto <D.24432>; else goto <D.24433>;
  <D.24432>:
  more = 0;
  goto <D.24434>;
  <D.24433>:
  byte = byte | 128;
  <D.24434>:
  p.56 = p;
  p = p.56 + 1;
  *p.56 = byte;
  <D.22621>:
  if (more != 0) goto <D.22620>; else goto <D.22622>;
  <D.22622>:
  *endbuf = p;
}


encode_frame_reg (int frame_reg)
{
  int D.24442;

  if (frame_reg == 15) goto <D.24440>; else goto <D.24441>;
  <D.24440>:
  D.24442 = 0;
  return D.24442;
  <D.24441>:
  if (frame_reg == 11) goto <D.24443>; else goto <D.24444>;
  <D.24443>:
  D.24442 = 1;
  return D.24442;
  <D.24444>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-gc.c", 395);
  D.24442 = -1;
  return D.24442;
}


encode_regmask (guint32 regmask)
{
  int D.24446;
  int D.24447;
  unsigned int D.24448;
  unsigned int D.24449;
  int D.24452;
  unsigned int D.24453;
  unsigned int i.57;
  _Bool D.24455;
  long int D.24456;
  long int D.24457;
  guint32 D.24460;
  int i;
  guint32 res;

  res = 0;
  i = 0;
  goto <D.22656>;
  <D.22655>:
  D.24446 = callee_saved_regs[i];
  D.24447 = 1 << D.24446;
  D.24448 = (unsigned int) D.24447;
  D.24449 = D.24448 & regmask;
  if (D.24449 != 0) goto <D.24450>; else goto <D.24451>;
  <D.24450>:
  D.24452 = 1 << i;
  D.24453 = (unsigned int) D.24452;
  res = D.24453 | res;
  D.24446 = callee_saved_regs[i];
  D.24447 = 1 << D.24446;
  D.24448 = (unsigned int) D.24447;
  regmask = regmask - D.24448;
  <D.24451>:
  i = i + 1;
  <D.22656>:
  i.57 = (unsigned int) i;
  if (i.57 <= 8) goto <D.22655>; else goto <D.22657>;
  <D.22657>:
  D.24455 = regmask != 0;
  D.24456 = (long int) D.24455;
  D.24457 = __builtin_expect (D.24456, 0);
  if (D.24457 != 0) goto <D.24458>; else goto <D.24459>;
  <D.24458>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 456, "regmask == 0");
  <D.24459>:
  D.24460 = res;
  return D.24460;
}


encode_uleb128 (guint32 value, guint8 * buf, guint8 * * endbuf)
{
  unsigned char D.24462;
  guint8 * p.58;
  guint8 * p;

  p = buf;
  <D.22608>:
  {
    guint8 b;

    D.24462 = (unsigned char) value;
    b = D.24462 & 127;
    value = value >> 7;
    if (value != 0) goto <D.24463>; else goto <D.24464>;
    <D.24463>:
    b = b | 128;
    <D.24464>:
    p.58 = p;
    p = p.58 + 1;
    *p.58 = b;
  }
  if (value != 0) goto <D.22608>; else goto <D.22609>;
  <D.22609>:
  *endbuf = p;
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.24466;
  long unsigned int D.24467;

  D.24467 = __builtin_object_size (__dest, 0);
  D.24466 = __builtin___memcpy_chk (__dest, __src, __len, D.24467);
  return D.24466;
}


__attribute__((visibility ("hidden")))
mini_gc_init ()
{
  struct FILE * D.24469;
  struct MonoGCCallbacks cb;

  try
    {
      memset (&cb, 0, 32);
      cb.thread_attach_func = thread_attach_func;
      cb.thread_detach_func = thread_detach_func;
      cb.thread_suspend_func = thread_suspend_func;
      cb.thread_mark_func = thread_mark_func;
      mono_gc_set_gc_callbacks (&cb);
      D.24469 = mono_gc_get_logfile ();
      logfile = D.24469;
      parse_debug_options ();
      mono_counters_register ("GC Maps size", 512, &stats.gc_maps_size);
      mono_counters_register ("GC Call Sites size", 512, &stats.gc_callsites_size);
      mono_counters_register ("GC Bitmaps size", 512, &stats.gc_bitmaps_size);
      mono_counters_register ("GC Map struct size", 512, &stats.gc_map_struct_size);
      mono_counters_register ("GC Call Sites encoded using 8 bits", 512, &stats.gc_callsites8_size);
      mono_counters_register ("GC Call Sites encoded using 16 bits", 512, &stats.gc_callsites16_size);
      mono_counters_register ("GC Call Sites encoded using 32 bits", 512, &stats.gc_callsites32_size);
      mono_counters_register ("GC Map slots (all)", 512, &stats.all_slots);
      mono_counters_register ("GC Map slots (ref)", 512, &stats.ref_slots);
      mono_counters_register ("GC Map slots (noref)", 512, &stats.noref_slots);
      mono_counters_register ("GC Map slots (pin)", 512, &stats.pin_slots);
      mono_counters_register ("GC TLS Data size", 512, &stats.tlsdata_size);
      mono_counters_register ("Stack space scanned (all)", 512, &stats.scanned_stacks);
      mono_counters_register ("Stack space scanned (native)", 512, &stats.scanned_native);
      mono_counters_register ("Stack space scanned (other)", 512, &stats.scanned_other);
      mono_counters_register ("Stack space scanned (using GC Maps)", 512, &stats.scanned);
      mono_counters_register ("Stack space scanned (precise)", 512, &stats.scanned_precisely);
      mono_counters_register ("Stack space scanned (pin)", 512, &stats.scanned_conservatively);
      mono_counters_register ("Stack space scanned (pin registers)", 512, &stats.scanned_registers);
    }
  finally
    {
      cb = {CLOBBER};
    }
}


thread_mark_func (void * user_data, guint8 * stack_start, guint8 * stack_end, gboolean precise)
{
  struct TlsData * tls;

  tls = user_data;
  if (precise == 0) goto <D.24470>; else goto <D.24471>;
  <D.24470>:
  conservative_pass (tls, stack_start, stack_end);
  goto <D.24472>;
  <D.24471>:
  precise_pass (tls, stack_start, stack_end);
  <D.24472>:
}


conservative_pass (struct TlsData * tls, guint8 * stack_start, guint8 * stack_end)
{
  struct MonoInternalThread * D.24477;
  int D.24479;
  unsigned int D.24480;
  long int stack_end.59;
  long int stack_start.60;
  long int D.24483;
  unsigned int D.24484;
  unsigned int D.24485;
  int D.24486;
  void * lmf.61;
  int D.24488;
  struct MonoContext * D.24492;
  mgreg_t * D.24494;
  mgreg_t * D.24497;
  void * D.24500;
  unsigned long stack_limit.62;
  unsigned long D.24502;
  _Bool D.24503;
  long int D.24504;
  long int D.24505;
  struct MonoDomain * iftmp.63;
  struct MonoDomain * D.24509;
  void * D.24513;
  <unnamed type> D.24515;
  void * D.24531;
  long unsigned int D.24532;
  unsigned int D.24533;
  void * D.24534;
  long int D.24535;
  unsigned int D.24536;
  unsigned int D.24537;
  long unsigned int D.24538;
  long unsigned int D.24539;
  int D.24542;
  _Bool D.24544;
  long int D.24545;
  long int D.24546;
  unsigned long emap.64;
  unsigned long D.24552;
  _Bool D.24553;
  long int D.24554;
  long int D.24555;
  int precise_frame_limit_inited.65;
  const gchar * D.24561;
  const gchar * D.24564;
  int D.24565;
  int precise_frame_limit.66;
  int D.24569;
  char * D.24572;
  int D.24575;
  guint8 * D.24576;
  unsigned char D.24577;
  int D.24578;
  int D.24579;
  long int D.24580;
  guint8 * p.67;
  long int p.68;
  long int D.24583;
  int D.24584;
  long int D.24585;
  long int D.24586;
  guint8 * p.69;
  int D.24588;
  int D.24589;
  sizetype D.24590;
  guint8 * p.70;
  unsigned char D.24592;
  int D.24593;
  long int D.24594;
  int D.24595;
  sizetype D.24596;
  int D.24597;
  sizetype D.24598;
  sizetype D.24599;
  int D.24600;
  sizetype D.24601;
  guint8 * D.24604;
  sizetype D.24605;
  guint8 * D.24606;
  unsigned char D.24607;
  int D.24608;
  int D.24609;
  guint16 * D.24614;
  long unsigned int D.24615;
  long unsigned int D.24616;
  guint16 * D.24617;
  short unsigned int D.24618;
  int D.24619;
  guint32 * D.24622;
  long unsigned int D.24623;
  guint32 * D.24624;
  unsigned int D.24625;
  unsigned int D.24626;
  char * D.24630;
  int D.24633;
  unsigned int D.24634;
  long int real_frame_start.71;
  long int stack_limit.72;
  long int D.24637;
  unsigned int D.24638;
  unsigned int D.24639;
  int D.24640;
  long unsigned int D.24641;
  long unsigned int D.24642;
  int D.24645;
  long int D.24646;
  long int D.24647;
  long int D.24648;
  unsigned int D.24649;
  int D.24650;
  unsigned int D.24651;
  unsigned int D.24652;
  sizetype D.24653;
  int D.24654;
  sizetype D.24655;
  guint8 * D.24656;
  unsigned char D.24657;
  int D.24658;
  int D.24659;
  int D.24660;
  guint8 * D.24663;
  int D.24666;
  int D.24667;
  int D.24668;
  unsigned int D.24669;
  int D.24670;
  unsigned int D.24671;
  long unsigned int D.24672;
  unsigned char D.24675;
  long int D.24676;
  long int D.24677;
  long int D.24678;
  unsigned int D.24679;
  int D.24680;
  unsigned int D.24681;
  unsigned int D.24682;
  sizetype D.24683;
  int D.24684;
  unsigned int D.24685;
  unsigned int D.24686;
  unsigned int D.24689;
  unsigned int D.24690;
  int D.24693;
  sizetype D.24694;
  guint8 * D.24695;
  unsigned char D.24696;
  int D.24697;
  int D.24698;
  int D.24699;
  int D.24700;
  int D.24703;
  unsigned int D.24704;
  int D.24705;
  _Bool D.24706;
  long int D.24707;
  long int D.24708;
  long unsigned int D.24711;
  unsigned int D.24714;
  int D.24715;
  unsigned int D.24716;
  unsigned int D.24717;
  sizetype D.24718;
  guint8 * D.24719;
  long int frame_start.73;
  long int D.24722;
  int D.24723;
  long unsigned int D.24724;
  unsigned char D.24727;
  long int D.24728;
  long int D.24729;
  long int D.24730;
  unsigned int D.24731;
  int D.24732;
  unsigned int D.24733;
  unsigned int D.24734;
  sizetype D.24735;
  unsigned int D.24736;
  unsigned int D.24737;
  int D.24742;
  sizetype D.24743;
  guint8 * D.24744;
  unsigned char D.24745;
  int D.24746;
  int D.24747;
  int D.24748;
  int D.24749;
  int D.24752;
  long int D.24753;
  long int D.24754;
  int D.24755;
  int D.24756;
  unsigned int D.24759;
  int D.24764;
  int D.24771;
  unsigned int D.24772;
  long int D.24773;
  unsigned int D.24774;
  unsigned int D.24775;
  int D.24776;
  int D.24777;
  int D.24778;
  int D.24779;
  int D.24780;
  int D.24781;
  int D.24782;
  int D.24783;
  int D.24784;
  struct MonoJitInfo * ji;
  struct MonoMethod * method;
  struct MonoContext ctx;
  struct MonoContext new_ctx;
  struct MonoLMF * lmf;
  guint8 * stack_limit;
  gboolean last;
  struct GCMap * map;
  struct GCMap map_tmp;
  struct GCEncodedMap * emap;
  guint8 * fp;
  guint8 * p;
  guint8 * real_frame_start;
  guint8 * frame_start;
  guint8 * frame_end;
  int i;
  int pc_offset;
  int cindex;
  int bitmap_width;
  int scanned;
  int scanned_precisely;
  int scanned_conservatively;
  int scanned_registers;
  gboolean res;
  struct StackFrameInfo frame;
  mgreg_t * reg_locations[16];
  mgreg_t * new_reg_locations[16];
  guint8 * bitmaps;
  struct FrameInfo * fi;
  guint32 precise_regmask;

  try
    {
      last = 1;
      scanned = 0;
      if (tls != 0B) goto <D.24473>; else goto <D.24474>;
      <D.24473>:
      tls->nframes = 0;
      tls->ref_to_track = 0B;
      <D.24474>:
      D.24477 = mono_thread_internal_current ();
      if (D.24477 == 0B) goto <D.24475>; else goto <D.24478>;
      <D.24478>:
      if (tls == 0B) goto <D.24475>; else goto <D.24476>;
      <D.24475>:
      mono_gc_conservatively_scan_area (stack_start, stack_end);
      D.24479 = stats.scanned_stacks;
      D.24480 = (unsigned int) D.24479;
      stack_end.59 = (long int) stack_end;
      stack_start.60 = (long int) stack_start;
      D.24483 = stack_end.59 - stack_start.60;
      D.24484 = (unsigned int) D.24483;
      D.24485 = D.24480 + D.24484;
      D.24486 = (int) D.24485;
      stats.scanned_stacks = D.24486;
      return;
      <D.24476>:
      lmf.61 = tls->unwind_state.unwind_data[1];
      lmf = lmf.61;
      frame.domain = 0B;
      scanned = 0;
      scanned_precisely = 0;
      scanned_conservatively = 0;
      scanned_registers = 0;
      stack_limit = stack_start;
      D.24488 = tls->unwind_state.valid;
      if (D.24488 == 0) goto <D.24489>; else goto <D.24490>;
      <D.24489>:
      memset (&new_ctx, 0, 512);
      goto <D.24491>;
      <D.24490>:
      D.24492 = &tls->unwind_state.ctx;
      memcpy (&new_ctx, D.24492, 512);
      <D.24491>:
      memset (&reg_locations, 0, 128);
      memset (&new_reg_locations, 0, 128);
      <D.22815>:
      D.24488 = tls->unwind_state.valid;
      if (D.24488 == 0) goto <D.22771>; else goto <D.24493>;
      <D.24493>:
      memcpy (&ctx, &new_ctx, 512);
      i = 0;
      goto <D.22773>;
      <D.22772>:
      D.24494 = new_reg_locations[i];
      if (D.24494 != 0B) goto <D.24495>; else goto <D.24496>;
      <D.24495>:
      D.24497 = reg_locations[i];
      if (D.24497 != 0B) goto <D.24498>; else goto <D.24499>;
      <D.24498>:
      D.24497 = reg_locations[i];
      D.24497 = reg_locations[i];
      D.24500 = D.24497 + 8;
      mono_gc_conservatively_scan_area (D.24497, D.24500);
      scanned_registers = scanned_registers + 8;
      <D.24499>:
      D.24494 = new_reg_locations[i];
      reg_locations[i] = D.24494;
      <D.24496>:
      i = i + 1;
      <D.22773>:
      if (i <= 15) goto <D.22772>; else goto <D.22774>;
      <D.22774>:
      stack_limit.62 = (unsigned long) stack_limit;
      D.24502 = stack_limit.62 & 7;
      D.24503 = D.24502 != 0;
      D.24504 = (long int) D.24503;
      D.24505 = __builtin_expect (D.24504, 0);
      if (D.24505 != 0) goto <D.24506>; else goto <D.24507>;
      <D.24506>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 784, "(mgreg_t)stack_limit % SIZEOF_SLOT == 0");
      <D.24507>:
      D.24509 = frame.domain;
      if (D.24509 != 0B) goto <D.24510>; else goto <D.24511>;
      <D.24510>:
      iftmp.63 = frame.domain;
      goto <D.24512>;
      <D.24511>:
      iftmp.63 = tls->unwind_state.unwind_data[0];
      <D.24512>:
      D.24513 = tls->unwind_state.unwind_data[2];
      res = mono_find_jit_info_ext (iftmp.63, D.24513, 0B, &ctx, &new_ctx, 0B, &lmf, &new_reg_locations, &frame);
      if (res == 0) goto <D.22771>; else goto <D.24514>;
      <D.24514>:
      ji = frame.ji;
      D.24515 = frame.type;
      if (D.24515 == 2) goto <D.24516>; else goto <D.24517>;
      <D.24516>:
      i = 0;
      goto <D.22776>;
      <D.22775>:
      D.24497 = reg_locations[i];
      if (D.24497 != 0B) goto <D.24518>; else goto <D.24519>;
      <D.24518>:
      D.24497 = reg_locations[i];
      D.24497 = reg_locations[i];
      D.24500 = D.24497 + 8;
      mono_gc_conservatively_scan_area (D.24497, D.24500);
      scanned_registers = scanned_registers + 8;
      <D.24519>:
      reg_locations[i] = 0B;
      new_reg_locations[i] = 0B;
      i = i + 1;
      <D.22776>:
      if (i <= 15) goto <D.22775>; else goto <D.22777>;
      <D.22777>:
      ctx = new_ctx;
      // predicted unlikely by continue predictor.
      goto <D.22778>;
      <D.24517>:
      if (ji != 0B) goto <D.24520>; else goto <D.24521>;
      <D.24520>:
      method = jinfo_get_method (ji);
      goto <D.24522>;
      <D.24521>:
      method = 0B;
      <D.24522>:
      if (last != 0) goto <D.24523>; else goto <D.24524>;
      <D.24523>:
      if (ji != 0B) goto <D.24525>; else goto <D.24526>;
      <D.24525>:
      <D.24526>:
      last = 0;
      i = 0;
      goto <D.22780>;
      <D.22779>:
      D.24497 = reg_locations[i];
      if (D.24497 != 0B) goto <D.24527>; else goto <D.24528>;
      <D.24527>:
      D.24497 = reg_locations[i];
      D.24497 = reg_locations[i];
      D.24500 = D.24497 + 8;
      mono_gc_conservatively_scan_area (D.24497, D.24500);
      scanned_registers = scanned_registers + 8;
      <D.24528>:
      D.24494 = new_reg_locations[i];
      if (D.24494 != 0B) goto <D.24529>; else goto <D.24530>;
      <D.24529>:
      D.24494 = new_reg_locations[i];
      D.24494 = new_reg_locations[i];
      D.24531 = D.24494 + 8;
      mono_gc_conservatively_scan_area (D.24494, D.24531);
      scanned_registers = scanned_registers + 8;
      <D.24530>:
      reg_locations[i] = 0B;
      new_reg_locations[i] = 0B;
      i = i + 1;
      <D.22780>:
      if (i <= 15) goto <D.22779>; else goto <D.22781>;
      <D.22781>:
      // predicted unlikely by continue predictor.
      goto <D.22778>;
      <D.24524>:
      D.24532 = ctx.uc_mcontext.psw.addr;
      D.24533 = (unsigned int) D.24532;
      D.24534 = ji->code_start;
      D.24535 = (long int) D.24534;
      D.24536 = (unsigned int) D.24535;
      D.24537 = D.24533 - D.24536;
      pc_offset = (int) D.24537;
      D.24538 = BIT_FIELD_REF <*method, 64, 256>;
      D.24539 = D.24538 & 4467570830351532032;
      if (D.24539 == 864691128455135232) goto <D.24540>; else goto <D.24541>;
      <D.24540>:
      // predicted unlikely by continue predictor.
      goto <D.22778>;
      <D.24541>:
      D.24542 = tls->nframes;
      if (D.24542 == 50) goto <D.22771>; else goto <D.24543>;
      <D.24543>:
      D.24544 = pc_offset < 0;
      D.24545 = (long int) D.24544;
      D.24546 = __builtin_expect (D.24545, 0);
      if (D.24546 != 0) goto <D.24547>; else goto <D.24548>;
      <D.24547>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 877, "pc_offset >= 0");
      <D.24548>:
      emap = ji->gc_info;
      if (emap == 0B) goto <D.24549>; else goto <D.24550>;
      <D.24549>:
      // predicted unlikely by continue predictor.
      goto <D.22778>;
      <D.24550>:
      emap.64 = (unsigned long) emap;
      D.24552 = emap.64 & 3;
      D.24553 = D.24552 != 0;
      D.24554 = (long int) D.24553;
      D.24555 = __builtin_expect (D.24554, 0);
      if (D.24555 != 0) goto <D.24556>; else goto <D.24557>;
      <D.24556>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 888, "((mgreg_t)emap % 4) == 0");
      <D.24557>:
      precise_frame_limit_inited.65 = precise_frame_limit_inited;
      if (precise_frame_limit_inited.65 == 0) goto <D.24559>; else goto <D.24560>;
      <D.24559>:
      D.24561 = monoeg_g_getenv ("MONO_PRECISE_COUNT");
      if (D.24561 != 0B) goto <D.24562>; else goto <D.24563>;
      <D.24562>:
      D.24564 = monoeg_g_getenv ("MONO_PRECISE_COUNT");
      D.24565 = atoi (D.24564);
      precise_frame_limit = D.24565;
      <D.24563>:
      precise_frame_limit_inited = 1;
      <D.24560>:
      precise_frame_limit.66 = precise_frame_limit;
      if (precise_frame_limit.66 != -1) goto <D.24567>; else goto <D.24568>;
      <D.24567>:
      D.24569 = precise_frame_count[0];
      precise_frame_limit.66 = precise_frame_limit;
      if (D.24569 == precise_frame_limit.66) goto <D.24570>; else goto <D.24571>;
      <D.24570>:
      D.24572 = mono_method_full_name (method, 1);
      printf ("LAST PRECISE FRAME: %s\n", D.24572);
      <D.24571>:
      D.24569 = precise_frame_count[0];
      precise_frame_limit.66 = precise_frame_limit;
      if (D.24569 > precise_frame_limit.66) goto <D.24573>; else goto <D.24574>;
      <D.24573>:
      // predicted unlikely by continue predictor.
      goto <D.22778>;
      <D.24574>:
      <D.24568>:
      D.24569 = precise_frame_count[0];
      D.24575 = D.24569 + 1;
      precise_frame_count[0] = D.24575;
      map = &map_tmp;
      memset (map, 0, 72);
      D.24576 = &emap->encoded[0];
      decode_gc_map (D.24576, map, &p);
      D.24577 = map->callsite_entry_size;
      D.24578 = (int) D.24577;
      D.24579 = D.24578 + -1;
      D.24580 = (long int) D.24579;
      p.67 = p;
      p.68 = (long int) p.67;
      D.24583 = D.24580 + p.68;
      D.24577 = map->callsite_entry_size;
      D.24578 = (int) D.24577;
      D.24584 = -D.24578;
      D.24585 = (long int) D.24584;
      D.24586 = D.24583 & D.24585;
      p.69 = (guint8 *) D.24586;
      p = p.69;
      p.67 = p;
      map->callsites.offsets8 = p.67;
      p.67 = p;
      D.24577 = map->callsite_entry_size;
      D.24578 = (int) D.24577;
      D.24588 = map->ncallsites;
      D.24589 = D.24578 * D.24588;
      D.24590 = (sizetype) D.24589;
      p.70 = p.67 + D.24590;
      p = p.70;
      bitmaps = p;
      D.24592 = map->frame_reg;
      D.24593 = (int) D.24592;
      D.24594 = get_frame_pointer (&ctx, D.24593);
      fp = (guint8 *) D.24594;
      D.24595 = map->start_offset;
      D.24596 = (sizetype) D.24595;
      real_frame_start = fp + D.24596;
      D.24595 = map->start_offset;
      D.24596 = (sizetype) D.24595;
      D.24597 = map->map_offset;
      D.24598 = (sizetype) D.24597;
      D.24599 = D.24596 + D.24598;
      frame_start = fp + D.24599;
      D.24600 = map->end_offset;
      D.24601 = (sizetype) D.24600;
      frame_end = fp + D.24601;
      D.24577 = map->callsite_entry_size;
      if (D.24577 == 1) goto <D.24602>; else goto <D.24603>;
      <D.24602>:
      i = 0;
      goto <D.22784>;
      <D.22783>:
      D.24604 = map->callsites.offsets8;
      D.24605 = (sizetype) i;
      D.24606 = D.24604 + D.24605;
      D.24607 = *D.24606;
      D.24608 = (int) D.24607;
      D.24609 = pc_offset + 1;
      if (D.24608 == D.24609) goto <D.22782>; else goto <D.24610>;
      <D.24610>:
      i = i + 1;
      <D.22784>:
      D.24588 = map->ncallsites;
      if (D.24588 > i) goto <D.22783>; else goto <D.22782>;
      <D.22782>:
      goto <D.24611>;
      <D.24603>:
      D.24577 = map->callsite_entry_size;
      if (D.24577 == 2) goto <D.24612>; else goto <D.24613>;
      <D.24612>:
      i = 0;
      goto <D.22787>;
      <D.22786>:
      D.24614 = map->callsites.offsets16;
      D.24615 = (long unsigned int) i;
      D.24616 = D.24615 * 2;
      D.24617 = D.24614 + D.24616;
      D.24618 = *D.24617;
      D.24619 = (int) D.24618;
      D.24609 = pc_offset + 1;
      if (D.24619 == D.24609) goto <D.22785>; else goto <D.24620>;
      <D.24620>:
      i = i + 1;
      <D.22787>:
      D.24588 = map->ncallsites;
      if (D.24588 > i) goto <D.22786>; else goto <D.22785>;
      <D.22785>:
      goto <D.24621>;
      <D.24613>:
      i = 0;
      goto <D.22790>;
      <D.22789>:
      D.24622 = map->callsites.offsets32;
      D.24615 = (long unsigned int) i;
      D.24623 = D.24615 * 4;
      D.24624 = D.24622 + D.24623;
      D.24625 = *D.24624;
      D.24609 = pc_offset + 1;
      D.24626 = (unsigned int) D.24609;
      if (D.24625 == D.24626) goto <D.22788>; else goto <D.24627>;
      <D.24627>:
      i = i + 1;
      <D.22790>:
      D.24588 = map->ncallsites;
      if (D.24588 > i) goto <D.22789>; else goto <D.22788>;
      <D.22788>:
      <D.24621>:
      <D.24611>:
      D.24588 = map->ncallsites;
      if (D.24588 == i) goto <D.24628>; else goto <D.24629>;
      <D.24628>:
      D.24609 = pc_offset + 1;
      D.24630 = mono_method_full_name (method, 1);
      printf ("Unable to find ip offset 0x%x in callsite list of %s.\n", D.24609, D.24630);
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-gc.c", 945);
      <D.24629>:
      cindex = i;
      if (real_frame_start > stack_limit) goto <D.24631>; else goto <D.24632>;
      <D.24631>:
      mono_gc_conservatively_scan_area (stack_limit, real_frame_start);
      D.24633 = stats.scanned_other;
      D.24634 = (unsigned int) D.24633;
      real_frame_start.71 = (long int) real_frame_start;
      stack_limit.72 = (long int) stack_limit;
      D.24637 = real_frame_start.71 - stack_limit.72;
      D.24638 = (unsigned int) D.24637;
      D.24639 = D.24634 + D.24638;
      D.24640 = (int) D.24639;
      stats.scanned_other = D.24640;
      <D.24632>:
      D.24641 = BIT_FIELD_REF <*map, 64, 128>;
      D.24642 = D.24641 & 140737488355328;
      if (D.24642 != 0) goto <D.24643>; else goto <D.24644>;
      <D.24643>:
      {
        int bitmap_width;
        guint8 * pin_bitmap;
        guint8 * p;
        gboolean pinned;

        D.24645 = map->nslots;
        D.24646 = (long int) D.24645;
        D.24647 = D.24646 + 7;
        D.24648 = D.24647 >> 3;
        bitmap_width = (int) D.24648;
        D.24649 = map->stack_pin_bitmap_offset;
        D.24650 = bitmap_width * cindex;
        D.24651 = (unsigned int) D.24650;
        D.24652 = D.24649 + D.24651;
        D.24653 = (sizetype) D.24652;
        pin_bitmap = bitmaps + D.24653;
        p = frame_start;
        i = 0;
        goto <D.22796>;
        <D.22795>:
        D.24654 = i / 8;
        D.24655 = (sizetype) D.24654;
        D.24656 = pin_bitmap + D.24655;
        D.24657 = *D.24656;
        D.24658 = (int) D.24657;
        D.24659 = i % 8;
        D.24660 = 1 << D.24659;
        pinned = D.24658 & D.24660;
        if (pinned != 0) goto <D.24661>; else goto <D.24662>;
        <D.24661>:
        D.24663 = p + 8;
        mono_gc_conservatively_scan_area (p, D.24663);
        scanned_conservatively = scanned_conservatively + 8;
        goto <D.24664>;
        <D.24662>:
        scanned_precisely = scanned_precisely + 8;
        <D.24664>:
        p = p + 8;
        i = i + 1;
        <D.22796>:
        D.24645 = map->nslots;
        if (D.24645 > i) goto <D.22795>; else goto <D.22797>;
        <D.22797>:
      }
      goto <D.24665>;
      <D.24644>:
      D.24645 = map->nslots;
      D.24666 = D.24645 * 8;
      scanned_precisely = D.24666 + scanned_precisely;
      <D.24665>:
      D.24600 = map->end_offset;
      D.24595 = map->start_offset;
      D.24667 = D.24600 - D.24595;
      D.24645 = map->nslots;
      D.24666 = D.24645 * 8;
      D.24668 = D.24667 - D.24666;
      scanned_precisely = D.24668 + scanned_precisely;
      D.24669 = map->used_int_regs;
      D.24592 = map->frame_reg;
      D.24593 = (int) D.24592;
      D.24670 = 1 << D.24593;
      D.24671 = (unsigned int) D.24670;
      precise_regmask = D.24669 | D.24671;
      D.24641 = BIT_FIELD_REF <*map, 64, 128>;
      D.24672 = D.24641 & 17592186044416;
      if (D.24672 != 0) goto <D.24673>; else goto <D.24674>;
      <D.24673>:
      {
        int bitmap_width;
        guint8 * pin_bitmap;
        int bindex;

        D.24675 = map->npin_regs;
        D.24676 = (long int) D.24675;
        D.24677 = D.24676 + 7;
        D.24678 = D.24677 >> 3;
        bitmap_width = (int) D.24678;
        D.24679 = map->reg_pin_bitmap_offset;
        D.24680 = bitmap_width * cindex;
        D.24681 = (unsigned int) D.24680;
        D.24682 = D.24679 + D.24681;
        D.24683 = (sizetype) D.24682;
        pin_bitmap = bitmaps + D.24683;
        bindex = 0;
        i = 0;
        goto <D.22803>;
        <D.22802>:
        D.24669 = map->used_int_regs;
        D.24684 = 1 << i;
        D.24685 = (unsigned int) D.24684;
        D.24686 = D.24669 & D.24685;
        if (D.24686 == 0) goto <D.24687>; else goto <D.24688>;
        <D.24687>:
        // predicted unlikely by continue predictor.
        goto <D.22801>;
        <D.24688>:
        D.24689 = map->reg_pin_mask;
        D.24684 = 1 << i;
        D.24685 = (unsigned int) D.24684;
        D.24690 = D.24689 & D.24685;
        if (D.24690 == 0) goto <D.24691>; else goto <D.24692>;
        <D.24691>:
        // predicted unlikely by continue predictor.
        goto <D.22801>;
        <D.24692>:
        D.24693 = bindex / 8;
        D.24694 = (sizetype) D.24693;
        D.24695 = pin_bitmap + D.24694;
        D.24696 = *D.24695;
        D.24697 = (int) D.24696;
        D.24698 = bindex % 8;
        D.24699 = D.24697 >> D.24698;
        D.24700 = D.24699 & 1;
        if (D.24700 != 0) goto <D.24701>; else goto <D.24702>;
        <D.24701>:
        D.24684 = 1 << i;
        D.24703 = ~D.24684;
        D.24704 = (unsigned int) D.24703;
        precise_regmask = D.24704 & precise_regmask;
        <D.24702>:
        bindex = bindex + 1;
        <D.22801>:
        i = i + 1;
        <D.22803>:
        if (i <= 15) goto <D.22802>; else goto <D.22804>;
        <D.22804>:
      }
      <D.24674>:
      D.24600 = map->end_offset;
      D.24595 = map->start_offset;
      D.24667 = D.24600 - D.24595;
      scanned = D.24667 + scanned;
      D.24705 = scanned_precisely + scanned_conservatively;
      D.24706 = D.24705 != scanned;
      D.24707 = (long int) D.24706;
      D.24708 = __builtin_expect (D.24707, 0);
      if (D.24708 != 0) goto <D.24709>; else goto <D.24710>;
      <D.24709>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1011, "scanned == scanned_precisely + scanned_conservatively");
      <D.24710>:
      stack_limit = frame_end;
      D.24542 = tls->nframes;
      fi = &tls->frames[D.24542];
      D.24645 = map->nslots;
      fi->nslots = D.24645;
      D.24645 = map->nslots;
      D.24646 = (long int) D.24645;
      D.24647 = D.24646 + 7;
      D.24648 = D.24647 >> 3;
      bitmap_width = (int) D.24648;
      D.24641 = BIT_FIELD_REF <*map, 64, 128>;
      D.24711 = D.24641 & 70368744177664;
      if (D.24711 != 0) goto <D.24712>; else goto <D.24713>;
      <D.24712>:
      D.24714 = map->stack_ref_bitmap_offset;
      D.24715 = bitmap_width * cindex;
      D.24716 = (unsigned int) D.24715;
      D.24717 = D.24714 + D.24716;
      D.24718 = (sizetype) D.24717;
      D.24719 = bitmaps + D.24718;
      fi->bitmap = D.24719;
      goto <D.24720>;
      <D.24713>:
      fi->bitmap = 0B;
      <D.24720>:
      frame_start.73 = (long int) frame_start;
      stack_start.60 = (long int) stack_start;
      D.24722 = frame_start.73 - stack_start.60;
      D.24723 = (int) D.24722;
      fi->frame_start_offset = D.24723;
      fi->nreg_locations = 0;
      D.24641 = BIT_FIELD_REF <*map, 64, 128>;
      D.24724 = D.24641 & 35184372088832;
      if (D.24724 != 0) goto <D.24725>; else goto <D.24726>;
      <D.24725>:
      {
        int bitmap_width;
        guint8 * ref_bitmap;
        int bindex;

        D.24727 = map->nref_regs;
        D.24728 = (long int) D.24727;
        D.24729 = D.24728 + 7;
        D.24730 = D.24729 >> 3;
        bitmap_width = (int) D.24730;
        D.24731 = map->reg_ref_bitmap_offset;
        D.24732 = bitmap_width * cindex;
        D.24733 = (unsigned int) D.24732;
        D.24734 = D.24731 + D.24733;
        D.24735 = (sizetype) D.24734;
        ref_bitmap = bitmaps + D.24735;
        bindex = 0;
        i = 0;
        goto <D.22810>;
        <D.22809>:
        D.24736 = map->reg_ref_mask;
        D.24684 = 1 << i;
        D.24685 = (unsigned int) D.24684;
        D.24737 = D.24736 & D.24685;
        if (D.24737 == 0) goto <D.24738>; else goto <D.24739>;
        <D.24738>:
        // predicted unlikely by continue predictor.
        goto <D.22808>;
        <D.24739>:
        D.24497 = reg_locations[i];
        if (D.24497 != 0B) goto <D.24740>; else goto <D.24741>;
        <D.24740>:
        D.24742 = bindex / 8;
        D.24743 = (sizetype) D.24742;
        D.24744 = ref_bitmap + D.24743;
        D.24745 = *D.24744;
        D.24746 = (int) D.24745;
        D.24747 = bindex % 8;
        D.24748 = D.24746 >> D.24747;
        D.24749 = D.24748 & 1;
        if (D.24749 != 0) goto <D.24750>; else goto <D.24751>;
        <D.24750>:
        D.24752 = fi->nreg_locations;
        D.24497 = reg_locations[i];
        D.24753 = (long int) D.24497;
        stack_start.60 = (long int) stack_start;
        D.24754 = D.24753 - stack_start.60;
        D.24755 = (int) D.24754;
        fi->reg_locations[D.24752] = D.24755;
        D.24752 = fi->nreg_locations;
        D.24756 = D.24752 + 1;
        fi->nreg_locations = D.24756;
        <D.24751>:
        <D.24741>:
        bindex = bindex + 1;
        <D.22808>:
        i = i + 1;
        <D.22810>:
        if (i <= 15) goto <D.22809>; else goto <D.22811>;
        <D.22811>:
      }
      <D.24726>:
      if (precise_regmask != 0) goto <D.24757>; else goto <D.24758>;
      <D.24757>:
      i = 0;
      goto <D.22813>;
      <D.22812>:
      D.24684 = 1 << i;
      D.24685 = (unsigned int) D.24684;
      D.24759 = D.24685 & precise_regmask;
      if (D.24759 != 0) goto <D.24760>; else goto <D.24761>;
      <D.24760>:
      D.24497 = reg_locations[i];
      if (D.24497 != 0B) goto <D.24762>; else goto <D.24763>;
      <D.24762>:
      <D.24763>:
      reg_locations[i] = 0B;
      <D.24761>:
      i = i + 1;
      <D.22813>:
      if (i <= 15) goto <D.22812>; else goto <D.22814>;
      <D.22814>:
      <D.24758>:
      D.24542 = tls->nframes;
      D.24764 = D.24542 + 1;
      tls->nframes = D.24764;
      <D.22778>:
      goto <D.22815>;
      <D.22771>:
      i = 0;
      goto <D.22817>;
      <D.22816>:
      D.24497 = reg_locations[i];
      if (D.24497 != 0B) goto <D.24765>; else goto <D.24766>;
      <D.24765>:
      D.24497 = reg_locations[i];
      D.24497 = reg_locations[i];
      D.24500 = D.24497 + 8;
      mono_gc_conservatively_scan_area (D.24497, D.24500);
      scanned_registers = scanned_registers + 8;
      <D.24766>:
      D.24494 = new_reg_locations[i];
      if (D.24494 != 0B) goto <D.24767>; else goto <D.24768>;
      <D.24767>:
      D.24494 = new_reg_locations[i];
      D.24494 = new_reg_locations[i];
      D.24531 = D.24494 + 8;
      mono_gc_conservatively_scan_area (D.24494, D.24531);
      scanned_registers = scanned_registers + 8;
      <D.24768>:
      i = i + 1;
      <D.22817>:
      if (i <= 15) goto <D.22816>; else goto <D.22818>;
      <D.22818>:
      if (stack_limit < stack_end) goto <D.24769>; else goto <D.24770>;
      <D.24769>:
      mono_gc_conservatively_scan_area (stack_limit, stack_end);
      D.24771 = stats.scanned_native;
      D.24772 = (unsigned int) D.24771;
      stack_end.59 = (long int) stack_end;
      stack_limit.72 = (long int) stack_limit;
      D.24773 = stack_end.59 - stack_limit.72;
      D.24774 = (unsigned int) D.24773;
      D.24775 = D.24772 + D.24774;
      D.24776 = (int) D.24775;
      stats.scanned_native = D.24776;
      <D.24770>:
      D.24479 = stats.scanned_stacks;
      D.24480 = (unsigned int) D.24479;
      stack_end.59 = (long int) stack_end;
      stack_start.60 = (long int) stack_start;
      D.24483 = stack_end.59 - stack_start.60;
      D.24484 = (unsigned int) D.24483;
      D.24485 = D.24480 + D.24484;
      D.24486 = (int) D.24485;
      stats.scanned_stacks = D.24486;
      D.24777 = stats.scanned;
      D.24778 = D.24777 + scanned;
      stats.scanned = D.24778;
      D.24779 = stats.scanned_precisely;
      D.24780 = D.24779 + scanned_precisely;
      stats.scanned_precisely = D.24780;
      D.24781 = stats.scanned_conservatively;
      D.24782 = D.24781 + scanned_conservatively;
      stats.scanned_conservatively = D.24782;
      D.24783 = stats.scanned_registers;
      D.24784 = D.24783 + scanned_registers;
      stats.scanned_registers = D.24784;
    }
  finally
    {
      ctx = {CLOBBER};
      new_ctx = {CLOBBER};
      lmf = {CLOBBER};
      map_tmp = {CLOBBER};
      p = {CLOBBER};
      frame = {CLOBBER};
      reg_locations = {CLOBBER};
      new_reg_locations = {CLOBBER};
    }
}


jinfo_get_method (struct MonoJitInfo * ji)
{
  struct MonoMethod * D.24788;

  D.24788 = mono_jit_info_get_method (ji);
  return D.24788;
}


__attribute__((__gnu_inline__, __pure__, __leaf__, __nothrow__))
atoi (const char * __nptr)
{
  int D.24790;
  long int D.24791;

  D.24791 = strtol (__nptr, 0B, 10);
  D.24790 = (int) D.24791;
  return D.24790;
}


decode_gc_map (guint8 * buf, struct GCMap * map, guint8 * * endbuf)
{
  guint8 * buf.74;
  int D.24794;
  int D.24795;
  int D.24796;
  int D.24797;
  int D.24798;
  int D.24799;
  unsigned int D.24800;
  int D.24801;
  unsigned int D.24802;
  _Bool D.24803;
  unsigned int D.24804;
  _Bool D.24805;
  unsigned int D.24806;
  _Bool D.24807;
  unsigned int D.24808;
  _Bool D.24809;
  unsigned int D.24810;
  unsigned char D.24811;
  unsigned char D.24812;
  unsigned char D.24813;
  unsigned int D.24814;
  int D.24815;
  unsigned char D.24816;
  unsigned int D.24817;
  unsigned int D.24818;
  long unsigned int D.24819;
  long unsigned int D.24820;
  unsigned int D.24823;
  unsigned int D.24824;
  unsigned int D.24825;
  int D.24826;
  unsigned int D.24827;
  unsigned int D.24828;
  unsigned char D.24831;
  long unsigned int D.24832;
  unsigned int D.24835;
  unsigned int D.24836;
  unsigned int D.24837;
  unsigned int D.24838;
  unsigned int D.24841;
  int D.24842;
  int D.24843;
  long int D.24844;
  long int D.24845;
  long int D.24846;
  unsigned int D.24847;
  int D.24848;
  unsigned int D.24849;
  unsigned int D.24850;
  unsigned char D.24851;
  long int D.24852;
  long int D.24853;
  long int D.24854;
  unsigned int D.24855;
  unsigned int D.24856;
  unsigned char D.24857;
  long int D.24858;
  long int D.24859;
  long int D.24860;
  unsigned int D.24861;
  unsigned int D.24862;
  unsigned int offset.75;
  long unsigned int D.24864;
  long unsigned int D.24867;
  guint32 flags;
  int stack_bitmap_size;
  int reg_ref_bitmap_size;
  int reg_pin_bitmap_size;
  int offset;
  int freg;
  int i;
  int n;

  buf.74 = buf;
  D.24794 = decode_sleb128 (buf.74, &buf);
  D.24795 = D.24794 * 8;
  map->start_offset = D.24795;
  buf.74 = buf;
  D.24796 = decode_sleb128 (buf.74, &buf);
  D.24797 = D.24796 * 8;
  map->end_offset = D.24797;
  buf.74 = buf;
  D.24798 = decode_sleb128 (buf.74, &buf);
  D.24799 = D.24798 * 8;
  map->map_offset = D.24799;
  buf.74 = buf;
  D.24800 = decode_uleb128 (buf.74, &buf);
  D.24801 = (int) D.24800;
  map->nslots = D.24801;
  buf.74 = buf;
  flags = decode_uleb128 (buf.74, &buf);
  D.24802 = flags & 1;
  D.24803 = D.24802 != 0;
  map->has_ref_slots = D.24803;
  D.24804 = flags & 2;
  D.24805 = D.24804 != 0;
  map->has_pin_slots = D.24805;
  D.24806 = flags & 4;
  D.24807 = D.24806 != 0;
  map->has_ref_regs = D.24807;
  D.24808 = flags & 8;
  D.24809 = D.24808 != 0;
  map->has_pin_regs = D.24809;
  D.24810 = flags >> 4;
  D.24811 = (unsigned char) D.24810;
  D.24812 = D.24811 & 3;
  D.24813 = D.24812 + 1;
  map->callsite_entry_size = D.24813;
  D.24814 = flags >> 6;
  freg = (int) D.24814;
  D.24815 = decode_frame_reg (freg);
  D.24816 = (unsigned char) D.24815;
  map->frame_reg = D.24816;
  buf.74 = buf;
  D.24817 = decode_uleb128 (buf.74, &buf);
  D.24818 = decode_regmask (D.24817);
  map->used_int_regs = D.24818;
  D.24819 = BIT_FIELD_REF <*map, 64, 128>;
  D.24820 = D.24819 & 35184372088832;
  if (D.24820 != 0) goto <D.24821>; else goto <D.24822>;
  <D.24821>:
  buf.74 = buf;
  D.24823 = decode_uleb128 (buf.74, &buf);
  D.24824 = decode_regmask (D.24823);
  map->reg_ref_mask = D.24824;
  n = 0;
  i = 0;
  goto <D.22687>;
  <D.22686>:
  D.24825 = map->reg_ref_mask;
  D.24826 = 1 << i;
  D.24827 = (unsigned int) D.24826;
  D.24828 = D.24825 & D.24827;
  if (D.24828 != 0) goto <D.24829>; else goto <D.24830>;
  <D.24829>:
  n = n + 1;
  <D.24830>:
  i = i + 1;
  <D.22687>:
  if (i <= 15) goto <D.22686>; else goto <D.22688>;
  <D.22688>:
  D.24831 = (unsigned char) n;
  map->nref_regs = D.24831;
  <D.24822>:
  D.24819 = BIT_FIELD_REF <*map, 64, 128>;
  D.24832 = D.24819 & 17592186044416;
  if (D.24832 != 0) goto <D.24833>; else goto <D.24834>;
  <D.24833>:
  buf.74 = buf;
  D.24835 = decode_uleb128 (buf.74, &buf);
  D.24836 = decode_regmask (D.24835);
  map->reg_pin_mask = D.24836;
  n = 0;
  i = 0;
  goto <D.22690>;
  <D.22689>:
  D.24837 = map->reg_pin_mask;
  D.24826 = 1 << i;
  D.24827 = (unsigned int) D.24826;
  D.24838 = D.24837 & D.24827;
  if (D.24838 != 0) goto <D.24839>; else goto <D.24840>;
  <D.24839>:
  n = n + 1;
  <D.24840>:
  i = i + 1;
  <D.22690>:
  if (i <= 15) goto <D.22689>; else goto <D.22691>;
  <D.22691>:
  D.24831 = (unsigned char) n;
  map->npin_regs = D.24831;
  <D.24834>:
  buf.74 = buf;
  D.24841 = decode_uleb128 (buf.74, &buf);
  D.24842 = (int) D.24841;
  map->ncallsites = D.24842;
  D.24843 = map->nslots;
  D.24844 = (long int) D.24843;
  D.24845 = D.24844 + 7;
  D.24846 = D.24845 >> 3;
  D.24847 = (unsigned int) D.24846;
  D.24848 = map->ncallsites;
  D.24849 = (unsigned int) D.24848;
  D.24850 = D.24847 * D.24849;
  stack_bitmap_size = (int) D.24850;
  D.24851 = map->nref_regs;
  D.24852 = (long int) D.24851;
  D.24853 = D.24852 + 7;
  D.24854 = D.24853 >> 3;
  D.24855 = (unsigned int) D.24854;
  D.24848 = map->ncallsites;
  D.24849 = (unsigned int) D.24848;
  D.24856 = D.24855 * D.24849;
  reg_ref_bitmap_size = (int) D.24856;
  D.24857 = map->npin_regs;
  D.24858 = (long int) D.24857;
  D.24859 = D.24858 + 7;
  D.24860 = D.24859 >> 3;
  D.24861 = (unsigned int) D.24860;
  D.24848 = map->ncallsites;
  D.24849 = (unsigned int) D.24848;
  D.24862 = D.24861 * D.24849;
  reg_pin_bitmap_size = (int) D.24862;
  offset = 0;
  offset.75 = (unsigned int) offset;
  map->stack_ref_bitmap_offset = offset.75;
  D.24819 = BIT_FIELD_REF <*map, 64, 128>;
  D.24864 = D.24819 & 70368744177664;
  if (D.24864 != 0) goto <D.24865>; else goto <D.24866>;
  <D.24865>:
  offset = offset + stack_bitmap_size;
  <D.24866>:
  offset.75 = (unsigned int) offset;
  map->stack_pin_bitmap_offset = offset.75;
  D.24819 = BIT_FIELD_REF <*map, 64, 128>;
  D.24867 = D.24819 & 140737488355328;
  if (D.24867 != 0) goto <D.24868>; else goto <D.24869>;
  <D.24868>:
  offset = offset + stack_bitmap_size;
  <D.24869>:
  offset.75 = (unsigned int) offset;
  map->reg_ref_bitmap_offset = offset.75;
  D.24819 = BIT_FIELD_REF <*map, 64, 128>;
  D.24820 = D.24819 & 35184372088832;
  if (D.24820 != 0) goto <D.24870>; else goto <D.24871>;
  <D.24870>:
  offset = offset + reg_ref_bitmap_size;
  <D.24871>:
  offset.75 = (unsigned int) offset;
  map->reg_pin_bitmap_offset = offset.75;
  D.24819 = BIT_FIELD_REF <*map, 64, 128>;
  D.24832 = D.24819 & 17592186044416;
  if (D.24832 != 0) goto <D.24872>; else goto <D.24873>;
  <D.24872>:
  offset = offset + reg_pin_bitmap_size;
  <D.24873>:
  buf.74 = buf;
  *endbuf = buf.74;
}


decode_sleb128 (guint8 * buf, guint8 * * endbuf)
{
  int D.24874;
  int D.24875;
  int D.24876;
  signed char b.76;
  int D.24882;
  int D.24885;
  int D.24886;
  gint32 D.24887;
  guint8 * p;
  gint32 res;
  int shift;

  p = buf;
  res = 0;
  shift = 0;
  <D.22642>:
  {
    guint8 b;

    b = *p;
    p = p + 1;
    D.24874 = (int) b;
    D.24875 = D.24874 & 127;
    D.24876 = D.24875 << shift;
    res = D.24876 | res;
    shift = shift + 7;
    b.76 = (signed char) b;
    if (b.76 >= 0) goto <D.24878>; else goto <D.24879>;
    <D.24878>:
    if (shift <= 31) goto <D.24880>; else goto <D.24881>;
    <D.24880>:
    D.24874 = (int) b;
    D.24882 = D.24874 & 64;
    if (D.24882 != 0) goto <D.24883>; else goto <D.24884>;
    <D.24883>:
    D.24885 = 1 << shift;
    D.24886 = -D.24885;
    res = D.24886 | res;
    <D.24884>:
    <D.24881>:
    goto <D.22641>;
    <D.24879>:
  }
  goto <D.22642>;
  <D.22641>:
  *endbuf = p;
  D.24887 = res;
  return D.24887;
}


decode_frame_reg (int encoded)
{
  int D.24891;

  if (encoded == 0) goto <D.24889>; else goto <D.24890>;
  <D.24889>:
  D.24891 = 15;
  return D.24891;
  <D.24890>:
  if (encoded == 1) goto <D.24892>; else goto <D.24893>;
  <D.24892>:
  D.24891 = 11;
  return D.24891;
  <D.24893>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-gc.c", 425);
  D.24891 = -1;
  return D.24891;
}


decode_regmask (guint32 regmask)
{
  int D.24895;
  unsigned int D.24896;
  unsigned int D.24897;
  int D.24900;
  int D.24901;
  unsigned int D.24902;
  unsigned int i.77;
  guint32 D.24904;
  int i;
  guint32 res;

  res = 0;
  i = 0;
  goto <D.22664>;
  <D.22663>:
  D.24895 = 1 << i;
  D.24896 = (unsigned int) D.24895;
  D.24897 = D.24896 & regmask;
  if (D.24897 != 0) goto <D.24898>; else goto <D.24899>;
  <D.24898>:
  D.24900 = callee_saved_regs[i];
  D.24901 = 1 << D.24900;
  D.24902 = (unsigned int) D.24901;
  res = D.24902 | res;
  <D.24899>:
  i = i + 1;
  <D.22664>:
  i.77 = (unsigned int) i;
  if (i.77 <= 8) goto <D.22663>; else goto <D.22665>;
  <D.22665>:
  D.24904 = res;
  return D.24904;
}


decode_uleb128 (guint8 * buf, guint8 * * endbuf)
{
  int D.24906;
  int D.24907;
  int D.24908;
  unsigned int D.24909;
  signed char b.78;
  guint32 D.24912;
  guint8 * p;
  guint32 res;
  int shift;

  p = buf;
  res = 0;
  shift = 0;
  <D.22632>:
  {
    guint8 b;

    b = *p;
    p = p + 1;
    D.24906 = (int) b;
    D.24907 = D.24906 & 127;
    D.24908 = D.24907 << shift;
    D.24909 = (unsigned int) D.24908;
    res = D.24909 | res;
    b.78 = (signed char) b;
    if (b.78 >= 0) goto <D.22631>; else goto <D.24911>;
    <D.24911>:
    shift = shift + 7;
  }
  goto <D.22632>;
  <D.22631>:
  *endbuf = p;
  D.24912 = res;
  return D.24912;
}


get_frame_pointer (struct MonoContext * ctx, int frame_reg)
{
  mgreg_t D.24916;
  long unsigned int D.24917;
  long unsigned int D.24920;

  if (frame_reg == 15) goto <D.24914>; else goto <D.24915>;
  <D.24914>:
  D.24917 = ctx->uc_mcontext.gregs[15];
  D.24916 = (mgreg_t) D.24917;
  return D.24916;
  <D.24915>:
  if (frame_reg == 11) goto <D.24918>; else goto <D.24919>;
  <D.24918>:
  D.24920 = ctx->uc_mcontext.gregs[11];
  D.24916 = (mgreg_t) D.24920;
  return D.24916;
  <D.24919>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-gc.c", 692);
  D.24916 = 0;
  return D.24916;
}


precise_pass (struct TlsData * tls, guint8 * stack_start, guint8 * stack_end)
{
  int D.24924;
  int D.24927;
  sizetype D.24928;
  guint8 * D.24929;
  int D.24932;
  sizetype D.24933;
  int D.24934;
  sizetype D.24935;
  guint8 * D.24936;
  unsigned char D.24937;
  int D.24938;
  int D.24939;
  int D.24940;
  void * D.24945;
  int D.24948;
  int D.24949;
  sizetype D.24950;
  void * D.24953;
  int D.24955;
  int D.24956;
  void * D.24957;
  long int D.24960;
  long int D.24961;
  int findex;
  int i;
  struct FrameInfo * fi;
  guint8 * frame_start;

  if (tls == 0B) goto <D.24922>; else goto <D.24923>;
  <D.24922>:
  return;
  <D.24923>:
  D.24924 = tls->unwind_state.valid;
  if (D.24924 == 0) goto <D.24925>; else goto <D.24926>;
  <D.24925>:
  return;
  <D.24926>:
  findex = 0;
  goto <D.22841>;
  <D.22840>:
  fi = &tls->frames[findex];
  D.24927 = fi->frame_start_offset;
  D.24928 = (sizetype) D.24927;
  frame_start = stack_start + D.24928;
  D.24929 = fi->bitmap;
  if (D.24929 != 0B) goto <D.24930>; else goto <D.24931>;
  <D.24930>:
  {
    guint8 * ref_bitmap;
    gboolean live;

    ref_bitmap = fi->bitmap;
    i = 0;
    goto <D.22833>;
    <D.22832>:
    {
      struct MonoObject * * ptr;

      D.24932 = i * 8;
      D.24933 = (sizetype) D.24932;
      ptr = frame_start + D.24933;
      D.24934 = i / 8;
      D.24935 = (sizetype) D.24934;
      D.24936 = ref_bitmap + D.24935;
      D.24937 = *D.24936;
      D.24938 = (int) D.24937;
      D.24939 = i % 8;
      D.24940 = 1 << D.24939;
      live = D.24938 & D.24940;
      if (live != 0) goto <D.24941>; else goto <D.24942>;
      <D.24941>:
      {
        struct MonoObject * obj;

        obj = *ptr;
        if (obj != 0B) goto <D.24943>; else goto <D.24944>;
        <D.24943>:
        D.24945 = mono_gc_scan_object (obj);
        *ptr = D.24945;
        goto <D.24946>;
        <D.24944>:
        <D.24946>:
      }
      goto <D.24947>;
      <D.24942>:
      <D.24947>:
    }
    i = i + 1;
    <D.22833>:
    D.24948 = fi->nslots;
    if (D.24948 > i) goto <D.22832>; else goto <D.22834>;
    <D.22834>:
  }
  <D.24931>:
  i = 0;
  goto <D.22838>;
  <D.22837>:
  {
    struct MonoObject * * ptr;
    struct MonoObject * obj;

    D.24949 = fi->reg_locations[i];
    D.24950 = (sizetype) D.24949;
    ptr = stack_start + D.24950;
    obj = *ptr;
    if (obj != 0B) goto <D.24951>; else goto <D.24952>;
    <D.24951>:
    D.24953 = mono_gc_scan_object (obj);
    *ptr = D.24953;
    goto <D.24954>;
    <D.24952>:
    <D.24954>:
  }
  i = i + 1;
  <D.22838>:
  D.24955 = fi->nreg_locations;
  if (D.24955 > i) goto <D.22837>; else goto <D.22839>;
  <D.22839>:
  findex = findex + 1;
  <D.22841>:
  D.24956 = tls->nframes;
  if (D.24956 > findex) goto <D.22840>; else goto <D.22842>;
  <D.22842>:
  D.24957 = tls->ref_to_track;
  if (D.24957 != 0B) goto <D.24958>; else goto <D.24959>;
  <D.24958>:
  {
    mgreg_t * p;

    p = stack_start;
    goto <D.22845>;
    <D.22844>:
    D.24960 = *p;
    D.24957 = tls->ref_to_track;
    D.24961 = (long int) D.24957;
    if (D.24960 == D.24961) goto <D.24962>; else goto <D.24963>;
    <D.24962>:
    printf ("REF AT %p.\n", p);
    <D.24963>:
    p = p + 8;
    <D.22845>:
    if (p < stack_end) goto <D.22844>; else goto <D.22846>;
    <D.22846>:
  }
  <D.24959>:
}


thread_suspend_func (void * user_data, void * sigctx, struct MonoContext * ctx)
{
  long int D.24967;
  long unsigned int D.24968;
  long unsigned int D.24969;
  struct MonoThreadInfo * D.24972;
  _Bool D.24973;
  long int D.24974;
  long int D.24975;
  struct MonoThreadUnwindState * D.24978;
  int D.24979;
  struct MonoLMF * D.24981;
  struct MonoContext * D.24984;
  unsigned int mono_jit_tls_id.79;
  void * D.24990;
  struct MonoDomain * D.24991;
  void * D.24992;
  struct TlsData * tls;

  tls = user_data;
  if (tls == 0B) goto <D.24965>; else goto <D.24966>;
  <D.24965>:
  return;
  <D.24966>:
  D.24967 = tls->tid;
  D.24968 = (long unsigned int) D.24967;
  D.24969 = GetCurrentThreadId ();
  if (D.24968 != D.24969) goto <D.24970>; else goto <D.24971>;
  <D.24970>:
  {
    gboolean res;

    D.24972 = tls->info;
    D.24973 = D.24972 == 0B;
    D.24974 = (long int) D.24973;
    D.24975 = __builtin_expect (D.24974, 0);
    if (D.24975 != 0) goto <D.24976>; else goto <D.24977>;
    <D.24976>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 600, "tls->info");
    <D.24977>:
    D.24978 = &tls->unwind_state;
    D.24967 = tls->tid;
    D.24968 = (long unsigned int) D.24967;
    D.24972 = tls->info;
    D.24979 = D.24972->native_handle;
    res = mono_thread_state_init_from_handle (D.24978, D.24968, D.24979);
  }
  goto <D.24980>;
  <D.24971>:
  D.24981 = mono_get_lmf ();
  tls->unwind_state.unwind_data[1] = D.24981;
  if (sigctx != 0B) goto <D.24982>; else goto <D.24983>;
  <D.24982>:
  D.24984 = &tls->unwind_state.ctx;
  mono_arch_sigctx_to_monoctx (sigctx, D.24984);
  tls->unwind_state.valid = 1;
  goto <D.24985>;
  <D.24983>:
  if (ctx != 0B) goto <D.24986>; else goto <D.24987>;
  <D.24986>:
  D.24984 = &tls->unwind_state.ctx;
  memcpy (D.24984, ctx, 512);
  tls->unwind_state.valid = 1;
  goto <D.24988>;
  <D.24987>:
  tls->unwind_state.valid = 0;
  <D.24988>:
  <D.24985>:
  mono_jit_tls_id.79 = mono_jit_tls_id;
  D.24990 = pthread_getspecific (mono_jit_tls_id.79);
  tls->unwind_state.unwind_data[2] = D.24990;
  D.24991 = mono_domain_get ();
  tls->unwind_state.unwind_data[0] = D.24991;
  <D.24980>:
  D.24992 = tls->unwind_state.unwind_data[0];
  if (D.24992 == 0B) goto <D.24993>; else goto <D.24994>;
  <D.24993>:
  tls->unwind_state.valid = 0;
  return;
  <D.24994>:
}


thread_detach_func (void * user_data)
{
  struct TlsData * tls;

  tls = user_data;
  monoeg_g_free (tls);
}


thread_attach_func ()
{
  long unsigned int D.24996;
  long int D.24997;
  struct MonoThreadInfo * D.24998;
  int D.24999;
  unsigned int D.25000;
  unsigned int D.25001;
  int D.25002;
  void * D.25003;
  struct TlsData * tls;

  tls = monoeg_malloc0 (4976);
  D.24996 = GetCurrentThreadId ();
  D.24997 = (long int) D.24996;
  tls->tid = D.24997;
  D.24998 = mono_thread_info_current ();
  tls->info = D.24998;
  D.24999 = stats.tlsdata_size;
  D.25000 = (unsigned int) D.24999;
  D.25001 = D.25000 + 4976;
  D.25002 = (int) D.25001;
  stats.tlsdata_size = D.25002;
  D.25003 = tls;
  return D.25003;
}


parse_debug_options ()
{
  struct _IO_FILE * stderr.80;
  char * D.25009;
  char * * opts;
  char * * ptr;
  const char * env;

  env = monoeg_g_getenv ("MONO_GCMAP_DEBUG");
  if (env == 0B) goto <D.25005>; else goto <D.25006>;
  <D.25005>:
  return;
  <D.25006>:
  opts = monoeg_g_strsplit (env, ",", -1);
  ptr = opts;
  goto <D.23291>;
  <D.23290>:
  stderr.80 = stderr;
  fprintf (stderr.80, "Invalid format for the MONO_GCMAP_DEBUG env variable: \'%s\'\n", env);
  exit (1);
  ptr = ptr + 8;
  <D.23291>:
  if (ptr != 0B) goto <D.25008>; else goto <D.23292>;
  <D.25008>:
  D.25009 = *ptr;
  if (D.25009 != 0B) goto <D.23290>; else goto <D.23292>;
  <D.23292>:
  monoeg_g_strfreev (opts);
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__))
fprintf (struct FILE * restrict __stream, const char * restrict __fmt)
{
  int D.25011;

  D.25011 = __fprintf_chk (__stream, 1, __fmt, __builtin_va_arg_pack ());
  return D.25011;
}


__attribute__((visibility ("hidden")))
mini_gc_init_cfg (struct MonoCompile * cfg)
{
  int D.25013;

  D.25013 = mono_gc_is_moving ();
  if (D.25013 != 0) goto <D.25014>; else goto <D.25015>;
  <D.25014>:
  cfg->disable_ref_noref_stack_slot_share = 1;
  cfg->gen_write_barriers = 1;
  <D.25015>:
  mini_gc_init_gc_map (cfg);
}


mini_gc_init_gc_map (struct MonoCompile * cfg)
{
  int D.25018;
  long unsigned int D.25021;
  long unsigned int D.25022;
  int enable_gc_maps_for_aot.81;
  int D.25029;
  int precise_count.82;
  int precise_count.83;
  const gchar * D.25034;
  const gchar * D.25037;
  int D.25038;
  struct MonoMethod * D.25041;
  char * D.25042;
  const gchar * D.25043;
  int D.25044;
  struct MonoMemPool * D.25047;
  void * D.25048;

  if (0 != 0) goto <D.25016>; else goto <D.25017>;
  <D.25016>:
  return;
  <D.25017>:
  D.25018 = mono_gc_is_moving ();
  if (D.25018 == 0) goto <D.25019>; else goto <D.25020>;
  <D.25019>:
  return;
  <D.25020>:
  D.25021 = BIT_FIELD_REF <*cfg, 64, 5568>;
  D.25022 = D.25021 & 33554432;
  if (D.25022 != 0) goto <D.25023>; else goto <D.25024>;
  <D.25023>:
  enable_gc_maps_for_aot.81 = enable_gc_maps_for_aot;
  if (enable_gc_maps_for_aot.81 == 0) goto <D.25026>; else goto <D.25027>;
  <D.25026>:
  return;
  <D.25027>:
  goto <D.25028>;
  <D.25024>:
  D.25029 = mono_gc_precise_stack_mark_enabled ();
  if (D.25029 == 0) goto <D.25030>; else goto <D.25031>;
  <D.25030>:
  return;
  <D.25031>:
  <D.25028>:
  {
    static int precise_count;

    precise_count.82 = precise_count;
    precise_count.83 = precise_count.82 + 1;
    precise_count = precise_count.83;
    D.25034 = monoeg_g_getenv ("MONO_GCMAP_COUNT");
    if (D.25034 != 0B) goto <D.25035>; else goto <D.25036>;
    <D.25035>:
    D.25037 = monoeg_g_getenv ("MONO_GCMAP_COUNT");
    D.25038 = atoi (D.25037);
    precise_count.82 = precise_count;
    if (D.25038 == precise_count.82) goto <D.25039>; else goto <D.25040>;
    <D.25039>:
    D.25041 = cfg->method;
    D.25042 = mono_method_full_name (D.25041, 1);
    printf ("LAST: %s\n", D.25042);
    <D.25040>:
    D.25043 = monoeg_g_getenv ("MONO_GCMAP_COUNT");
    D.25044 = atoi (D.25043);
    precise_count.82 = precise_count;
    if (D.25044 < precise_count.82) goto <D.25045>; else goto <D.25046>;
    <D.25045>:
    return;
    <D.25046>:
    <D.25036>:
  }
  cfg->compute_gc_maps = 1;
  D.25047 = cfg->mempool;
  D.25048 = mono_mempool_alloc0 (D.25047, 96);
  cfg->gc_info = D.25048;
}


