mini_gc_enable_gc_maps_for_aot ()
{
  enable_gc_maps_for_aot = 1;
}


mini_gc_set_slot_type_from_fp (struct MonoCompile * cfg, int slot_offset, GCSlotType type)
{
  unsigned char D.23381;
  unsigned char D.23382;
  unsigned int slot_offset.0;
  unsigned int D.23386;
  _Bool D.23387;
  long int D.23388;
  long int D.23389;
  int D.23392;
  unsigned int D.23393;
  unsigned int D.23394;
  long int D.23395;
  void * D.23396;
  struct GSList * D.23397;
  struct MonoMemPool * D.23398;
  struct GSList * D.23399;
  struct MonoCompileGC * gcfg;

  gcfg = cfg->gc_info;
  D.23381 = BIT_FIELD_REF <*cfg, 8, 5632>;
  D.23382 = D.23381 & 128;
  if (D.23382 == 0) goto <D.23383>; else goto <D.23384>;
  <D.23383>:
  return;
  <D.23384>:
  slot_offset.0 = (unsigned int) slot_offset;
  D.23386 = slot_offset.0 & 7;
  D.23387 = D.23386 != 0;
  D.23388 = (long int) D.23387;
  D.23389 = __builtin_expect (D.23388, 0);
  if (D.23389 != 0) goto <D.23390>; else goto <D.23391>;
  <D.23390>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1279, "slot_offset % SIZEOF_SLOT == 0");
  <D.23391>:
  D.23392 = slot_offset << 16;
  D.23393 = (unsigned int) D.23392;
  D.23394 = D.23393 | type;
  D.23395 = (long int) D.23394;
  D.23396 = (void *) D.23395;
  D.23397 = gcfg->stack_slots_from_fp;
  D.23398 = cfg->mempool;
  D.23399 = g_slist_prepend_mempool (D.23398, D.23397, D.23396);
  gcfg->stack_slots_from_fp = D.23399;
}


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

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


mini_gc_set_slot_type_from_cfa (struct MonoCompile * cfg, int slot_offset, GCSlotType type)
{
  unsigned char D.23403;
  unsigned char D.23404;
  _Bool D.23407;
  long int D.23408;
  long int D.23409;
  unsigned int slot_offset.1;
  unsigned int D.23413;
  _Bool D.23414;
  long int D.23415;
  long int D.23416;
  int D.23419;
  unsigned int D.23420;
  unsigned int D.23421;
  long unsigned int D.23422;
  void * D.23423;
  struct GSList * D.23424;
  struct MonoMemPool * D.23425;
  struct GSList * D.23426;
  struct MonoCompileGC * gcfg;
  int slot;

  gcfg = cfg->gc_info;
  slot = slot_offset / -8;
  D.23403 = BIT_FIELD_REF <*cfg, 8, 5632>;
  D.23404 = D.23403 & 128;
  if (D.23404 == 0) goto <D.23405>; else goto <D.23406>;
  <D.23405>:
  return;
  <D.23406>:
  D.23407 = slot_offset > 0;
  D.23408 = (long int) D.23407;
  D.23409 = __builtin_expect (D.23408, 0);
  if (D.23409 != 0) goto <D.23410>; else goto <D.23411>;
  <D.23410>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1302, "slot_offset <= 0");
  <D.23411>:
  slot_offset.1 = (unsigned int) slot_offset;
  D.23413 = slot_offset.1 & 7;
  D.23414 = D.23413 != 0;
  D.23415 = (long int) D.23414;
  D.23416 = __builtin_expect (D.23415, 0);
  if (D.23416 != 0) goto <D.23417>; else goto <D.23418>;
  <D.23417>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1303, "slot_offset % SIZEOF_SLOT == 0");
  <D.23418>:
  D.23419 = slot << 16;
  D.23420 = (unsigned int) D.23419;
  D.23421 = D.23420 | type;
  D.23422 = (long unsigned int) D.23421;
  D.23423 = (void *) D.23422;
  D.23424 = gcfg->stack_slots_from_cfa;
  D.23425 = cfg->mempool;
  D.23426 = g_slist_prepend_mempool (D.23425, D.23424, D.23423);
  gcfg->stack_slots_from_cfa = D.23426;
}


mini_gc_create_gc_map (struct MonoCompile * cfg)
{
  unsigned char D.23428;
  unsigned char D.23429;
  unsigned int D.23432;
  unsigned int D.23433;

  D.23428 = BIT_FIELD_REF <*cfg, 8, 5632>;
  D.23429 = D.23428 & 128;
  if (D.23429 == 0) goto <D.23430>; else goto <D.23431>;
  <D.23430>:
  return;
  <D.23431>:
  D.23432 = cfg->comp_done;
  D.23433 = D.23432 & 16;
  if (D.23433 == 0) goto <D.23434>; else goto <D.23435>;
  <D.23434>:
  return;
  <D.23435>:
  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.23437;
  int D.23438;
  unsigned int D.23439;
  unsigned int D.23440;
  int D.23441;
  unsigned int locals_min_offset.2;
  unsigned int D.23443;
  int D.23444;
  unsigned int locals_max_offset.3;
  unsigned int D.23446;
  int D.23447;
  struct MonoInst * * D.23448;
  long unsigned int D.23449;
  long unsigned int D.23450;
  struct MonoInst * * D.23451;
  short unsigned int D.23452;
  int D.23455;
  struct MonoType * D.23456;
  struct MonoGenericSharingContext * D.23457;
  long int D.23458;
  long int D.23459;
  long int D.23460;
  long int D.23461;
  long int D.23462;
  long int D.23463;
  unsigned int D.23464;
  int D.23465;
  unsigned int D.23466;
  unsigned int D.23467;
  int D.23468;
  short unsigned int D.23469;
  int D.23470;
  <unnamed-unsigned:1> D.23471;
  int D.23472;
  int D.23473;
  unsigned int D.23474;
  int D.23475;
  unsigned int D.23476;
  _Bool D.23477;
  long int D.23478;
  long int D.23479;
  int D.23482;
  _Bool D.23483;
  long int D.23484;
  long int D.23485;
  void * D.23488;
  long int D.23489;
  unsigned int D.23490;
  unsigned int D.23491;
  int D.23494;
  unsigned int D.23495;
  unsigned int D.23496;
  int D.23497;
  int D.23498;
  int D.23499;
  int D.23500;
  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.23437 = cfg->method;
  sig = mono_method_signature (D.23437);
  D.23438 = cfg->locals_min_stack_offset;
  D.23439 = (unsigned int) D.23438;
  D.23440 = D.23439 + 7;
  D.23441 = (int) D.23440;
  locals_min_offset = D.23441 & -8;
  locals_max_offset = cfg->locals_max_stack_offset;
  locals_min_offset.2 = (unsigned int) locals_min_offset;
  D.23443 = locals_min_offset.2 + 7;
  D.23444 = (int) D.23443;
  locals_min_offset = D.23444 & -8;
  locals_max_offset.3 = (unsigned int) locals_max_offset;
  D.23446 = locals_max_offset.3 + 7;
  D.23447 = (int) D.23446;
  locals_max_offset = D.23447 & -8;
  min_offset = locals_min_offset;
  max_offset = locals_max_offset;
  i = 0;
  goto <D.23231>;
  <D.23230>:
  {
    struct MonoInst * ins;

    D.23448 = cfg->args;
    D.23449 = (long unsigned int) i;
    D.23450 = D.23449 * 8;
    D.23451 = D.23448 + D.23450;
    ins = *D.23451;
    D.23452 = ins->opcode;
    if (D.23452 == 367) goto <D.23453>; else goto <D.23454>;
    <D.23453>:
    {
      int size;
      int size_in_slots;

      D.23455 = ins->backend.is_pinvoke;
      D.23456 = ins->data.op[1].vtype;
      D.23457 = cfg->generic_sharing_context;
      size = mini_type_stack_size_full (D.23457, D.23456, 0B, D.23455);
      D.23458 = (long int) size;
      D.23459 = D.23458 + 7;
      D.23460 = D.23459 >> 3;
      size_in_slots = (int) D.23460;
      D.23461 = ins->data.op[0].const_val;
      D.23462 = (long int) min_offset;
      D.23463 = MIN_EXPR <D.23461, D.23462>;
      min_offset = (int) D.23463;
      D.23461 = ins->data.op[0].const_val;
      D.23464 = (unsigned int) D.23461;
      D.23465 = size_in_slots * 8;
      D.23466 = (unsigned int) D.23465;
      D.23467 = D.23464 + D.23466;
      D.23468 = (int) D.23467;
      max_offset = MAX_EXPR <D.23468, max_offset>;
    }
    <D.23454>:
  }
  i = i + 1;
  <D.23231>:
  D.23469 = sig->param_count;
  D.23470 = (int) D.23469;
  D.23471 = sig->hasthis;
  D.23472 = (int) D.23471;
  D.23473 = D.23470 + D.23472;
  if (D.23473 > i) goto <D.23230>; else goto <D.23232>;
  <D.23232>:
  D.23474 = cfg->frame_reg;
  D.23475 = cfg->cfa_reg;
  D.23476 = (unsigned int) D.23475;
  D.23477 = D.23474 != D.23476;
  D.23478 = (long int) D.23477;
  D.23479 = __builtin_expect (D.23478, 0);
  if (D.23479 != 0) goto <D.23480>; else goto <D.23481>;
  <D.23480>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 2030, "cfg->frame_reg == cfg->cfa_reg");
  <D.23481>:
  D.23482 = cfg->cfa_offset;
  D.23483 = D.23482 <= 0;
  D.23484 = (long int) D.23483;
  D.23485 = __builtin_expect (D.23484, 0);
  if (D.23485 != 0) goto <D.23486>; else goto <D.23487>;
  <D.23486>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 2031, "cfg->cfa_offset > 0");
  <D.23487>:
  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.23236>;
  <D.23235>:
  {
    gint data;
    int offset;

    D.23488 = l->data;
    D.23489 = (long int) D.23488;
    data = (gint) D.23489;
    offset = data >> 16;
    min_offset = MIN_EXPR <offset, min_offset>;
  }
  l = l->next;
  <D.23236>:
  if (l != 0B) goto <D.23235>; else goto <D.23237>;
  <D.23237>:
  D.23490 = cfg->flags;
  D.23491 = D.23490 & 64;
  if (D.23491 == 0) goto <D.23492>; else goto <D.23493>;
  <D.23492>:
  {
    int stack_offset;

    D.23494 = cfg->stack_offset;
    D.23495 = (unsigned int) D.23494;
    D.23496 = D.23495 + 7;
    D.23497 = (int) D.23496;
    stack_offset = D.23497 & -8;
    D.23498 = -stack_offset;
    min_offset = MIN_EXPR <D.23498, min_offset>;
  }
  <D.23493>:
  D.23499 = cfg->arch.sp_fp_offset;
  D.23500 = -D.23499;
  min_offset = MIN_EXPR <D.23500, min_offset>;
  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.23501;
  unsigned int D.23502;
  unsigned int ncallsites.4;
  unsigned int D.23504;
  long unsigned int D.23505;
  unsigned int D.23506;
  unsigned int D.23507;
  struct MonoMemPool * D.23508;
  int i.5;
  long unsigned int D.23510;
  long unsigned int D.23511;
  struct GCCallSite * * D.23512;
  void * D.23513;
  long unsigned int D.23514;
  long unsigned int D.23515;
  sizetype D.23516;
  struct GCCallSite * * D.23517;
  struct GCCallSite * D.23518;
  int D.23519;
  struct GCCallSite * * D.23520;
  struct GCCallSite * D.23521;
  int D.23522;
  _Bool D.23523;
  long int D.23524;
  long int D.23525;
  unsigned int D.23528;
  int D.23531;
  int D.23532;
  struct MonoMethod * D.23533;
  char * D.23534;
  int D.23535;
  long int D.23536;
  long int D.23537;
  long int D.23538;
  int D.23539;
  int D.23540;
  int D.23541;
  unsigned int D.23542;
  void * D.23543;
  void * D.23544;
  int D.23545;
  int D.23546;
  unsigned int D.23547;
  void * D.23548;
  void * D.23549;
  int D.23550;
  long unsigned int D.23551;
  guint8 * D.23552;
  long unsigned int D.23553;
  int D.23554;
  long unsigned int D.23555;
  long unsigned int D.23556;
  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.23251>;
  <D.23250>:
  D.23501 = bb->gc_callsites;
  D.23502 = monoeg_g_slist_length (D.23501);
  ncallsites.4 = (unsigned int) ncallsites;
  D.23504 = D.23502 + ncallsites.4;
  ncallsites = (int) D.23504;
  bb = bb->next_bb;
  <D.23251>:
  if (bb != 0B) goto <D.23250>; else goto <D.23252>;
  <D.23252>:
  D.23505 = (long unsigned int) ncallsites;
  D.23506 = (unsigned int) D.23505;
  D.23507 = D.23506 * 8;
  D.23508 = cfg->mempool;
  callsites = mono_mempool_alloc0 (D.23508, D.23507);
  i = 0;
  bb = cfg->bb_entry;
  goto <D.23257>;
  <D.23256>:
  l = bb->gc_callsites;
  goto <D.23254>;
  <D.23253>:
  i.5 = i;
  i = i.5 + 1;
  D.23510 = (long unsigned int) i.5;
  D.23511 = D.23510 * 8;
  D.23512 = callsites + D.23511;
  D.23513 = l->data;
  *D.23512 = D.23513;
  l = l->next;
  <D.23254>:
  if (l != 0B) goto <D.23253>; else goto <D.23255>;
  <D.23255>:
  bb = bb->next_bb;
  <D.23257>:
  if (bb != 0B) goto <D.23256>; else goto <D.23258>;
  <D.23258>:
  i = 1;
  goto <D.23260>;
  <D.23259>:
  D.23514 = (long unsigned int) i;
  D.23515 = D.23514 * 8;
  D.23516 = D.23515 + 18446744073709551608;
  D.23517 = callsites + D.23516;
  D.23518 = *D.23517;
  D.23519 = D.23518->pc_offset;
  D.23514 = (long unsigned int) i;
  D.23515 = D.23514 * 8;
  D.23520 = callsites + D.23515;
  D.23521 = *D.23520;
  D.23522 = D.23521->pc_offset;
  D.23523 = D.23519 >= D.23522;
  D.23524 = (long int) D.23523;
  D.23525 = __builtin_expect (D.23524, 0);
  if (D.23525 != 0) goto <D.23526>; else goto <D.23527>;
  <D.23526>:
  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.23527>:
  i = i + 1;
  <D.23260>:
  if (i < ncallsites) goto <D.23259>; else goto <D.23261>;
  <D.23261>:
  D.23528 = cfg->verbose_level;
  if (D.23528 > 1) goto <D.23529>; else goto <D.23530>;
  <D.23529>:
  D.23531 = gcfg->max_offset;
  D.23532 = gcfg->min_offset;
  D.23533 = cfg->method;
  D.23534 = mono_method_full_name (D.23533, 1);
  printf ("GC Map for %s: 0x%x-0x%x\n", D.23534, D.23532, D.23531);
  <D.23530>:
  D.23531 = gcfg->max_offset;
  D.23532 = gcfg->min_offset;
  D.23535 = D.23531 - D.23532;
  nslots = D.23535 / 8;
  nregs = 16;
  gcfg->nslots = nslots;
  gcfg->nregs = nregs;
  gcfg->callsites = callsites;
  gcfg->ncallsites = ncallsites;
  D.23536 = (long int) ncallsites;
  D.23537 = D.23536 + 7;
  D.23538 = D.23537 >> 3;
  D.23539 = (int) D.23538;
  gcfg->stack_bitmap_width = D.23539;
  D.23536 = (long int) ncallsites;
  D.23537 = D.23536 + 7;
  D.23538 = D.23537 >> 3;
  D.23539 = (int) D.23538;
  gcfg->reg_bitmap_width = D.23539;
  D.23540 = gcfg->stack_bitmap_width;
  D.23541 = D.23540 * nslots;
  D.23542 = (unsigned int) D.23541;
  D.23508 = cfg->mempool;
  D.23543 = mono_mempool_alloc0 (D.23508, D.23542);
  gcfg->stack_ref_bitmap = D.23543;
  D.23540 = gcfg->stack_bitmap_width;
  D.23541 = D.23540 * nslots;
  D.23542 = (unsigned int) D.23541;
  D.23508 = cfg->mempool;
  D.23544 = mono_mempool_alloc0 (D.23508, D.23542);
  gcfg->stack_pin_bitmap = D.23544;
  D.23545 = gcfg->reg_bitmap_width;
  D.23546 = D.23545 * nregs;
  D.23547 = (unsigned int) D.23546;
  D.23508 = cfg->mempool;
  D.23548 = mono_mempool_alloc0 (D.23508, D.23547);
  gcfg->reg_ref_bitmap = D.23548;
  D.23545 = gcfg->reg_bitmap_width;
  D.23546 = D.23545 * nregs;
  D.23547 = (unsigned int) D.23546;
  D.23508 = cfg->mempool;
  D.23549 = mono_mempool_alloc0 (D.23508, D.23547);
  gcfg->reg_pin_bitmap = D.23549;
  D.23540 = gcfg->stack_bitmap_width;
  D.23550 = D.23540 * nregs;
  D.23551 = (long unsigned int) D.23550;
  D.23552 = gcfg->stack_pin_bitmap;
  memset (D.23552, 255, D.23551);
  i = 0;
  goto <D.23263>;
  <D.23262>:
  D.23553 = cfg->used_int_regs;
  D.23554 = 1 << i;
  D.23555 = (long unsigned int) D.23554;
  D.23556 = D.23553 & D.23555;
  if (D.23556 != 0) goto <D.23557>; else goto <D.23558>;
  <D.23557>:
  set_reg_slot_everywhere (gcfg, i, 0);
  <D.23558>:
  i = i + 1;
  <D.23263>:
  if (i < nregs) goto <D.23262>; else goto <D.23264>;
  <D.23264>:
}


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

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


memset (void * __dest, int __ch, size_t __len)
{
  int D.23563;
  int D.23568;
  void * D.23570;
  long unsigned int D.23571;

  D.23563 = __builtin_constant_p (__len);
  if (D.23563 != 0) goto <D.23564>; else goto <D.23565>;
  <D.23564>:
  if (__len == 0) goto <D.23566>; else goto <D.23567>;
  <D.23566>:
  D.23568 = __builtin_constant_p (__ch);
  if (D.23568 == 0) goto <D.23561>; else goto <D.23569>;
  <D.23569>:
  if (__ch != 0) goto <D.23561>; else goto <D.23562>;
  <D.23561>:
  __warn_memset_zero_len ();
  D.23570 = __dest;
  return D.23570;
  <D.23562>:
  <D.23567>:
  <D.23565>:
  D.23571 = __builtin_object_size (__dest, 0);
  D.23570 = __builtin___memset_chk (__dest, __ch, __len, D.23571);
  return D.23570;
}


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

  cindex = 0;
  goto <D.23001>;
  <D.23000>:
  set_reg_slot (gcfg, slot, cindex, type);
  cindex = cindex + 1;
  <D.23001>:
  D.23573 = gcfg->ncallsites;
  if (D.23573 > cindex) goto <D.23000>; else goto <D.23002>;
  <D.23002>:
}


set_reg_slot (struct MonoCompileGC * gcfg, int slot, int callsite_index, GCSlotType type)
{
  int iftmp.6;
  int D.23579;
  _Bool D.23580;
  long int D.23581;
  long int D.23582;
  int D.23587;
  guint8 * D.23588;
  guint8 * D.23589;

  if (slot < 0) goto <D.23575>; else goto <D.23578>;
  <D.23578>:
  D.23579 = gcfg->nregs;
  if (D.23579 <= slot) goto <D.23575>; else goto <D.23576>;
  <D.23575>:
  iftmp.6 = 1;
  goto <D.23577>;
  <D.23576>:
  iftmp.6 = 0;
  <D.23577>:
  D.23580 = iftmp.6 != 0;
  D.23581 = (long int) D.23580;
  D.23582 = __builtin_expect (D.23581, 0);
  if (D.23582 != 0) goto <D.23583>; else goto <D.23584>;
  <D.23583>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1385, "slot >= 0 && slot < gcfg->nregs");
  <D.23584>:
  if (type == 2) goto <D.23585>; else goto <D.23586>;
  <D.23585>:
  D.23587 = gcfg->reg_bitmap_width;
  D.23588 = gcfg->reg_ref_bitmap;
  clear_bit (D.23588, D.23587, slot, callsite_index);
  D.23587 = gcfg->reg_bitmap_width;
  D.23589 = gcfg->reg_pin_bitmap;
  set_bit (D.23589, D.23587, slot, callsite_index);
  goto <D.23590>;
  <D.23586>:
  if (type == 1) goto <D.23591>; else goto <D.23592>;
  <D.23591>:
  D.23587 = gcfg->reg_bitmap_width;
  D.23588 = gcfg->reg_ref_bitmap;
  set_bit (D.23588, D.23587, slot, callsite_index);
  D.23587 = gcfg->reg_bitmap_width;
  D.23589 = gcfg->reg_pin_bitmap;
  clear_bit (D.23589, D.23587, slot, callsite_index);
  goto <D.23593>;
  <D.23592>:
  if (type == 0) goto <D.23594>; else goto <D.23595>;
  <D.23594>:
  D.23587 = gcfg->reg_bitmap_width;
  D.23588 = gcfg->reg_ref_bitmap;
  clear_bit (D.23588, D.23587, slot, callsite_index);
  D.23587 = gcfg->reg_bitmap_width;
  D.23589 = gcfg->reg_pin_bitmap;
  clear_bit (D.23589, D.23587, slot, callsite_index);
  <D.23595>:
  <D.23593>:
  <D.23590>:
}


set_bit (guint8 * bitmap, int width, int y, int x)
{
  int D.23596;
  int D.23597;
  int D.23598;
  sizetype D.23599;
  guint8 * D.23600;
  unsigned char D.23601;
  signed char D.23602;
  int D.23603;
  int D.23604;
  signed char D.23605;
  signed char D.23606;
  unsigned char D.23607;

  D.23596 = width * y;
  D.23597 = x / 8;
  D.23598 = D.23596 + D.23597;
  D.23599 = (sizetype) D.23598;
  D.23600 = bitmap + D.23599;
  D.23596 = width * y;
  D.23598 = D.23596 + D.23597;
  D.23599 = (sizetype) D.23598;
  D.23600 = bitmap + D.23599;
  D.23601 = *D.23600;
  D.23602 = (signed char) D.23601;
  D.23603 = x % 8;
  D.23604 = 1 << D.23603;
  D.23605 = (signed char) D.23604;
  D.23606 = D.23602 | D.23605;
  D.23607 = (unsigned char) D.23606;
  *D.23600 = D.23607;
}


clear_bit (guint8 * bitmap, int width, int y, int x)
{
  int D.23608;
  int D.23609;
  int D.23610;
  sizetype D.23611;
  guint8 * D.23612;
  unsigned char D.23613;
  signed char D.23614;
  int D.23615;
  int D.23616;
  signed char D.23617;
  signed char D.23618;
  signed char D.23619;
  unsigned char D.23620;

  D.23608 = width * y;
  D.23609 = x / 8;
  D.23610 = D.23608 + D.23609;
  D.23611 = (sizetype) D.23610;
  D.23612 = bitmap + D.23611;
  D.23608 = width * y;
  D.23610 = D.23608 + D.23609;
  D.23611 = (sizetype) D.23610;
  D.23612 = bitmap + D.23611;
  D.23613 = *D.23612;
  D.23614 = (signed char) D.23613;
  D.23615 = x % 8;
  D.23616 = 1 << D.23615;
  D.23617 = (signed char) D.23616;
  D.23618 = ~D.23617;
  D.23619 = D.23614 & D.23618;
  D.23620 = (unsigned char) D.23619;
  *D.23612 = D.23620;
}


process_spill_slots (struct MonoCompile * cfg)
{
  long int D.23621;
  long int D.23622;
  struct MonoSpillInfo * D.23623;
  long unsigned int D.23624;
  long unsigned int D.23625;
  struct MonoSpillInfo * D.23626;
  unsigned int bank.7;
  unsigned int D.23628;
  long int D.23631;
  long int D.23632;
  struct MonoSpillInfo * D.23633;
  long unsigned int D.23634;
  long unsigned int D.23635;
  struct MonoSpillInfo * D.23636;
  int D.23640;
  int D.23641;
  int D.23642;
  int D.23643;
  unsigned int D.23644;
  int D.23647;
  const char * iftmp.8;
  const char * D.23652;
  struct MonoSpillInfo * D.23653;
  long unsigned int D.23654;
  long unsigned int D.23655;
  struct MonoSpillInfo * D.23656;
  int D.23661;
  const char * iftmp.9;
  int D.23666;
  struct MonoSpillInfo * D.23667;
  struct MonoSpillInfo * D.23668;
  int D.23673;
  const char * iftmp.10;
  int D.23678;
  struct MonoCompileGC * gcfg;
  struct MonoBasicBlock * bb;
  struct GSList * l;
  int i;

  gcfg = cfg->gc_info;
  bb = cfg->bb_entry;
  goto <D.23031>;
  <D.23030>:
  l = bb->spill_slot_defs;
  goto <D.23028>;
  <D.23027>:
  {
    struct MonoInst * def;
    int spill_slot;
    int bank;
    int offset;
    int slot;

    def = l->data;
    D.23621 = def->data.op[0].const_val;
    spill_slot = (int) D.23621;
    D.23622 = def->data.op[1].const_val;
    bank = (int) D.23622;
    D.23623 = cfg->spill_info[bank];
    D.23624 = (long unsigned int) spill_slot;
    D.23625 = D.23624 * 4;
    D.23626 = D.23623 + D.23625;
    offset = D.23626->offset;
    slot = fp_offset_to_slot (cfg, offset);
    bank.7 = (unsigned int) bank;
    D.23628 = bank.7 + 4294967294;
    if (D.23628 <= 1) goto <D.23629>; else goto <D.23630>;
    <D.23629>:
    set_slot_everywhere (gcfg, slot, 0);
    <D.23630>:
  }
  l = l->next;
  <D.23028>:
  if (l != 0B) goto <D.23027>; else goto <D.23029>;
  <D.23029>:
  bb = bb->next_bb;
  <D.23031>:
  if (bb != 0B) goto <D.23030>; else goto <D.23032>;
  <D.23032>:
  bb = cfg->bb_entry;
  goto <D.23043>;
  <D.23042>:
  l = bb->spill_slot_defs;
  goto <D.23040>;
  <D.23039>:
  {
    struct MonoInst * def;
    int spill_slot;
    int bank;
    int offset;
    int slot;
    GCSlotType type;

    def = l->data;
    D.23631 = def->data.op[0].const_val;
    spill_slot = (int) D.23631;
    D.23632 = def->data.op[1].const_val;
    bank = (int) D.23632;
    D.23633 = cfg->spill_info[bank];
    D.23634 = (long unsigned int) spill_slot;
    D.23635 = D.23634 * 4;
    D.23636 = D.23633 + D.23635;
    offset = D.23636->offset;
    slot = fp_offset_to_slot (cfg, offset);
    if (bank == 3) goto <D.23637>; else goto <D.23638>;
    <D.23637>:
    type = 2;
    goto <D.23639>;
    <D.23638>:
    type = 1;
    <D.23639>:
    D.23640 = bb->native_offset;
    D.23641 = bb->native_length;
    D.23642 = D.23640 + D.23641;
    D.23643 = def->backend.pc_offset;
    set_slot_in_range (gcfg, slot, D.23643, D.23642, type);
    D.23644 = cfg->verbose_level;
    if (D.23644 > 1) goto <D.23645>; else goto <D.23646>;
    <D.23645>:
    D.23647 = ABS_EXPR <offset>;
    if (offset >= 0) goto <D.23649>; else goto <D.23650>;
    <D.23649>:
    iftmp.8 = "";
    goto <D.23651>;
    <D.23650>:
    iftmp.8 = "-";
    <D.23651>:
    D.23652 = slot_type_to_string (type);
    printf ("\t%s spill slot at %s0x%x(fp) (slot = %d)\n", D.23652, iftmp.8, D.23647, slot);
    <D.23646>:
  }
  l = l->next;
  <D.23040>:
  if (l != 0B) goto <D.23039>; else goto <D.23041>;
  <D.23041>:
  bb = bb->next_bb;
  <D.23043>:
  if (bb != 0B) goto <D.23042>; else goto <D.23044>;
  <D.23044>:
  i = 0;
  goto <D.23049>;
  <D.23048>:
  {
    int offset;
    int slot;

    D.23653 = cfg->spill_info[1];
    D.23654 = (long unsigned int) i;
    D.23655 = D.23654 * 4;
    D.23656 = D.23653 + D.23655;
    offset = D.23656->offset;
    if (offset == -1) goto <D.23657>; else goto <D.23658>;
    <D.23657>:
    // predicted unlikely by continue predictor.
    goto <D.23047>;
    <D.23658>:
    slot = fp_offset_to_slot (cfg, offset);
    set_slot_everywhere (gcfg, slot, 0);
    D.23644 = cfg->verbose_level;
    if (D.23644 > 1) goto <D.23659>; else goto <D.23660>;
    <D.23659>:
    D.23661 = ABS_EXPR <offset>;
    if (offset >= 0) goto <D.23663>; else goto <D.23664>;
    <D.23663>:
    iftmp.9 = "";
    goto <D.23665>;
    <D.23664>:
    iftmp.9 = "-";
    <D.23665>:
    printf ("\tfp spill slot at %s0x%x(fp) (slot = %d)\n", iftmp.9, D.23661, slot);
    <D.23660>:
  }
  <D.23047>:
  i = i + 1;
  <D.23049>:
  D.23666 = cfg->spill_info_len[1];
  if (D.23666 > i) goto <D.23048>; else goto <D.23050>;
  <D.23050>:
  i = 0;
  goto <D.23055>;
  <D.23054>:
  {
    int offset;
    int slot;

    D.23667 = cfg->spill_info[0];
    D.23654 = (long unsigned int) i;
    D.23655 = D.23654 * 4;
    D.23668 = D.23667 + D.23655;
    offset = D.23668->offset;
    if (offset == -1) goto <D.23669>; else goto <D.23670>;
    <D.23669>:
    // predicted unlikely by continue predictor.
    goto <D.23053>;
    <D.23670>:
    slot = fp_offset_to_slot (cfg, offset);
    set_slot_everywhere (gcfg, slot, 0);
    D.23644 = cfg->verbose_level;
    if (D.23644 > 1) goto <D.23671>; else goto <D.23672>;
    <D.23671>:
    D.23673 = ABS_EXPR <offset>;
    if (offset >= 0) goto <D.23675>; else goto <D.23676>;
    <D.23675>:
    iftmp.10 = "";
    goto <D.23677>;
    <D.23676>:
    iftmp.10 = "-";
    <D.23677>:
    printf ("\tint spill slot at %s0x%x(fp) (slot = %d)\n", iftmp.10, D.23673, slot);
    <D.23672>:
  }
  <D.23053>:
  i = i + 1;
  <D.23055>:
  D.23678 = cfg->spill_info_len[0];
  if (D.23678 > i) goto <D.23054>; else goto <D.23056>;
  <D.23056>:
}


set_slot_in_range (struct MonoCompileGC * gcfg, int slot, int from, int to, GCSlotType type)
{
  struct GCCallSite * * D.23679;
  long unsigned int D.23680;
  long unsigned int D.23681;
  struct GCCallSite * * D.23682;
  struct GCCallSite * D.23683;
  _Bool D.23684;
  _Bool D.23685;
  _Bool D.23686;
  int D.23689;
  int cindex;

  cindex = 0;
  goto <D.22986>;
  <D.22985>:
  {
    int callsite_offset;

    D.23679 = gcfg->callsites;
    D.23680 = (long unsigned int) cindex;
    D.23681 = D.23680 * 8;
    D.23682 = D.23679 + D.23681;
    D.23683 = *D.23682;
    callsite_offset = D.23683->pc_offset;
    D.23684 = callsite_offset >= from;
    D.23685 = callsite_offset < to;
    D.23686 = D.23684 & D.23685;
    if (D.23686 != 0) goto <D.23687>; else goto <D.23688>;
    <D.23687>:
    set_slot (gcfg, slot, cindex, type);
    <D.23688>:
  }
  cindex = cindex + 1;
  <D.22986>:
  D.23689 = gcfg->ncallsites;
  if (D.23689 > cindex) goto <D.22985>; else goto <D.22987>;
  <D.22987>:
}


set_slot (struct MonoCompileGC * gcfg, int slot, int callsite_index, GCSlotType type)
{
  int iftmp.11;
  int D.23695;
  _Bool D.23696;
  long int D.23697;
  long int D.23698;
  int D.23703;
  guint8 * D.23704;
  guint8 * D.23705;

  if (slot < 0) goto <D.23691>; else goto <D.23694>;
  <D.23694>:
  D.23695 = gcfg->nslots;
  if (D.23695 <= slot) goto <D.23691>; else goto <D.23692>;
  <D.23691>:
  iftmp.11 = 1;
  goto <D.23693>;
  <D.23692>:
  iftmp.11 = 0;
  <D.23693>:
  D.23696 = iftmp.11 != 0;
  D.23697 = (long int) D.23696;
  D.23698 = __builtin_expect (D.23697, 0);
  if (D.23698 != 0) goto <D.23699>; else goto <D.23700>;
  <D.23699>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1327, "slot >= 0 && slot < gcfg->nslots");
  <D.23700>:
  if (type == 2) goto <D.23701>; else goto <D.23702>;
  <D.23701>:
  D.23703 = gcfg->stack_bitmap_width;
  D.23704 = gcfg->stack_ref_bitmap;
  clear_bit (D.23704, D.23703, slot, callsite_index);
  D.23703 = gcfg->stack_bitmap_width;
  D.23705 = gcfg->stack_pin_bitmap;
  set_bit (D.23705, D.23703, slot, callsite_index);
  goto <D.23706>;
  <D.23702>:
  if (type == 1) goto <D.23707>; else goto <D.23708>;
  <D.23707>:
  D.23703 = gcfg->stack_bitmap_width;
  D.23704 = gcfg->stack_ref_bitmap;
  set_bit (D.23704, D.23703, slot, callsite_index);
  D.23703 = gcfg->stack_bitmap_width;
  D.23705 = gcfg->stack_pin_bitmap;
  clear_bit (D.23705, D.23703, slot, callsite_index);
  goto <D.23709>;
  <D.23708>:
  if (type == 0) goto <D.23710>; else goto <D.23711>;
  <D.23710>:
  D.23703 = gcfg->stack_bitmap_width;
  D.23704 = gcfg->stack_ref_bitmap;
  clear_bit (D.23704, D.23703, slot, callsite_index);
  D.23703 = gcfg->stack_bitmap_width;
  D.23705 = gcfg->stack_pin_bitmap;
  clear_bit (D.23705, D.23703, slot, callsite_index);
  <D.23711>:
  <D.23709>:
  <D.23706>:
}


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

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


fp_offset_to_slot (struct MonoCompile * cfg, int offset)
{
  int D.23714;
  int D.23715;
  int D.23716;
  struct MonoCompileGC * gcfg;

  gcfg = cfg->gc_info;
  D.23715 = gcfg->min_offset;
  D.23716 = offset - D.23715;
  D.23714 = D.23716 / 8;
  return D.23714;
}


set_slot_everywhere (struct MonoCompileGC * gcfg, int slot, GCSlotType type)
{
  long unsigned int D.23720;
  sizetype D.23721;
  void * D.23722;
  void * D.23723;
  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.23718>; else goto <D.23719>;
  <D.23718>:
  D.23720 = (long unsigned int) width;
  D.23721 = (sizetype) pos;
  D.23722 = ref_bitmap + D.23721;
  memset (D.23722, 0, D.23720);
  D.23720 = (long unsigned int) width;
  D.23721 = (sizetype) pos;
  D.23723 = pin_bitmap + D.23721;
  memset (D.23723, 255, D.23720);
  goto <D.23724>;
  <D.23719>:
  if (type == 1) goto <D.23725>; else goto <D.23726>;
  <D.23725>:
  D.23720 = (long unsigned int) width;
  D.23721 = (sizetype) pos;
  D.23722 = ref_bitmap + D.23721;
  memset (D.23722, 255, D.23720);
  D.23720 = (long unsigned int) width;
  D.23721 = (sizetype) pos;
  D.23723 = pin_bitmap + D.23721;
  memset (D.23723, 0, D.23720);
  goto <D.23727>;
  <D.23726>:
  if (type == 0) goto <D.23728>; else goto <D.23729>;
  <D.23728>:
  D.23720 = (long unsigned int) width;
  D.23721 = (sizetype) pos;
  D.23722 = ref_bitmap + D.23721;
  memset (D.23722, 0, D.23720);
  D.23720 = (long unsigned int) width;
  D.23721 = (sizetype) pos;
  D.23723 = pin_bitmap + D.23721;
  memset (D.23723, 0, D.23720);
  <D.23729>:
  <D.23727>:
  <D.23724>:
}


process_other_slots (struct MonoCompile * cfg)
{
  void * D.23730;
  long int D.23731;
  unsigned int D.23732;
  int D.23733;
  int D.23734;
  int D.23735;
  int D.23736;
  int D.23737;
  unsigned int D.23738;
  int D.23743;
  int D.23744;
  const char * iftmp.12;
  int D.23749;
  struct MonoCompileGC * gcfg;
  struct GSList * l;

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

    D.23730 = l->data;
    D.23731 = (long int) D.23730;
    data = (guint) D.23731;
    D.23732 = data >> 16;
    cfa_slot = (int) D.23732;
    type = data & 255;
    D.23733 = cfg->cfa_offset;
    D.23734 = D.23733 / 8;
    D.23735 = D.23734 - cfa_slot;
    D.23736 = gcfg->min_offset;
    D.23737 = D.23736 / -8;
    slot = D.23735 + D.23737;
    set_slot_everywhere (gcfg, slot, type);
    D.23738 = cfg->verbose_level;
    if (D.23738 > 1) goto <D.23739>; else goto <D.23740>;
    <D.23739>:
    {
      int fp_offset;

      fp_offset = slot_to_fp_offset (cfg, slot);
      if (type == 0) goto <D.23741>; else goto <D.23742>;
      <D.23741>:
      D.23743 = cfa_slot * 8;
      D.23744 = ABS_EXPR <fp_offset>;
      if (fp_offset >= 0) goto <D.23746>; else goto <D.23747>;
      <D.23746>:
      iftmp.12 = "";
      goto <D.23748>;
      <D.23747>:
      iftmp.12 = "-";
      <D.23748>:
      printf ("\tnoref slot at %s0x%x(fp) (slot = %d) (cfa - 0x%x)\n", iftmp.12, D.23744, slot, D.23743);
      <D.23742>:
    }
    <D.23740>:
  }
  l = l->next;
  <D.23068>:
  if (l != 0B) goto <D.23067>; else goto <D.23069>;
  <D.23069>:
  l = gcfg->stack_slots_from_fp;
  goto <D.23075>;
  <D.23074>:
  {
    gint data;
    int offset;
    GCSlotType type;
    int slot;

    D.23730 = l->data;
    D.23731 = (long int) D.23730;
    data = (gint) D.23731;
    offset = data >> 16;
    D.23749 = data & 255;
    type = (GCSlotType) D.23749;
    slot = fp_offset_to_slot (cfg, offset);
    set_slot_everywhere (gcfg, slot, type);
    D.23738 = cfg->verbose_level;
    if (D.23738 > 1) goto <D.23750>; else goto <D.23751>;
    <D.23750>:
    if (type == 1) goto <D.23752>; else goto <D.23753>;
    <D.23752>:
    printf ("\tref slot at fp+0x%x (slot = %d)\n", offset, slot);
    goto <D.23754>;
    <D.23753>:
    if (type == 0) goto <D.23755>; else goto <D.23756>;
    <D.23755>:
    printf ("\tnoref slot at 0x%x(fp) (slot = %d)\n", offset, slot);
    <D.23756>:
    <D.23754>:
    <D.23751>:
  }
  l = l->next;
  <D.23075>:
  if (l != 0B) goto <D.23074>; else goto <D.23076>;
  <D.23076>:
}


slot_to_fp_offset (struct MonoCompile * cfg, int slot)
{
  int D.23757;
  int D.23758;
  int D.23759;
  struct MonoCompileGC * gcfg;

  gcfg = cfg->gc_info;
  D.23758 = slot * 8;
  D.23759 = gcfg->min_offset;
  D.23757 = D.23758 + D.23759;
  return D.23757;
}


process_param_area_slots (struct MonoCompile * cfg)
{
  unsigned int D.23761;
  unsigned int D.23762;
  int D.23765;
  long unsigned int D.23766;
  unsigned int D.23767;
  unsigned int D.23768;
  struct MonoMemPool * D.23769;
  struct GCCallSite * * D.23770;
  long unsigned int D.23771;
  long unsigned int D.23772;
  struct GCCallSite * * D.23773;
  long int D.23774;
  int D.23775;
  struct MonoGenericSharingContext * D.23778;
  int D.23779;
  int iftmp.13;
  int D.23785;
  _Bool D.23787;
  long int D.23788;
  long int D.23789;
  long unsigned int D.23792;
  long unsigned int D.23793;
  gboolean * D.23794;
  long unsigned int D.23795;
  unsigned int D.23796;
  long unsigned int D.23797;
  int D.23798;
  long unsigned int D.23799;
  gboolean * D.23800;
  int D.23801;
  struct MonoCompileGC * gcfg;
  int cindex;
  int i;
  gboolean * is_param;

  gcfg = cfg->gc_info;
  D.23761 = cfg->flags;
  D.23762 = D.23761 & 1;
  if (D.23762 != 0) goto <D.23763>; else goto <D.23764>;
  <D.23763>:
  return;
  <D.23764>:
  D.23765 = gcfg->nslots;
  D.23766 = (long unsigned int) D.23765;
  D.23767 = (unsigned int) D.23766;
  D.23768 = D.23767 * 4;
  D.23769 = cfg->mempool;
  is_param = mono_mempool_alloc0 (D.23769, D.23768);
  cindex = 0;
  goto <D.23179>;
  <D.23178>:
  {
    struct GCCallSite * callsite;
    struct GSList * l;

    D.23770 = gcfg->callsites;
    D.23771 = (long unsigned int) cindex;
    D.23772 = D.23771 * 8;
    D.23773 = D.23770 + D.23772;
    callsite = *D.23773;
    l = callsite->param_slots;
    goto <D.23176>;
    <D.23175>:
    {
      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.23774 = def->data.op[0].const_val;
          sp_offset = (int) D.23774;
          fp_offset = sp_offset_to_fp_offset (cfg, sp_offset);
          slot = fp_offset_to_slot (cfg, fp_offset);
          D.23775 = mono_type_is_struct (t);
          if (D.23775 != 0) goto <D.23776>; else goto <D.23777>;
          <D.23776>:
          D.23778 = cfg->generic_sharing_context;
          D.23779 = mini_type_stack_size_full (D.23778, t, &align, 0);
          size = (guint32) D.23779;
          goto <D.23780>;
          <D.23777>:
          size = 8;
          <D.23780>:
          i = 0;
          goto <D.23173>;
          <D.23172>:
          D.23785 = slot + i;
          if (D.23785 < 0) goto <D.23782>; else goto <D.23786>;
          <D.23786>:
          D.23785 = slot + i;
          D.23765 = gcfg->nslots;
          if (D.23785 >= D.23765) goto <D.23782>; else goto <D.23783>;
          <D.23782>:
          iftmp.13 = 1;
          goto <D.23784>;
          <D.23783>:
          iftmp.13 = 0;
          <D.23784>:
          D.23787 = iftmp.13 != 0;
          D.23788 = (long int) D.23787;
          D.23789 = __builtin_expect (D.23788, 0);
          if (D.23789 != 0) goto <D.23790>; else goto <D.23791>;
          <D.23790>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1913, "slot + i >= 0 && slot + i < gcfg->nslots");
          <D.23791>:
          D.23785 = slot + i;
          D.23792 = (long unsigned int) D.23785;
          D.23793 = D.23792 * 4;
          D.23794 = is_param + D.23793;
          *D.23794 = 1;
          i = i + 1;
          <D.23173>:
          D.23795 = (long unsigned int) i;
          D.23796 = size / 8;
          D.23797 = (long unsigned int) D.23796;
          if (D.23795 < D.23797) goto <D.23172>; else goto <D.23174>;
          <D.23174>:
        }
      finally
        {
          align = {CLOBBER};
        }
    }
    l = l->next;
    <D.23176>:
    if (l != 0B) goto <D.23175>; else goto <D.23177>;
    <D.23177>:
  }
  cindex = cindex + 1;
  <D.23179>:
  D.23798 = gcfg->ncallsites;
  if (D.23798 > cindex) goto <D.23178>; else goto <D.23180>;
  <D.23180>:
  i = 0;
  goto <D.23182>;
  <D.23181>:
  D.23795 = (long unsigned int) i;
  D.23799 = D.23795 * 4;
  D.23800 = is_param + D.23799;
  D.23801 = *D.23800;
  if (D.23801 != 0) goto <D.23802>; else goto <D.23803>;
  <D.23802>:
  set_slot_everywhere (gcfg, i, 0);
  <D.23803>:
  i = i + 1;
  <D.23182>:
  D.23765 = gcfg->nslots;
  if (D.23765 > i) goto <D.23181>; else goto <D.23183>;
  <D.23183>:
}


sp_offset_to_fp_offset (struct MonoCompile * cfg, int sp_offset)
{
  unsigned int D.23805;
  _Bool D.23806;
  long int D.23807;
  long int D.23808;
  int D.23811;
  int D.23812;

  D.23805 = cfg->frame_reg;
  D.23806 = D.23805 != 5;
  D.23807 = (long int) D.23806;
  D.23808 = __builtin_expect (D.23807, 0);
  if (D.23808 != 0) goto <D.23809>; else goto <D.23810>;
  <D.23809>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1864, "cfg->frame_reg == AMD64_RBP");
  <D.23810>:
  D.23812 = cfg->arch.sp_fp_offset;
  D.23811 = sp_offset - D.23812;
  return D.23811;
}


process_variables (struct MonoCompile * cfg)
{
  struct MonoMethod * D.23814;
  int D.23815;
  int D.23816;
  int D.23817;
  unsigned int D.23818;
  long unsigned int D.23819;
  long unsigned int D.23820;
  struct MonoBasicBlock * D.23821;
  short unsigned int D.23822;
  long int D.23825;
  long unsigned int D.23826;
  long unsigned int D.23827;
  int * D.23828;
  int D.23829;
  int D.23832;
  _Bool D.23833;
  long int D.23834;
  long int D.23835;
  struct MonoInst * * D.23838;
  long unsigned int D.23839;
  long unsigned int D.23840;
  struct MonoInst * * D.23841;
  unsigned int i.14;
  unsigned int D.23843;
  _Bool D.23844;
  struct MonoInst * D.23845;
  short unsigned int D.23850;
  int D.23852;
  struct MonoMethodVar * D.23853;
  long unsigned int D.23854;
  unsigned char D.23855;
  unsigned char D.23856;
  struct MonoInst * * D.23859;
  struct MonoInst * D.23860;
  struct MonoClass * D.23863;
  unsigned char D.23864;
  unsigned char D.23865;
  <unnamed-unsigned:1> D.23868;
  _Bool D.23871;
  long int D.23872;
  long int D.23873;
  int D.23879;
  _Bool D.23880;
  struct GCCallSite * * D.23884;
  long unsigned int D.23885;
  long unsigned int D.23886;
  struct GCCallSite * * D.23887;
  struct GCCallSite * D.23888;
  guint8 * D.23889;
  int D.23890;
  sizetype D.23891;
  guint8 * D.23892;
  unsigned char D.23893;
  int D.23894;
  int D.23895;
  int D.23896;
  int D.23897;
  int D.23900;
  unsigned int D.23901;
  int D.23904;
  const char * D.23905;
  const char * iftmp.15;
  const char * D.23910;
  long int D.23913;
  unsigned long D.23914;
  unsigned long D.23915;
  int D.23918;
  int D.23919;
  unsigned char D.23922;
  int D.23923;
  int D.23924;
  int pos.16;
  struct MonoType * D.23930;
  char * D.23931;
  int D.23932;
  const char * D.23933;
  int D.23934;
  int D.23937;
  struct MonoClass * D.23940;
  long int D.23942;
  long int D.23943;
  long int D.23944;
  char * D.23947;
  unsigned int size_in_slots.17;
  unsigned int D.23949;
  unsigned int D.23950;
  int D.23951;
  unsigned int D.23952;
  unsigned int D.23953;
  int D.23954;
  int D.23955;
  const char * D.23956;
  int D.23957;
  const char * D.23958;
  unsigned char D.23959;
  unsigned char D.23960;
  unsigned int j.18;
  unsigned int D.23966;
  int D.23967;
  long unsigned int D.23972;
  long unsigned int D.23973;
  int * D.23974;
  int D.23975;
  int D.23982;
  long unsigned int D.23985;
  long unsigned int D.23986;
  long unsigned int D.23987;
  gsize * D.23988;
  long unsigned int D.23989;
  int D.23990;
  long unsigned int D.23991;
  long unsigned int D.23992;
  GCSlotType iftmp.19;
  unsigned int D.23999;
  int D.24000;
  int numbits.20;
  int D.24006;
  unsigned int D.24007;
  unsigned int D.24008;
  int D.24009;
  const char * iftmp.21;
  long int D.24021;
  int D.24023;
  long int D.24024;
  unsigned char D.24025;
  unsigned char D.24026;
  char * D.24036;
  int iftmp.22;
  const char * iftmp.23;
  int D.24045;
  char * D.24050;
  int iftmp.24;
  const char * iftmp.25;
  const char * iftmp.26;
  unsigned int D.24065;
  int D.24066;
  char * D.24069;
  int iftmp.27;
  unsigned int D.24073;
  int D.24074;
  const char * iftmp.28;
  int D.24080;
  unsigned int D.24090;
  int D.24091;
  char * D.24095;
  int iftmp.29;
  const char * iftmp.30;
  char * D.24111;
  int iftmp.31;
  const char * iftmp.32;
  const char * iftmp.33;
  unsigned int D.24124;
  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.23814 = cfg->method;
  sig = mono_method_signature (D.23814);
  locals_min_offset = gcfg->locals_min_offset;
  locals_max_offset = gcfg->locals_max_offset;
  D.23815 = gcfg->min_offset;
  D.23816 = locals_min_offset - D.23815;
  locals_min_slot = D.23816 / 8;
  D.23815 = gcfg->min_offset;
  D.23817 = locals_max_offset - D.23815;
  locals_max_slot = D.23817 / 8;
  i = locals_min_slot;
  goto <D.23103>;
  <D.23102>:
  set_slot_everywhere (gcfg, i, 0);
  i = i + 1;
  <D.23103>:
  if (i < locals_max_slot) goto <D.23102>; else goto <D.23104>;
  <D.23104>:
  D.23818 = cfg->next_vreg;
  D.23819 = (long unsigned int) D.23818;
  D.23820 = D.23819 * 4;
  pc_offsets = monoeg_malloc0 (D.23820);
  D.23821 = cfg->bb_entry;
  bb = D.23821->next_bb;
  tmp = bb->code;
  goto <D.23107>;
  <D.23106>:
  D.23822 = tmp->opcode;
  if (D.23822 == 1000) goto <D.23823>; else goto <D.23824>;
  <D.23823>:
  {
    int vreg;

    D.23825 = tmp->data.op[1].const_val;
    vreg = (int) D.23825;
    D.23826 = (long unsigned int) vreg;
    D.23827 = D.23826 * 4;
    D.23828 = pc_offsets + D.23827;
    D.23829 = *D.23828;
    if (D.23829 == 0) goto <D.23830>; else goto <D.23831>;
    <D.23830>:
    D.23832 = tmp->backend.pc_offset;
    D.23833 = D.23832 <= 0;
    D.23834 = (long int) D.23833;
    D.23835 = __builtin_expect (D.23834, 0);
    if (D.23835 != 0) goto <D.23836>; else goto <D.23837>;
    <D.23836>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1613, "tmp->backend.pc_offset > 0");
    <D.23837>:
    D.23826 = (long unsigned int) vreg;
    D.23827 = D.23826 * 4;
    D.23828 = pc_offsets + D.23827;
    D.23832 = tmp->backend.pc_offset;
    *D.23828 = D.23832;
    <D.23831>:
  }
  <D.23824>:
  tmp = tmp->next;
  <D.23107>:
  if (tmp != 0B) goto <D.23106>; else goto <D.23108>;
  <D.23108>:
  i = 0;
  goto <D.23150>;
  <D.23149>:
  {
    struct MonoInst * ins;
    struct MonoType * t;
    struct MonoMethodVar * vmv;
    guint32 pos;
    gboolean byref;
    gboolean is_this;
    gboolean is_arg;

    D.23838 = cfg->varinfo;
    D.23839 = (long unsigned int) i;
    D.23840 = D.23839 * 8;
    D.23841 = D.23838 + D.23840;
    ins = *D.23841;
    t = ins->data.op[1].vtype;
    is_this = 0;
    i.14 = (unsigned int) i;
    D.23843 = cfg->locals_start;
    D.23844 = i.14 < D.23843;
    is_arg = (gboolean) D.23844;
    D.23845 = cfg->ret;
    if (D.23845 == ins) goto <D.23846>; else goto <D.23847>;
    <D.23846>:
    D.23850 = ins->opcode;
    if (D.23850 != 367) goto <D.23848>; else goto <D.23851>;
    <D.23851>:
    D.23852 = mono_type_is_struct (t);
    if (D.23852 == 0) goto <D.23848>; else goto <D.23849>;
    <D.23848>:
    // predicted unlikely by continue predictor.
    goto <D.23116>;
    <D.23849>:
    <D.23847>:
    D.23853 = cfg->vars;
    D.23839 = (long unsigned int) i;
    D.23854 = D.23839 * 80;
    vmv = D.23853 + D.23854;
    D.23855 = BIT_FIELD_REF <*sig, 8, 112>;
    D.23856 = D.23855 & 64;
    if (D.23856 != 0) goto <D.23857>; else goto <D.23858>;
    <D.23857>:
    D.23859 = cfg->args;
    D.23860 = *D.23859;
    if (D.23860 == ins) goto <D.23861>; else goto <D.23862>;
    <D.23861>:
    D.23814 = cfg->method;
    D.23863 = D.23814->klass;
    D.23864 = BIT_FIELD_REF <*D.23863, 8, 256>;
    D.23865 = D.23864 & 8;
    if (D.23865 == 0) goto <D.23866>; else goto <D.23867>;
    <D.23866>:
    D.23814 = cfg->method;
    D.23863 = D.23814->klass;
    t = &D.23863->byval_arg;
    is_this = 1;
    <D.23867>:
    <D.23862>:
    <D.23858>:
    D.23868 = t->byref;
    byref = (gboolean) D.23868;
    D.23850 = ins->opcode;
    if (D.23850 == 366) goto <D.23869>; else goto <D.23870>;
    <D.23869>:
    {
      int hreg;
      GCSlotType slot_type;

      t = mini_type_get_underlying_type (0B, t);
      hreg = ins->dreg;
      D.23871 = hreg > 15;
      D.23872 = (long int) D.23871;
      D.23873 = __builtin_expect (D.23872, 0);
      if (D.23873 != 0) goto <D.23874>; else goto <D.23875>;
      <D.23874>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1653, "hreg < MONO_MAX_IREGS");
      <D.23875>:
      if (byref != 0) goto <D.23876>; else goto <D.23877>;
      <D.23876>:
      slot_type = 2;
      goto <D.23878>;
      <D.23877>:
      D.23879 = mini_type_is_reference (cfg, t);
      D.23880 = D.23879 != 0;
      slot_type = (GCSlotType) D.23880;
      <D.23878>:
      if (slot_type == 2) goto <D.23881>; else goto <D.23882>;
      <D.23881>:
      set_reg_slot_everywhere (gcfg, hreg, slot_type);
      goto <D.23883>;
      <D.23882>:
      cindex = 0;
      goto <D.23120>;
      <D.23119>:
      D.23884 = gcfg->callsites;
      D.23885 = (long unsigned int) cindex;
      D.23886 = D.23885 * 8;
      D.23887 = D.23884 + D.23886;
      D.23888 = *D.23887;
      D.23889 = D.23888->liveness;
      D.23890 = i / 8;
      D.23891 = (sizetype) D.23890;
      D.23892 = D.23889 + D.23891;
      D.23893 = *D.23892;
      D.23894 = (int) D.23893;
      D.23895 = i % 8;
      D.23896 = D.23894 >> D.23895;
      D.23897 = D.23896 & 1;
      if (D.23897 != 0) goto <D.23898>; else goto <D.23899>;
      <D.23898>:
      set_reg_slot (gcfg, hreg, cindex, slot_type);
      <D.23899>:
      cindex = cindex + 1;
      <D.23120>:
      D.23900 = gcfg->ncallsites;
      if (D.23900 > cindex) goto <D.23119>; else goto <D.23121>;
      <D.23121>:
      <D.23883>:
      D.23901 = cfg->verbose_level;
      if (D.23901 > 1) goto <D.23902>; else goto <D.23903>;
      <D.23902>:
      D.23904 = vmv->vreg;
      D.23905 = mono_arch_regname (hreg);
      if (is_arg != 0) goto <D.23907>; else goto <D.23908>;
      <D.23907>:
      iftmp.15 = "arg ";
      goto <D.23909>;
      <D.23908>:
      iftmp.15 = "";
      <D.23909>:
      D.23910 = slot_type_to_string (slot_type);
      printf ("\t%s %sreg %s(R%d)\n", D.23910, iftmp.15, D.23905, D.23904);
      <D.23903>:
      // predicted unlikely by continue predictor.
      goto <D.23116>;
    }
    <D.23870>:
    D.23850 = ins->opcode;
    if (D.23850 != 367) goto <D.23911>; else goto <D.23912>;
    <D.23911>:
    // predicted unlikely by continue predictor.
    goto <D.23116>;
    <D.23912>:
    D.23913 = ins->data.op[0].const_val;
    D.23914 = (unsigned long) D.23913;
    D.23915 = D.23914 & 7;
    if (D.23915 != 0) goto <D.23916>; else goto <D.23917>;
    <D.23916>:
    // predicted unlikely by continue predictor.
    goto <D.23116>;
    <D.23917>:
    D.23913 = ins->data.op[0].const_val;
    D.23918 = (int) D.23913;
    D.23919 = fp_offset_to_slot (cfg, D.23918);
    pos = (guint32) D.23919;
    if (is_arg != 0) goto <D.23920>; else goto <D.23921>;
    <D.23920>:
    D.23922 = ins->flags;
    D.23923 = (int) D.23922;
    D.23924 = D.23923 & 2;
    if (D.23924 != 0) goto <D.23925>; else goto <D.23926>;
    <D.23925>:
    pos.16 = (int) pos;
    set_slot_everywhere (gcfg, pos.16, 0);
    D.23901 = cfg->verbose_level;
    if (D.23901 > 1) goto <D.23928>; else goto <D.23929>;
    <D.23928>:
    D.23930 = ins->data.op[1].vtype;
    D.23931 = mono_type_full_name (D.23930);
    D.23913 = ins->data.op[0].const_val;
    D.23918 = (int) D.23913;
    D.23932 = get_offset_val (D.23918);
    D.23913 = ins->data.op[0].const_val;
    D.23918 = (int) D.23913;
    D.23933 = get_offset_sign (D.23918);
    printf ("\tdead arg at fp%s0x%x (slot = %d): %s\n", D.23933, D.23932, pos, D.23931);
    <D.23929>:
    // predicted unlikely by continue predictor.
    goto <D.23116>;
    <D.23926>:
    <D.23921>:
    D.23934 = mono_type_is_struct (t);
    if (D.23934 != 0) goto <D.23935>; else goto <D.23936>;
    <D.23935>:
    {
      int numbits;
      int j;
      gsize * bitmap;
      gboolean pin;
      int size;
      int size_in_slots;

      try
        {
          numbits = 0;
          bitmap = 0B;
          pin = 0;
          D.23937 = ins->backend.is_pinvoke;
          if (D.23937 != 0) goto <D.23938>; else goto <D.23939>;
          <D.23938>:
          D.23940 = ins->klass;
          size = mono_class_native_size (D.23940, 0B);
          goto <D.23941>;
          <D.23939>:
          D.23940 = ins->klass;
          size = mono_class_value_size (D.23940, 0B);
          <D.23941>:
          D.23942 = (long int) size;
          D.23943 = D.23942 + 7;
          D.23944 = D.23943 >> 3;
          size_in_slots = (int) D.23944;
          D.23901 = cfg->verbose_level;
          if (D.23901 > 1) goto <D.23945>; else goto <D.23946>;
          <D.23945>:
          D.23930 = ins->data.op[1].vtype;
          D.23947 = mono_type_full_name (D.23930);
          size_in_slots.17 = (unsigned int) size_in_slots;
          D.23949 = pos + size_in_slots.17;
          D.23913 = ins->data.op[0].const_val;
          D.23950 = (unsigned int) D.23913;
          D.23951 = size_in_slots * 8;
          D.23952 = (unsigned int) D.23951;
          D.23953 = D.23950 + D.23952;
          D.23954 = (int) D.23953;
          D.23955 = get_offset_val (D.23954);
          D.23913 = ins->data.op[0].const_val;
          D.23918 = (int) D.23913;
          D.23956 = get_offset_sign (D.23918);
          D.23913 = ins->data.op[0].const_val;
          D.23918 = (int) D.23913;
          D.23957 = get_offset_val (D.23918);
          D.23913 = ins->data.op[0].const_val;
          D.23918 = (int) D.23913;
          D.23958 = get_offset_sign (D.23918);
          D.23904 = vmv->vreg;
          printf ("\tvtype R%d at %s0x%x(fp)-%s0x%x(fp) (slot %d-%d): %s\n", D.23904, D.23958, D.23957, D.23956, D.23955, pos, D.23949, D.23947);
          <D.23946>:
          D.23940 = ins->klass;
          D.23959 = BIT_FIELD_REF <*D.23940, 8, 280>;
          D.23960 = D.23959 & 8;
          if (D.23960 == 0) goto <D.23961>; else goto <D.23962>;
          <D.23961>:
          if (is_arg != 0) goto <D.23963>; else goto <D.23964>;
          <D.23963>:
          j = 0;
          goto <D.23129>;
          <D.23128>:
          j.18 = (unsigned int) j;
          D.23966 = pos + j.18;
          D.23967 = (int) D.23966;
          set_slot_everywhere (gcfg, D.23967, 0);
          j = j + 1;
          <D.23129>:
          if (j < size_in_slots) goto <D.23128>; else goto <D.23130>;
          <D.23130>:
          <D.23964>:
          // predicted unlikely by continue predictor.
          goto <D.23116>;
          <D.23962>:
          bitmap = get_vtype_bitmap (t, &numbits);
          if (bitmap == 0B) goto <D.23968>; else goto <D.23969>;
          <D.23968>:
          pin = 1;
          <D.23969>:
          if (is_arg == 0) goto <D.23970>; else goto <D.23971>;
          <D.23970>:
          D.23904 = vmv->vreg;
          D.23972 = (long unsigned int) D.23904;
          D.23973 = D.23972 * 4;
          D.23974 = pc_offsets + D.23973;
          D.23975 = *D.23974;
          if (D.23975 == 0) goto <D.23976>; else goto <D.23977>;
          <D.23976>:
          pin = 1;
          <D.23977>:
          D.23937 = ins->backend.is_pinvoke;
          if (D.23937 != 0) goto <D.23978>; else goto <D.23979>;
          <D.23978>:
          pin = 1;
          <D.23979>:
          <D.23971>:
          if (bitmap != 0B) goto <D.23980>; else goto <D.23981>;
          <D.23980>:
          cindex = 0;
          goto <D.23135>;
          <D.23134>:
          D.23884 = gcfg->callsites;
          D.23885 = (long unsigned int) cindex;
          D.23886 = D.23885 * 8;
          D.23887 = D.23884 + D.23886;
          D.23888 = *D.23887;
          D.23982 = D.23888->pc_offset;
          D.23904 = vmv->vreg;
          D.23972 = (long unsigned int) D.23904;
          D.23973 = D.23972 * 4;
          D.23974 = pc_offsets + D.23973;
          D.23975 = *D.23974;
          if (D.23982 > D.23975) goto <D.23983>; else goto <D.23984>;
          <D.23983>:
          j = 0;
          goto <D.23132>;
          <D.23131>:
          D.23985 = (long unsigned int) j;
          D.23986 = D.23985 / 64;
          D.23987 = D.23986 * 8;
          D.23988 = bitmap + D.23987;
          D.23989 = *D.23988;
          D.23990 = j & 63;
          D.23991 = D.23989 >> D.23990;
          D.23992 = D.23991 & 1;
          if (D.23992 != 0) goto <D.23993>; else goto <D.23994>;
          <D.23993>:
          if (pin != 0) goto <D.23996>; else goto <D.23997>;
          <D.23996>:
          iftmp.19 = 2;
          goto <D.23998>;
          <D.23997>:
          iftmp.19 = 1;
          <D.23998>:
          j.18 = (unsigned int) j;
          D.23966 = pos + j.18;
          D.23999 = D.23966 + 4294967294;
          D.24000 = (int) D.23999;
          set_slot (gcfg, D.24000, cindex, iftmp.19);
          <D.23994>:
          j = j + 1;
          <D.23132>:
          numbits.20 = numbits;
          if (j < numbits.20) goto <D.23131>; else goto <D.23133>;
          <D.23133>:
          <D.23984>:
          cindex = cindex + 1;
          <D.23135>:
          D.23900 = gcfg->ncallsites;
          if (D.23900 > cindex) goto <D.23134>; else goto <D.23136>;
          <D.23136>:
          D.23901 = cfg->verbose_level;
          if (D.23901 > 1) goto <D.24002>; else goto <D.24003>;
          <D.24002>:
          j = 0;
          goto <D.23138>;
          <D.23137>:
          D.23985 = (long unsigned int) j;
          D.23986 = D.23985 / 64;
          D.23987 = D.23986 * 8;
          D.23988 = bitmap + D.23987;
          D.23989 = *D.23988;
          D.23990 = j & 63;
          D.23991 = D.23989 >> D.23990;
          D.23992 = D.23991 & 1;
          if (D.23992 != 0) goto <D.24004>; else goto <D.24005>;
          <D.24004>:
          j.18 = (unsigned int) j;
          D.23966 = pos + j.18;
          D.23999 = D.23966 + 4294967294;
          D.24000 = (int) D.23999;
          D.23913 = ins->data.op[0].const_val;
          D.23950 = (unsigned int) D.23913;
          D.24006 = j * 8;
          D.24007 = (unsigned int) D.24006;
          D.24008 = D.23950 + D.24007;
          D.24009 = (int) D.24008;
          if (pin != 0) goto <D.24011>; else goto <D.24012>;
          <D.24011>:
          iftmp.21 = "pin";
          goto <D.24013>;
          <D.24012>:
          iftmp.21 = "ref";
          <D.24013>:
          printf ("\t\t%s slot at 0x%x(fp) (slot = %d)\n", iftmp.21, D.24009, D.24000);
          <D.24005>:
          j = j + 1;
          <D.23138>:
          numbits.20 = numbits;
          if (j < numbits.20) goto <D.23137>; else goto <D.23139>;
          <D.23139>:
          <D.24003>:
          goto <D.24014>;
          <D.23981>:
          D.23901 = cfg->verbose_level;
          if (D.23901 > 1) goto <D.24015>; else goto <D.24016>;
          <D.24015>:
          printf ("\t\tpinned\n");
          <D.24016>:
          j = 0;
          goto <D.23141>;
          <D.23140>:
          j.18 = (unsigned int) j;
          D.23966 = pos + j.18;
          D.23967 = (int) D.23966;
          set_slot_everywhere (gcfg, D.23967, 2);
          j = j + 1;
          <D.23141>:
          if (j < size_in_slots) goto <D.23140>; else goto <D.23142>;
          <D.23142>:
          <D.24014>:
          monoeg_g_free (bitmap);
          // predicted unlikely by continue predictor.
          goto <D.23116>;
        }
      finally
        {
          numbits = {CLOBBER};
        }
    }
    <D.23936>:
    if (is_arg == 0) goto <D.24019>; else goto <D.24020>;
    <D.24019>:
    D.23913 = ins->data.op[0].const_val;
    D.23815 = gcfg->min_offset;
    D.24021 = (long int) D.23815;
    if (D.23913 < D.24021) goto <D.24017>; else goto <D.24022>;
    <D.24022>:
    D.23913 = ins->data.op[0].const_val;
    D.24023 = gcfg->max_offset;
    D.24024 = (long int) D.24023;
    if (D.23913 >= D.24024) goto <D.24017>; else goto <D.24018>;
    <D.24017>:
    // predicted unlikely by continue predictor.
    goto <D.23116>;
    <D.24018>:
    <D.24020>:
    D.24025 = BIT_FIELD_REF <*t, 8, 88>;
    D.24026 = D.24025 & 64;
    if (D.24026 != 0) goto <D.24027>; else goto <D.24028>;
    <D.24027>:
    if (is_arg != 0) goto <D.24029>; else goto <D.24030>;
    <D.24029>:
    pos.16 = (int) pos;
    set_slot_everywhere (gcfg, pos.16, 2);
    goto <D.24031>;
    <D.24030>:
    cindex = 0;
    goto <D.23144>;
    <D.23143>:
    D.23884 = gcfg->callsites;
    D.23885 = (long unsigned int) cindex;
    D.23886 = D.23885 * 8;
    D.23887 = D.23884 + D.23886;
    D.23888 = *D.23887;
    D.23889 = D.23888->liveness;
    D.23890 = i / 8;
    D.23891 = (sizetype) D.23890;
    D.23892 = D.23889 + D.23891;
    D.23893 = *D.23892;
    D.23894 = (int) D.23893;
    D.23895 = i % 8;
    D.23896 = D.23894 >> D.23895;
    D.23897 = D.23896 & 1;
    if (D.23897 != 0) goto <D.24032>; else goto <D.24033>;
    <D.24032>:
    pos.16 = (int) pos;
    set_slot (gcfg, pos.16, cindex, 2);
    <D.24033>:
    cindex = cindex + 1;
    <D.23144>:
    D.23900 = gcfg->ncallsites;
    if (D.23900 > cindex) goto <D.23143>; else goto <D.23145>;
    <D.23145>:
    <D.24031>:
    D.23901 = cfg->verbose_level;
    if (D.23901 > 1) goto <D.24034>; else goto <D.24035>;
    <D.24034>:
    D.23930 = ins->data.op[1].vtype;
    D.24036 = mono_type_full_name (D.23930);
    D.23904 = vmv->vreg;
    D.23913 = ins->data.op[0].const_val;
    if (D.23913 < 0) goto <D.24038>; else goto <D.24039>;
    <D.24038>:
    D.23913 = ins->data.op[0].const_val;
    D.23918 = (int) D.23913;
    iftmp.22 = -D.23918;
    goto <D.24040>;
    <D.24039>:
    D.23913 = ins->data.op[0].const_val;
    iftmp.22 = (int) D.23913;
    <D.24040>:
    D.23913 = ins->data.op[0].const_val;
    if (D.23913 < 0) goto <D.24042>; else goto <D.24043>;
    <D.24042>:
    iftmp.23 = "-";
    goto <D.24044>;
    <D.24043>:
    iftmp.23 = "";
    <D.24044>:
    printf ("\tbyref at %s0x%x(fp) (R%d, slot = %d): %s\n", iftmp.23, iftmp.22, D.23904, pos, D.24036);
    <D.24035>:
    // predicted unlikely by continue predictor.
    goto <D.23116>;
    <D.24028>:
    t = mini_type_get_underlying_type (0B, t);
    D.24045 = mini_type_is_reference (cfg, t);
    if (D.24045 == 0) goto <D.24046>; else goto <D.24047>;
    <D.24046>:
    pos.16 = (int) pos;
    set_slot_everywhere (gcfg, pos.16, 0);
    D.23901 = cfg->verbose_level;
    if (D.23901 > 1) goto <D.24048>; else goto <D.24049>;
    <D.24048>:
    D.23930 = ins->data.op[1].vtype;
    D.24050 = mono_type_full_name (D.23930);
    D.23904 = vmv->vreg;
    D.23913 = ins->data.op[0].const_val;
    if (D.23913 < 0) goto <D.24052>; else goto <D.24053>;
    <D.24052>:
    D.23913 = ins->data.op[0].const_val;
    D.23918 = (int) D.23913;
    iftmp.24 = -D.23918;
    goto <D.24054>;
    <D.24053>:
    D.23913 = ins->data.op[0].const_val;
    iftmp.24 = (int) D.23913;
    <D.24054>:
    D.23913 = ins->data.op[0].const_val;
    if (D.23913 < 0) goto <D.24056>; else goto <D.24057>;
    <D.24056>:
    iftmp.25 = "-";
    goto <D.24058>;
    <D.24057>:
    iftmp.25 = "";
    <D.24058>:
    if (is_arg != 0) goto <D.24060>; else goto <D.24061>;
    <D.24060>:
    iftmp.26 = " arg";
    goto <D.24062>;
    <D.24061>:
    iftmp.26 = "";
    <D.24062>:
    printf ("\tnoref%s at %s0x%x(fp) (R%d, slot = %d): %s\n", iftmp.26, iftmp.25, iftmp.24, D.23904, pos, D.24050);
    <D.24049>:
    if (0 != 0) goto <D.24063>; else goto <D.24064>;
    <D.24063>:
    D.24065 = pos + 1;
    D.24066 = (int) D.24065;
    set_slot_everywhere (gcfg, D.24066, 0);
    D.23901 = cfg->verbose_level;
    if (D.23901 > 1) goto <D.24067>; else goto <D.24068>;
    <D.24067>:
    D.23930 = ins->data.op[1].vtype;
    D.24069 = mono_type_full_name (D.23930);
    D.24065 = pos + 1;
    D.23904 = vmv->vreg;
    D.23913 = ins->data.op[0].const_val;
    if (D.23913 < 0) goto <D.24071>; else goto <D.24072>;
    <D.24071>:
    D.23913 = ins->data.op[0].const_val;
    D.23950 = (unsigned int) D.23913;
    D.24073 = D.23950 + 4;
    D.24074 = (int) D.24073;
    iftmp.27 = -D.24074;
    goto <D.24075>;
    <D.24072>:
    D.23913 = ins->data.op[0].const_val;
    D.23918 = (int) D.23913;
    iftmp.27 = D.23918 + 4;
    <D.24075>:
    D.23913 = ins->data.op[0].const_val;
    if (D.23913 < 0) goto <D.24077>; else goto <D.24078>;
    <D.24077>:
    iftmp.28 = "-";
    goto <D.24079>;
    <D.24078>:
    iftmp.28 = "";
    <D.24079>:
    printf ("\tnoref at %s0x%x(fp) (R%d, slot = %d): %s\n", iftmp.28, iftmp.27, D.23904, D.24065, D.24069);
    <D.24068>:
    <D.24064>:
    // predicted unlikely by continue predictor.
    goto <D.23116>;
    <D.24047>:
    D.23922 = ins->flags;
    D.23923 = (int) D.23922;
    D.24080 = D.23923 & 20;
    if (D.24080 != 0) goto <D.24081>; else goto <D.24082>;
    <D.24081>:
    if (is_this == 0) goto <D.24083>; else goto <D.24084>;
    <D.24083>:
    if (is_arg != 0) goto <D.24085>; else goto <D.24086>;
    <D.24085>:
    pos.16 = (int) pos;
    set_slot_everywhere (gcfg, pos.16, 1);
    goto <D.24087>;
    <D.24086>:
    D.23904 = vmv->vreg;
    D.23972 = (long unsigned int) D.23904;
    D.23973 = D.23972 * 4;
    D.23974 = pc_offsets + D.23973;
    D.23975 = *D.23974;
    if (D.23975 != 0) goto <D.24088>; else goto <D.24089>;
    <D.24088>:
    D.23904 = vmv->vreg;
    D.23972 = (long unsigned int) D.23904;
    D.23973 = D.23972 * 4;
    D.23974 = pc_offsets + D.23973;
    D.23975 = *D.23974;
    pos.16 = (int) pos;
    set_slot_in_range (gcfg, pos.16, 0, D.23975, 2);
    D.24090 = cfg->code_size;
    D.24091 = (int) D.24090;
    D.23904 = vmv->vreg;
    D.23972 = (long unsigned int) D.23904;
    D.23973 = D.23972 * 4;
    D.23974 = pc_offsets + D.23973;
    D.23975 = *D.23974;
    pos.16 = (int) pos;
    set_slot_in_range (gcfg, pos.16, D.23975, D.24091, 1);
    goto <D.24092>;
    <D.24089>:
    pos.16 = (int) pos;
    set_slot_everywhere (gcfg, pos.16, 2);
    <D.24092>:
    <D.24087>:
    D.23901 = cfg->verbose_level;
    if (D.23901 > 1) goto <D.24093>; else goto <D.24094>;
    <D.24093>:
    D.23930 = ins->data.op[1].vtype;
    D.24095 = mono_type_full_name (D.23930);
    D.23904 = vmv->vreg;
    D.23913 = ins->data.op[0].const_val;
    if (D.23913 < 0) goto <D.24097>; else goto <D.24098>;
    <D.24097>:
    D.23913 = ins->data.op[0].const_val;
    D.23918 = (int) D.23913;
    iftmp.29 = -D.23918;
    goto <D.24099>;
    <D.24098>:
    D.23913 = ins->data.op[0].const_val;
    iftmp.29 = (int) D.23913;
    <D.24099>:
    D.23913 = ins->data.op[0].const_val;
    if (D.23913 < 0) goto <D.24101>; else goto <D.24102>;
    <D.24101>:
    iftmp.30 = "-";
    goto <D.24103>;
    <D.24102>:
    iftmp.30 = "";
    <D.24103>:
    printf ("\tvolatile ref at %s0x%x(fp) (R%d, slot = %d): %s\n", iftmp.30, iftmp.29, D.23904, pos, D.24095);
    <D.24094>:
    // predicted unlikely by continue predictor.
    goto <D.23116>;
    <D.24084>:
    <D.24082>:
    if (is_arg != 0) goto <D.24104>; else goto <D.24105>;
    <D.24104>:
    pos.16 = (int) pos;
    set_slot_everywhere (gcfg, pos.16, 1);
    goto <D.24106>;
    <D.24105>:
    cindex = 0;
    goto <D.23147>;
    <D.23146>:
    D.23884 = gcfg->callsites;
    D.23885 = (long unsigned int) cindex;
    D.23886 = D.23885 * 8;
    D.23887 = D.23884 + D.23886;
    D.23888 = *D.23887;
    D.23889 = D.23888->liveness;
    D.23890 = i / 8;
    D.23891 = (sizetype) D.23890;
    D.23892 = D.23889 + D.23891;
    D.23893 = *D.23892;
    D.23894 = (int) D.23893;
    D.23895 = i % 8;
    D.23896 = D.23894 >> D.23895;
    D.23897 = D.23896 & 1;
    if (D.23897 != 0) goto <D.24107>; else goto <D.24108>;
    <D.24107>:
    pos.16 = (int) pos;
    set_slot (gcfg, pos.16, cindex, 1);
    <D.24108>:
    cindex = cindex + 1;
    <D.23147>:
    D.23900 = gcfg->ncallsites;
    if (D.23900 > cindex) goto <D.23146>; else goto <D.23148>;
    <D.23148>:
    <D.24106>:
    D.23901 = cfg->verbose_level;
    if (D.23901 > 1) goto <D.24109>; else goto <D.24110>;
    <D.24109>:
    D.23930 = ins->data.op[1].vtype;
    D.24111 = mono_type_full_name (D.23930);
    D.23904 = vmv->vreg;
    D.23913 = ins->data.op[0].const_val;
    if (D.23913 < 0) goto <D.24113>; else goto <D.24114>;
    <D.24113>:
    D.23913 = ins->data.op[0].const_val;
    D.23918 = (int) D.23913;
    iftmp.31 = -D.23918;
    goto <D.24115>;
    <D.24114>:
    D.23913 = ins->data.op[0].const_val;
    iftmp.31 = (int) D.23913;
    <D.24115>:
    D.23913 = ins->data.op[0].const_val;
    if (D.23913 < 0) goto <D.24117>; else goto <D.24118>;
    <D.24117>:
    iftmp.32 = "-";
    goto <D.24119>;
    <D.24118>:
    iftmp.32 = "";
    <D.24119>:
    if (is_arg != 0) goto <D.24121>; else goto <D.24122>;
    <D.24121>:
    iftmp.33 = " arg";
    goto <D.24123>;
    <D.24122>:
    iftmp.33 = "";
    <D.24123>:
    printf ("\tref%s at %s0x%x(fp) (R%d, slot = %d): %s\n", iftmp.33, iftmp.32, iftmp.31, D.23904, pos, D.24111);
    <D.24110>:
  }
  <D.23116>:
  i = i + 1;
  <D.23150>:
  i.14 = (unsigned int) i;
  D.24124 = cfg->num_varinfo;
  if (i.14 < D.24124) goto <D.23149>; else goto <D.23151>;
  <D.23151>:
  monoeg_g_free (pc_offsets);
}


get_offset_val (int offset)
{
  int D.24126;

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


get_offset_sign (int offset)
{
  const char * D.24128;
  const char * iftmp.34;

  if (offset < 0) goto <D.24130>; else goto <D.24131>;
  <D.24130>:
  iftmp.34 = "-";
  goto <D.24132>;
  <D.24131>:
  iftmp.34 = "+";
  <D.24132>:
  D.24128 = iftmp.34;
  return D.24128;
}


get_vtype_bitmap (struct MonoType * t, int * numbits)
{
  struct MonoGenericContainer * D.24136;
  int D.24138;
  gsize * D.24139;
  void * D.24140;
  struct MonoClass * klass;

  klass = mono_class_from_mono_type (t);
  D.24136 = klass->generic_container;
  if (D.24136 != 0B) goto <D.24134>; else goto <D.24137>;
  <D.24137>:
  D.24138 = mono_class_is_open_constructed_type (t);
  if (D.24138 != 0) goto <D.24134>; else goto <D.24135>;
  <D.24134>:
  D.24139 = 0B;
  return D.24139;
  <D.24135>:
  mono_class_compute_gc_descriptor (klass);
  D.24140 = klass->gc_descr;
  D.24139 = mono_gc_get_bitmap_for_descr (D.24140, numbits);
  return D.24139;
}


process_finally_clauses (struct MonoCompile * cfg)
{
  struct MonoMethodHeader * D.24142;
  struct MonoExceptionClause * D.24143;
  long unsigned int D.24144;
  long unsigned int D.24145;
  unsigned int D.24146;
  <unnamed-unsigned:15> D.24149;
  int D.24150;
  unsigned int D.24153;
  long unsigned int D.24156;
  long unsigned int D.24157;
  struct GCCallSite * * D.24158;
  struct GCCallSite * D.24159;
  unsigned int D.24160;
  unsigned int D.24161;
  unsigned int D.24164;
  unsigned int D.24165;
  unsigned int D.24168;
  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.23197>;
  <D.23196>:
  {
    struct MonoExceptionClause * clause;

    D.24142 = cfg->header;
    D.24143 = D.24142->clauses;
    D.24144 = (long unsigned int) i;
    D.24145 = D.24144 * 32;
    clause = D.24143 + D.24145;
    D.24146 = clause->flags;
    if (D.24146 == 2) goto <D.24147>; else goto <D.24148>;
    <D.24147>:
    has_finally = 1;
    <D.24148>:
  }
  i = i + 1;
  <D.23197>:
  D.24142 = cfg->header;
  D.24149 = D.24142->num_clauses;
  D.24150 = (int) D.24149;
  if (D.24150 > i) goto <D.23196>; else goto <D.23198>;
  <D.23198>:
  if (has_finally != 0) goto <D.24151>; else goto <D.24152>;
  <D.24151>:
  D.24153 = cfg->verbose_level;
  if (D.24153 > 1) goto <D.24154>; else goto <D.24155>;
  <D.24154>:
  printf ("\tMethod has finally clauses, pessimizing live ranges.\n");
  <D.24155>:
  j = 0;
  goto <D.23212>;
  <D.23211>:
  {
    struct MonoBasicBlock * bb;
    struct MonoExceptionClause * clause;
    gboolean is_in_finally;

    D.24156 = (long unsigned int) j;
    D.24157 = D.24156 * 8;
    D.24158 = callsites + D.24157;
    D.24159 = *D.24158;
    bb = D.24159->bb;
    is_in_finally = 0;
    i = 0;
    goto <D.23204>;
    <D.23203>:
    D.24142 = cfg->header;
    D.24143 = D.24142->clauses;
    D.24144 = (long unsigned int) i;
    D.24145 = D.24144 * 32;
    clause = D.24143 + D.24145;
    D.24160 = clause->handler_offset;
    D.24161 = bb->real_offset;
    if (D.24160 <= D.24161) goto <D.24162>; else goto <D.24163>;
    <D.24162>:
    D.24161 = bb->real_offset;
    D.24160 = clause->handler_offset;
    D.24164 = clause->handler_len;
    D.24165 = D.24160 + D.24164;
    if (D.24161 < D.24165) goto <D.24166>; else goto <D.24167>;
    <D.24166>:
    D.24168 = clause->flags;
    if (D.24168 == 2) goto <D.24169>; else goto <D.24170>;
    <D.24169>:
    is_in_finally = 1;
    goto <D.23202>;
    <D.24170>:
    <D.24167>:
    <D.24163>:
    i = i + 1;
    <D.23204>:
    D.24142 = cfg->header;
    D.24149 = D.24142->num_clauses;
    D.24150 = (int) D.24149;
    if (D.24150 > i) goto <D.23203>; else goto <D.23202>;
    <D.23202>:
    if (is_in_finally != 0) goto <D.24171>; else goto <D.24172>;
    <D.24171>:
    i = 0;
    goto <D.23206>;
    <D.23205>:
    set_slot (gcfg, i, j, 2);
    i = i + 1;
    <D.23206>:
    if (i < nslots) goto <D.23205>; else goto <D.23207>;
    <D.23207>:
    i = 0;
    goto <D.23209>;
    <D.23208>:
    set_reg_slot (gcfg, i, j, 2);
    i = i + 1;
    <D.23209>:
    if (i < nregs) goto <D.23208>; else goto <D.23210>;
    <D.23210>:
    <D.24172>:
  }
  j = j + 1;
  <D.23212>:
  if (j < ncallsites) goto <D.23211>; else goto <D.23213>;
  <D.23213>:
  <D.24152>:
}


create_map (struct MonoCompile * cfg)
{
  int D.24173;
  guint8 * D.24174;
  int D.24175;
  guint8 * D.24178;
  int D.24179;
  int D.24188;
  int D.24189;
  int D.24193;
  int D.24194;
  int D.24196;
  int D.24197;
  int D.24198;
  _Bool D.24206;
  long int D.24207;
  long int D.24208;
  _Bool D.24211;
  long int D.24212;
  long int D.24213;
  long unsigned int D.24216;
  int D.24217;
  long unsigned int D.24218;
  long unsigned int D.24219;
  int D.24222;
  guint8 * D.24223;
  int D.24224;
  guint8 * D.24227;
  int D.24228;
  unsigned int D.24233;
  unsigned int D.24236;
  long int D.24239;
  long int D.24240;
  long int D.24241;
  long int D.24242;
  long int D.24243;
  long int D.24244;
  long int D.24245;
  long int D.24246;
  long int D.24247;
  long int D.24248;
  long int D.24249;
  int iftmp.35;
  int iftmp.36;
  int D.24258;
  int iftmp.37;
  int D.24263;
  int iftmp.38;
  struct MonoMemPool * D.24268;
  unsigned int D.24269;
  unsigned char D.24270;
  int D.24271;
  int D.24272;
  int D.24273;
  int D.24274;
  int D.24275;
  unsigned char D.24276;
  <unnamed-unsigned:1> D.24277;
  unsigned char D.24278;
  <unnamed-unsigned:1> D.24279;
  unsigned char D.24280;
  <unnamed-unsigned:1> D.24281;
  unsigned char D.24282;
  <unnamed-unsigned:1> D.24283;
  _Bool D.24284;
  long int D.24285;
  long int D.24286;
  unsigned int D.24289;
  unsigned char D.24290;
  unsigned char D.24291;
  unsigned int bitmaps_size.39;
  unsigned int bitmaps_offset.40;
  unsigned int D.24296;
  sizetype D.24297;
  int D.24298;
  int D.24301;
  unsigned int D.24304;
  sizetype D.24305;
  int D.24306;
  unsigned int D.24311;
  sizetype D.24312;
  unsigned int D.24313;
  int D.24316;
  unsigned int D.24321;
  sizetype D.24322;
  unsigned int D.24323;
  int D.24326;
  unsigned int D.24329;
  guint8 * endbuf.41;
  long int endbuf.42;
  long int buf.43;
  long int D.24339;
  _Bool D.24340;
  long int D.24341;
  long int D.24342;
  unsigned char D.24345;
  unsigned int D.24346;
  unsigned int encoded_size.44;
  unsigned int D.24348;
  unsigned int D.24349;
  signed int D.24350;
  int D.24351;
  int D.24352;
  signed int D.24353;
  unsigned int D.24354;
  int D.24355;
  int D.24356;
  unsigned int D.24357;
  unsigned int D.24358;
  unsigned int bitmaps_size.45;
  unsigned int D.24360;
  unsigned int alloc_size.46;
  struct MonoDomain * D.24362;
  long unsigned int D.24363;
  sizetype D.24364;
  int D.24365;
  long int D.24366;
  long int p.47;
  long int D.24368;
  long int D.24369;
  long int D.24370;
  sizetype D.24373;
  guint8 * D.24374;
  long unsigned int D.24375;
  long unsigned int D.24376;
  struct GCCallSite * * D.24377;
  struct GCCallSite * D.24378;
  int D.24379;
  unsigned char D.24380;
  int D.24381;
  unsigned int D.24382;
  unsigned int ncallsites.48;
  unsigned int D.24384;
  int D.24385;
  long unsigned int D.24389;
  guint16 * D.24390;
  short unsigned int D.24391;
  int D.24392;
  unsigned int D.24393;
  long unsigned int D.24394;
  unsigned int D.24395;
  unsigned int D.24396;
  unsigned int D.24397;
  int D.24398;
  long unsigned int D.24400;
  guint32 * D.24401;
  unsigned int D.24402;
  int D.24403;
  unsigned int D.24404;
  unsigned int D.24405;
  unsigned int D.24406;
  int D.24407;
  int D.24408;
  sizetype D.24409;
  long unsigned int D.24410;
  sizetype D.24411;
  long int emap.49;
  long int D.24413;
  long int D.24414;
  _Bool D.24415;
  long int D.24416;
  long int D.24417;
  int D.24420;
  int D.24421;
  int D.24422;
  int D.24423;
  int D.24424;
  int D.24425;
  int D.24426;
  unsigned int D.24427;
  unsigned int D.24428;
  int D.24429;
  struct MonoJitInfo * D.24430;
  unsigned int alloc_size.50;
  int D.24432;
  int D.24433;
  int D.24434;
  int D.24435;
  int D.24436;
  int D.24437;
  int D.24438;
  int D.24439;
  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.23312>;
      <D.23311>:
      {
        gboolean has_ref;
        gboolean has_pin;

        has_ref = 0;
        has_pin = 0;
        D.24173 = gcfg->stack_bitmap_width;
        D.24174 = gcfg->stack_pin_bitmap;
        D.24175 = has_bit_set (D.24174, D.24173, i);
        if (D.24175 != 0) goto <D.24176>; else goto <D.24177>;
        <D.24176>:
        has_pin = 1;
        <D.24177>:
        D.24173 = gcfg->stack_bitmap_width;
        D.24178 = gcfg->stack_ref_bitmap;
        D.24179 = has_bit_set (D.24178, D.24173, i);
        if (D.24179 != 0) goto <D.24180>; else goto <D.24181>;
        <D.24180>:
        has_ref = 1;
        <D.24181>:
        if (has_ref != 0) goto <D.24182>; else goto <D.24183>;
        <D.24182>:
        has_ref_slots = 1;
        <D.24183>:
        if (has_pin != 0) goto <D.24184>; else goto <D.24185>;
        <D.24184>:
        has_pin_slots = 1;
        <D.24185>:
        if (has_ref != 0) goto <D.24186>; else goto <D.24187>;
        <D.24186>:
        D.24188 = ntypes[1];
        D.24189 = D.24188 + 1;
        ntypes[1] = D.24189;
        goto <D.24190>;
        <D.24187>:
        if (has_pin != 0) goto <D.24191>; else goto <D.24192>;
        <D.24191>:
        D.24193 = ntypes[2];
        D.24194 = D.24193 + 1;
        ntypes[2] = D.24194;
        goto <D.24195>;
        <D.24192>:
        D.24196 = ntypes[0];
        D.24197 = D.24196 + 1;
        ntypes[0] = D.24197;
        <D.24195>:
        <D.24190>:
        D.24198 = has_ref | has_pin;
        if (D.24198 != 0) goto <D.24199>; else goto <D.24200>;
        <D.24199>:
        if (start == -1) goto <D.24201>; else goto <D.24202>;
        <D.24201>:
        start = i;
        <D.24202>:
        end = i + 1;
        <D.24200>:
      }
      i = i + 1;
      <D.23312>:
      if (i < nslots) goto <D.23311>; else goto <D.23313>;
      <D.23313>:
      if (start == -1) goto <D.24203>; else goto <D.24204>;
      <D.24203>:
      end = nslots;
      start = end;
      goto <D.24205>;
      <D.24204>:
      D.24206 = start == -1;
      D.24207 = (long int) D.24206;
      D.24208 = __builtin_expect (D.24207, 0);
      if (D.24208 != 0) goto <D.24209>; else goto <D.24210>;
      <D.24209>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 2214, "start != -1");
      <D.24210>:
      D.24211 = start >= end;
      D.24212 = (long int) D.24211;
      D.24213 = __builtin_expect (D.24212, 0);
      if (D.24213 != 0) goto <D.24214>; else goto <D.24215>;
      <D.24214>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 2215, "start < end");
      <D.24215>:
      <D.24205>:
      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.23318>;
      <D.23317>:
      {
        gboolean has_ref;
        gboolean has_pin;

        has_ref = 0;
        has_pin = 0;
        D.24216 = cfg->used_int_regs;
        D.24217 = 1 << i;
        D.24218 = (long unsigned int) D.24217;
        D.24219 = D.24216 & D.24218;
        if (D.24219 == 0) goto <D.24220>; else goto <D.24221>;
        <D.24220>:
        // predicted unlikely by continue predictor.
        goto <D.23316>;
        <D.24221>:
        D.24222 = gcfg->reg_bitmap_width;
        D.24223 = gcfg->reg_pin_bitmap;
        D.24224 = has_bit_set (D.24223, D.24222, i);
        if (D.24224 != 0) goto <D.24225>; else goto <D.24226>;
        <D.24225>:
        has_pin = 1;
        <D.24226>:
        D.24222 = gcfg->reg_bitmap_width;
        D.24227 = gcfg->reg_ref_bitmap;
        D.24228 = has_bit_set (D.24227, D.24222, i);
        if (D.24228 != 0) goto <D.24229>; else goto <D.24230>;
        <D.24229>:
        has_ref = 1;
        <D.24230>:
        if (has_ref != 0) goto <D.24231>; else goto <D.24232>;
        <D.24231>:
        D.24217 = 1 << i;
        D.24233 = (unsigned int) D.24217;
        reg_ref_mask = D.24233 | reg_ref_mask;
        has_ref_regs = 1;
        nref_regs = nref_regs + 1;
        <D.24232>:
        if (has_pin != 0) goto <D.24234>; else goto <D.24235>;
        <D.24234>:
        D.24217 = 1 << i;
        D.24233 = (unsigned int) D.24217;
        reg_pin_mask = D.24233 | reg_pin_mask;
        has_pin_regs = 1;
        npin_regs = npin_regs + 1;
        <D.24235>:
      }
      <D.23316>:
      i = i + 1;
      <D.23318>:
      if (i < nregs) goto <D.23317>; else goto <D.23319>;
      <D.23319>:
      D.24236 = cfg->verbose_level;
      if (D.24236 > 1) goto <D.24237>; else goto <D.24238>;
      <D.24237>:
      D.24193 = ntypes[2];
      D.24196 = ntypes[0];
      D.24188 = ntypes[1];
      printf ("Slots: %d Start: %d End: %d Refs: %d NoRefs: %d Pin: %d Callsites: %d\n", nslots, start, end, D.24188, D.24196, D.24193, ncallsites);
      <D.24238>:
      D.24239 = (long int) end;
      D.24240 = (long int) start;
      D.24241 = D.24239 - D.24240;
      D.24242 = D.24241 + 7;
      D.24243 = D.24242 >> 3;
      stack_bitmap_width = (int) D.24243;
      stack_bitmap_size = stack_bitmap_width * ncallsites;
      D.24244 = (long int) nref_regs;
      D.24245 = D.24244 + 7;
      D.24246 = D.24245 >> 3;
      reg_ref_bitmap_width = (int) D.24246;
      reg_ref_bitmap_size = reg_ref_bitmap_width * ncallsites;
      D.24247 = (long int) npin_regs;
      D.24248 = D.24247 + 7;
      D.24249 = D.24248 >> 3;
      reg_pin_bitmap_width = (int) D.24249;
      reg_pin_bitmap_size = reg_pin_bitmap_width * ncallsites;
      if (has_ref_slots != 0) goto <D.24251>; else goto <D.24252>;
      <D.24251>:
      iftmp.35 = stack_bitmap_size;
      goto <D.24253>;
      <D.24252>:
      iftmp.35 = 0;
      <D.24253>:
      if (has_pin_slots != 0) goto <D.24255>; else goto <D.24256>;
      <D.24255>:
      iftmp.36 = stack_bitmap_size;
      goto <D.24257>;
      <D.24256>:
      iftmp.36 = 0;
      <D.24257>:
      D.24258 = iftmp.35 + iftmp.36;
      if (has_ref_regs != 0) goto <D.24260>; else goto <D.24261>;
      <D.24260>:
      iftmp.37 = reg_ref_bitmap_size;
      goto <D.24262>;
      <D.24261>:
      iftmp.37 = 0;
      <D.24262>:
      D.24263 = D.24258 + iftmp.37;
      if (has_pin_regs != 0) goto <D.24265>; else goto <D.24266>;
      <D.24265>:
      iftmp.38 = reg_pin_bitmap_size;
      goto <D.24267>;
      <D.24266>:
      iftmp.38 = 0;
      <D.24267>:
      bitmaps_size = D.24263 + iftmp.38;
      D.24268 = cfg->mempool;
      map = mono_mempool_alloc0 (D.24268, 72);
      D.24269 = cfg->frame_reg;
      D.24270 = (unsigned char) D.24269;
      map->frame_reg = D.24270;
      D.24271 = gcfg->min_offset;
      map->start_offset = D.24271;
      D.24271 = gcfg->min_offset;
      D.24272 = nslots * 8;
      D.24273 = D.24271 + D.24272;
      map->end_offset = D.24273;
      D.24274 = start * 8;
      map->map_offset = D.24274;
      D.24275 = end - start;
      map->nslots = D.24275;
      D.24276 = (unsigned char) has_ref_slots;
      D.24277 = (<unnamed-unsigned:1>) D.24276;
      map->has_ref_slots = D.24277;
      D.24278 = (unsigned char) has_pin_slots;
      D.24279 = (<unnamed-unsigned:1>) D.24278;
      map->has_pin_slots = D.24279;
      D.24280 = (unsigned char) has_ref_regs;
      D.24281 = (<unnamed-unsigned:1>) D.24280;
      map->has_ref_regs = D.24281;
      D.24282 = (unsigned char) has_pin_regs;
      D.24283 = (<unnamed-unsigned:1>) D.24282;
      map->has_pin_regs = D.24283;
      D.24284 = nregs > 31;
      D.24285 = (long int) D.24284;
      D.24286 = __builtin_expect (D.24285, 0);
      if (D.24286 != 0) goto <D.24287>; else goto <D.24288>;
      <D.24287>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 2273, "nregs < 32");
      <D.24288>:
      D.24216 = cfg->used_int_regs;
      D.24289 = (unsigned int) D.24216;
      map->used_int_regs = D.24289;
      map->reg_ref_mask = reg_ref_mask;
      map->reg_pin_mask = reg_pin_mask;
      D.24290 = (unsigned char) nref_regs;
      map->nref_regs = D.24290;
      D.24291 = (unsigned char) npin_regs;
      map->npin_regs = D.24291;
      bitmaps_size.39 = (unsigned int) bitmaps_size;
      D.24268 = cfg->mempool;
      bitmaps = mono_mempool_alloc0 (D.24268, bitmaps_size.39);
      bitmaps_offset = 0;
      if (has_ref_slots != 0) goto <D.24293>; else goto <D.24294>;
      <D.24293>:
      bitmaps_offset.40 = (unsigned int) bitmaps_offset;
      map->stack_ref_bitmap_offset = bitmaps_offset.40;
      bitmaps_offset = bitmaps_offset + stack_bitmap_size;
      D.24296 = map->stack_ref_bitmap_offset;
      D.24297 = (sizetype) D.24296;
      bitmap = bitmaps + D.24297;
      i = 0;
      goto <D.23324>;
      <D.23323>:
      j = 0;
      goto <D.23321>;
      <D.23320>:
      D.24173 = gcfg->stack_bitmap_width;
      D.24178 = gcfg->stack_ref_bitmap;
      D.24298 = get_bit (D.24178, D.24173, i, j);
      if (D.24298 != 0) goto <D.24299>; else goto <D.24300>;
      <D.24299>:
      D.24301 = i - start;
      set_bit (bitmap, stack_bitmap_width, j, D.24301);
      <D.24300>:
      j = j + 1;
      <D.23321>:
      if (j < ncallsites) goto <D.23320>; else goto <D.23322>;
      <D.23322>:
      i = i + 1;
      <D.23324>:
      if (i < nslots) goto <D.23323>; else goto <D.23325>;
      <D.23325>:
      <D.24294>:
      if (has_pin_slots != 0) goto <D.24302>; else goto <D.24303>;
      <D.24302>:
      bitmaps_offset.40 = (unsigned int) bitmaps_offset;
      map->stack_pin_bitmap_offset = bitmaps_offset.40;
      bitmaps_offset = bitmaps_offset + stack_bitmap_size;
      D.24304 = map->stack_pin_bitmap_offset;
      D.24305 = (sizetype) D.24304;
      bitmap = bitmaps + D.24305;
      i = 0;
      goto <D.23330>;
      <D.23329>:
      j = 0;
      goto <D.23327>;
      <D.23326>:
      D.24173 = gcfg->stack_bitmap_width;
      D.24174 = gcfg->stack_pin_bitmap;
      D.24306 = get_bit (D.24174, D.24173, i, j);
      if (D.24306 != 0) goto <D.24307>; else goto <D.24308>;
      <D.24307>:
      D.24301 = i - start;
      set_bit (bitmap, stack_bitmap_width, j, D.24301);
      <D.24308>:
      j = j + 1;
      <D.23327>:
      if (j < ncallsites) goto <D.23326>; else goto <D.23328>;
      <D.23328>:
      i = i + 1;
      <D.23330>:
      if (i < nslots) goto <D.23329>; else goto <D.23331>;
      <D.23331>:
      <D.24303>:
      if (has_ref_regs != 0) goto <D.24309>; else goto <D.24310>;
      <D.24309>:
      bitmaps_offset.40 = (unsigned int) bitmaps_offset;
      map->reg_ref_bitmap_offset = bitmaps_offset.40;
      bitmaps_offset = bitmaps_offset + reg_ref_bitmap_size;
      D.24311 = map->reg_ref_bitmap_offset;
      D.24312 = (sizetype) D.24311;
      bitmap = bitmaps + D.24312;
      bindex = 0;
      i = 0;
      goto <D.23336>;
      <D.23335>:
      D.24217 = 1 << i;
      D.24233 = (unsigned int) D.24217;
      D.24313 = D.24233 & reg_ref_mask;
      if (D.24313 != 0) goto <D.24314>; else goto <D.24315>;
      <D.24314>:
      j = 0;
      goto <D.23333>;
      <D.23332>:
      D.24222 = gcfg->reg_bitmap_width;
      D.24227 = gcfg->reg_ref_bitmap;
      D.24316 = get_bit (D.24227, D.24222, i, j);
      if (D.24316 != 0) goto <D.24317>; else goto <D.24318>;
      <D.24317>:
      set_bit (bitmap, reg_ref_bitmap_width, j, bindex);
      <D.24318>:
      j = j + 1;
      <D.23333>:
      if (j < ncallsites) goto <D.23332>; else goto <D.23334>;
      <D.23334>:
      bindex = bindex + 1;
      <D.24315>:
      i = i + 1;
      <D.23336>:
      if (i < nregs) goto <D.23335>; else goto <D.23337>;
      <D.23337>:
      <D.24310>:
      if (has_pin_regs != 0) goto <D.24319>; else goto <D.24320>;
      <D.24319>:
      bitmaps_offset.40 = (unsigned int) bitmaps_offset;
      map->reg_pin_bitmap_offset = bitmaps_offset.40;
      bitmaps_offset = bitmaps_offset + reg_pin_bitmap_size;
      D.24321 = map->reg_pin_bitmap_offset;
      D.24322 = (sizetype) D.24321;
      bitmap = bitmaps + D.24322;
      bindex = 0;
      i = 0;
      goto <D.23342>;
      <D.23341>:
      D.24217 = 1 << i;
      D.24233 = (unsigned int) D.24217;
      D.24323 = D.24233 & reg_pin_mask;
      if (D.24323 != 0) goto <D.24324>; else goto <D.24325>;
      <D.24324>:
      j = 0;
      goto <D.23339>;
      <D.23338>:
      D.24222 = gcfg->reg_bitmap_width;
      D.24223 = gcfg->reg_pin_bitmap;
      D.24326 = get_bit (D.24223, D.24222, i, j);
      if (D.24326 != 0) goto <D.24327>; else goto <D.24328>;
      <D.24327>:
      set_bit (bitmap, reg_pin_bitmap_width, j, bindex);
      <D.24328>:
      j = j + 1;
      <D.23339>:
      if (j < ncallsites) goto <D.23338>; else goto <D.23340>;
      <D.23340>:
      bindex = bindex + 1;
      <D.24325>:
      i = i + 1;
      <D.23342>:
      if (i < nregs) goto <D.23341>; else goto <D.23343>;
      <D.23343>:
      <D.24320>:
      map->ncallsites = ncallsites;
      D.24329 = cfg->code_len;
      if (D.24329 <= 255) goto <D.24330>; else goto <D.24331>;
      <D.24330>:
      map->callsite_entry_size = 1;
      goto <D.24332>;
      <D.24331>:
      D.24329 = cfg->code_len;
      if (D.24329 <= 65535) goto <D.24333>; else goto <D.24334>;
      <D.24333>:
      map->callsite_entry_size = 2;
      goto <D.24335>;
      <D.24334>:
      map->callsite_entry_size = 4;
      <D.24335>:
      <D.24332>:
      {
        guint8 buf[256];
        guint8 * endbuf;
        struct GCEncodedMap * emap;
        int encoded_size;
        guint8 * p;

        try
          {
            encode_gc_map (map, &buf, &endbuf);
            endbuf.41 = endbuf;
            endbuf.42 = (long int) endbuf.41;
            buf.43 = (long int) &buf;
            D.24339 = endbuf.42 - buf.43;
            D.24340 = D.24339 > 255;
            D.24341 = (long int) D.24340;
            D.24342 = __builtin_expect (D.24341, 0);
            if (D.24342 != 0) goto <D.24343>; else goto <D.24344>;
            <D.24343>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 2358, "endbuf - buf < 256");
            <D.24344>:
            endbuf.41 = endbuf;
            endbuf.42 = (long int) endbuf.41;
            buf.43 = (long int) &buf;
            D.24339 = endbuf.42 - buf.43;
            encoded_size = (int) D.24339;
            D.24345 = map->callsite_entry_size;
            D.24346 = (unsigned int) D.24345;
            encoded_size.44 = (unsigned int) encoded_size;
            D.24348 = D.24346 + encoded_size.44;
            D.24349 = D.24348 + 4294967295;
            D.24350 = (signed int) D.24349;
            D.24345 = map->callsite_entry_size;
            D.24351 = (int) D.24345;
            D.24352 = -D.24351;
            D.24353 = D.24350 & D.24352;
            D.24354 = (unsigned int) D.24353;
            D.24345 = map->callsite_entry_size;
            D.24351 = (int) D.24345;
            D.24355 = map->ncallsites;
            D.24356 = D.24351 * D.24355;
            D.24357 = (unsigned int) D.24356;
            D.24358 = D.24354 + D.24357;
            bitmaps_size.45 = (unsigned int) bitmaps_size;
            D.24360 = D.24358 + bitmaps_size.45;
            alloc_size = (int) D.24360;
            alloc_size.46 = (unsigned int) alloc_size;
            D.24362 = cfg->domain;
            emap = mono_domain_alloc0 (D.24362, alloc_size.46);
            p = &emap->encoded[0];
            D.24363 = (long unsigned int) encoded_size;
            memcpy (p, &buf, D.24363);
            D.24364 = (sizetype) encoded_size;
            p = p + D.24364;
            D.24345 = map->callsite_entry_size;
            D.24351 = (int) D.24345;
            D.24365 = D.24351 + -1;
            D.24366 = (long int) D.24365;
            p.47 = (long int) p;
            D.24368 = D.24366 + p.47;
            D.24345 = map->callsite_entry_size;
            D.24351 = (int) D.24345;
            D.24352 = -D.24351;
            D.24369 = (long int) D.24352;
            D.24370 = D.24368 & D.24369;
            p = (guint8 *) D.24370;
            D.24345 = map->callsite_entry_size;
            if (D.24345 == 1) goto <D.24371>; else goto <D.24372>;
            <D.24371>:
            {
              guint8 * offsets;

              offsets = p;
              i = 0;
              goto <D.23351>;
              <D.23350>:
              D.24373 = (sizetype) i;
              D.24374 = offsets + D.24373;
              D.24375 = (long unsigned int) i;
              D.24376 = D.24375 * 8;
              D.24377 = callsites + D.24376;
              D.24378 = *D.24377;
              D.24379 = D.24378->pc_offset;
              D.24380 = (unsigned char) D.24379;
              *D.24374 = D.24380;
              i = i + 1;
              <D.23351>:
              if (i < ncallsites) goto <D.23350>; else goto <D.23352>;
              <D.23352>:
              D.24381 = stats.gc_callsites8_size;
              D.24382 = (unsigned int) D.24381;
              ncallsites.48 = (unsigned int) ncallsites;
              D.24384 = D.24382 + ncallsites.48;
              D.24385 = (int) D.24384;
              stats.gc_callsites8_size = D.24385;
            }
            goto <D.24386>;
            <D.24372>:
            D.24345 = map->callsite_entry_size;
            if (D.24345 == 2) goto <D.24387>; else goto <D.24388>;
            <D.24387>:
            {
              guint16 * offsets;

              offsets = p;
              i = 0;
              goto <D.23355>;
              <D.23354>:
              D.24375 = (long unsigned int) i;
              D.24389 = D.24375 * 2;
              D.24390 = offsets + D.24389;
              D.24375 = (long unsigned int) i;
              D.24376 = D.24375 * 8;
              D.24377 = callsites + D.24376;
              D.24378 = *D.24377;
              D.24379 = D.24378->pc_offset;
              D.24391 = (short unsigned int) D.24379;
              *D.24390 = D.24391;
              i = i + 1;
              <D.23355>:
              if (i < ncallsites) goto <D.23354>; else goto <D.23356>;
              <D.23356>:
              D.24392 = stats.gc_callsites16_size;
              D.24393 = (unsigned int) D.24392;
              D.24394 = (long unsigned int) ncallsites;
              D.24395 = (unsigned int) D.24394;
              D.24396 = D.24395 * 2;
              D.24397 = D.24393 + D.24396;
              D.24398 = (int) D.24397;
              stats.gc_callsites16_size = D.24398;
            }
            goto <D.24399>;
            <D.24388>:
            {
              guint32 * offsets;

              offsets = p;
              i = 0;
              goto <D.23359>;
              <D.23358>:
              D.24375 = (long unsigned int) i;
              D.24400 = D.24375 * 4;
              D.24401 = offsets + D.24400;
              D.24375 = (long unsigned int) i;
              D.24376 = D.24375 * 8;
              D.24377 = callsites + D.24376;
              D.24378 = *D.24377;
              D.24379 = D.24378->pc_offset;
              D.24402 = (unsigned int) D.24379;
              *D.24401 = D.24402;
              i = i + 1;
              <D.23359>:
              if (i < ncallsites) goto <D.23358>; else goto <D.23360>;
              <D.23360>:
              D.24403 = stats.gc_callsites32_size;
              D.24404 = (unsigned int) D.24403;
              D.24394 = (long unsigned int) ncallsites;
              D.24395 = (unsigned int) D.24394;
              D.24405 = D.24395 * 4;
              D.24406 = D.24404 + D.24405;
              D.24407 = (int) D.24406;
              stats.gc_callsites32_size = D.24407;
            }
            <D.24399>:
            <D.24386>:
            D.24345 = map->callsite_entry_size;
            D.24351 = (int) D.24345;
            D.24408 = D.24351 * ncallsites;
            D.24409 = (sizetype) D.24408;
            p = p + D.24409;
            D.24410 = (long unsigned int) bitmaps_size;
            memcpy (p, bitmaps, D.24410);
            D.24411 = (sizetype) bitmaps_size;
            p = p + D.24411;
            p.47 = (long int) p;
            emap.49 = (long int) emap;
            D.24413 = p.47 - emap.49;
            D.24414 = (long int) alloc_size;
            D.24415 = D.24413 > D.24414;
            D.24416 = (long int) D.24415;
            D.24417 = __builtin_expect (D.24416, 0);
            if (D.24417 != 0) goto <D.24418>; else goto <D.24419>;
            <D.24418>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 2396, "(guint8*)p - (guint8*)emap <= alloc_size");
            <D.24419>:
            D.24420 = stats.gc_maps_size;
            D.24421 = D.24420 + alloc_size;
            stats.gc_maps_size = D.24421;
            D.24422 = stats.gc_callsites_size;
            D.24345 = map->callsite_entry_size;
            D.24351 = (int) D.24345;
            D.24408 = D.24351 * ncallsites;
            D.24423 = D.24422 + D.24408;
            stats.gc_callsites_size = D.24423;
            D.24424 = stats.gc_bitmaps_size;
            D.24425 = D.24424 + bitmaps_size;
            stats.gc_bitmaps_size = D.24425;
            D.24426 = stats.gc_map_struct_size;
            D.24427 = (unsigned int) D.24426;
            encoded_size.44 = (unsigned int) encoded_size;
            D.24428 = D.24427 + encoded_size.44;
            D.24429 = (int) D.24428;
            stats.gc_map_struct_size = D.24429;
            D.24430 = cfg->jit_info;
            D.24430->gc_info = emap;
            cfg->gc_map = emap;
            alloc_size.50 = (unsigned int) alloc_size;
            cfg->gc_map_size = alloc_size.50;
          }
        finally
          {
            buf = {CLOBBER};
            endbuf = {CLOBBER};
          }
      }
      D.24432 = stats.all_slots;
      D.24433 = D.24432 + nslots;
      stats.all_slots = D.24433;
      D.24434 = stats.ref_slots;
      D.24188 = ntypes[1];
      D.24435 = D.24434 + D.24188;
      stats.ref_slots = D.24435;
      D.24436 = stats.noref_slots;
      D.24196 = ntypes[0];
      D.24437 = D.24436 + D.24196;
      stats.noref_slots = D.24437;
      D.24438 = stats.pin_slots;
      D.24193 = ntypes[2];
      D.24439 = D.24438 + D.24193;
      stats.pin_slots = D.24439;
    }
  finally
    {
      ntypes = {CLOBBER};
    }
}


has_bit_set (guint8 * bitmap, int width, int slot)
{
  int D.24440;
  sizetype D.24441;
  guint8 * D.24442;
  unsigned char D.24443;
  gboolean D.24445;
  _Bool D.24446;
  int i;
  int pos;

  pos = width * slot;
  i = 0;
  goto <D.23274>;
  <D.23273>:
  D.24440 = pos + i;
  D.24441 = (sizetype) D.24440;
  D.24442 = bitmap + D.24441;
  D.24443 = *D.24442;
  if (D.24443 != 0) goto <D.23272>; else goto <D.24444>;
  <D.24444>:
  i = i + 1;
  <D.23274>:
  if (i < width) goto <D.23273>; else goto <D.23272>;
  <D.23272>:
  D.24446 = i < width;
  D.24445 = (gboolean) D.24446;
  return D.24445;
}


get_bit (guint8 * bitmap, int width, int y, int x)
{
  int D.24448;
  int D.24449;
  int D.24450;
  int D.24451;
  sizetype D.24452;
  guint8 * D.24453;
  unsigned char D.24454;
  int D.24455;
  int D.24456;
  int D.24457;

  D.24449 = width * y;
  D.24450 = x / 8;
  D.24451 = D.24449 + D.24450;
  D.24452 = (sizetype) D.24451;
  D.24453 = bitmap + D.24452;
  D.24454 = *D.24453;
  D.24455 = (int) D.24454;
  D.24456 = x % 8;
  D.24457 = 1 << D.24456;
  D.24448 = D.24455 & D.24457;
  return D.24448;
}


encode_gc_map (struct GCMap * map, guint8 * buf, guint8 * * endbuf)
{
  guint8 * buf.51;
  int D.24460;
  int D.24461;
  int D.24462;
  int D.24463;
  int D.24464;
  int D.24465;
  int D.24466;
  unsigned int D.24467;
  unsigned char D.24468;
  _Bool D.24469;
  long int D.24470;
  long int D.24471;
  unsigned char D.24474;
  int D.24475;
  int D.24476;
  _Bool D.24477;
  long int D.24478;
  long int D.24479;
  unsigned char D.24482;
  unsigned char D.24483;
  _Bool D.24484;
  int D.24485;
  int iftmp.52;
  unsigned char D.24487;
  int D.24491;
  int D.24492;
  int D.24493;
  int D.24494;
  int D.24495;
  int D.24496;
  int D.24497;
  int D.24498;
  int D.24499;
  int D.24500;
  unsigned int D.24501;
  unsigned int D.24502;
  unsigned int D.24503;
  unsigned int D.24504;
  unsigned char D.24505;
  unsigned int D.24508;
  unsigned int D.24509;
  unsigned char D.24510;
  unsigned int D.24513;
  unsigned int D.24514;
  int D.24515;
  unsigned int D.24516;
  guint32 flags;
  guint32 freg;

  buf.51 = buf;
  D.24460 = map->start_offset;
  D.24461 = D.24460 / 8;
  encode_sleb128 (D.24461, buf.51, &buf);
  buf.51 = buf;
  D.24462 = map->end_offset;
  D.24463 = D.24462 / 8;
  encode_sleb128 (D.24463, buf.51, &buf);
  buf.51 = buf;
  D.24464 = map->map_offset;
  D.24465 = D.24464 / 8;
  encode_sleb128 (D.24465, buf.51, &buf);
  buf.51 = buf;
  D.24466 = map->nslots;
  D.24467 = (unsigned int) D.24466;
  encode_uleb128 (D.24467, buf.51, &buf);
  D.24468 = map->callsite_entry_size;
  D.24469 = D.24468 > 4;
  D.24470 = (long int) D.24469;
  D.24471 = __builtin_expect (D.24470, 0);
  if (D.24471 != 0) goto <D.24472>; else goto <D.24473>;
  <D.24472>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 487, "map->callsite_entry_size <= 4");
  <D.24473>:
  D.24474 = map->frame_reg;
  D.24475 = (int) D.24474;
  D.24476 = encode_frame_reg (D.24475);
  freg = (guint32) D.24476;
  D.24477 = freg > 1;
  D.24478 = (long int) D.24477;
  D.24479 = __builtin_expect (D.24478, 0);
  if (D.24479 != 0) goto <D.24480>; else goto <D.24481>;
  <D.24480>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 489, "freg < 2");
  <D.24481>:
  D.24482 = BIT_FIELD_REF <*map, 8, 144>;
  D.24483 = D.24482 & 2;
  D.24484 = D.24483 != 0;
  D.24485 = (int) D.24484;
  D.24482 = BIT_FIELD_REF <*map, 8, 144>;
  D.24487 = D.24482 & 1;
  if (D.24487 != 0) goto <D.24488>; else goto <D.24489>;
  <D.24488>:
  iftmp.52 = 2;
  goto <D.24490>;
  <D.24489>:
  iftmp.52 = 0;
  <D.24490>:
  D.24491 = D.24485 | iftmp.52;
  D.24482 = BIT_FIELD_REF <*map, 8, 144>;
  D.24492 = (int) D.24482;
  D.24493 = D.24492 & 4;
  D.24494 = D.24491 | D.24493;
  D.24482 = BIT_FIELD_REF <*map, 8, 144>;
  D.24492 = (int) D.24482;
  D.24495 = D.24492 & 8;
  D.24496 = D.24494 | D.24495;
  D.24468 = map->callsite_entry_size;
  D.24497 = (int) D.24468;
  D.24498 = D.24497 + -1;
  D.24499 = D.24498 << 4;
  D.24500 = D.24496 | D.24499;
  D.24501 = (unsigned int) D.24500;
  D.24502 = freg << 6;
  flags = D.24501 | D.24502;
  buf.51 = buf;
  encode_uleb128 (flags, buf.51, &buf);
  buf.51 = buf;
  D.24503 = map->used_int_regs;
  D.24504 = encode_regmask (D.24503);
  encode_uleb128 (D.24504, buf.51, &buf);
  D.24482 = BIT_FIELD_REF <*map, 8, 144>;
  D.24505 = D.24482 & 4;
  if (D.24505 != 0) goto <D.24506>; else goto <D.24507>;
  <D.24506>:
  buf.51 = buf;
  D.24508 = map->reg_ref_mask;
  D.24509 = encode_regmask (D.24508);
  encode_uleb128 (D.24509, buf.51, &buf);
  <D.24507>:
  D.24482 = BIT_FIELD_REF <*map, 8, 144>;
  D.24510 = D.24482 & 8;
  if (D.24510 != 0) goto <D.24511>; else goto <D.24512>;
  <D.24511>:
  buf.51 = buf;
  D.24513 = map->reg_pin_mask;
  D.24514 = encode_regmask (D.24513);
  encode_uleb128 (D.24514, buf.51, &buf);
  <D.24512>:
  buf.51 = buf;
  D.24515 = map->ncallsites;
  D.24516 = (unsigned int) D.24515;
  encode_uleb128 (D.24516, buf.51, &buf);
  buf.51 = buf;
  *endbuf = buf.51;
}


encode_sleb128 (gint32 value, guint8 * buf, guint8 * * endbuf)
{
  _Bool D.24517;
  unsigned char D.24518;
  unsigned int D.24521;
  int D.24522;
  int D.24523;
  int D.24524;
  int D.24530;
  int D.24531;
  guint8 * p.53;
  gboolean more;
  gboolean negative;
  guint32 size;
  guint8 byte;
  guint8 * p;

  more = 1;
  D.24517 = value < 0;
  negative = (gboolean) D.24517;
  size = 32;
  p = buf;
  goto <D.22701>;
  <D.22700>:
  D.24518 = (unsigned char) value;
  byte = D.24518 & 127;
  value = value >> 7;
  if (negative != 0) goto <D.24519>; else goto <D.24520>;
  <D.24519>:
  D.24521 = size + 4294967289;
  D.24522 = (int) D.24521;
  D.24523 = 1 << D.24522;
  D.24524 = -D.24523;
  value = D.24524 | value;
  <D.24520>:
  if (value == 0) goto <D.24529>; else goto <D.24525>;
  <D.24529>:
  D.24530 = (int) byte;
  D.24531 = D.24530 & 64;
  if (D.24531 == 0) goto <D.24526>; else goto <D.24525>;
  <D.24525>:
  if (value == -1) goto <D.24532>; else goto <D.24527>;
  <D.24532>:
  D.24530 = (int) byte;
  D.24531 = D.24530 & 64;
  if (D.24531 != 0) goto <D.24526>; else goto <D.24527>;
  <D.24526>:
  more = 0;
  goto <D.24528>;
  <D.24527>:
  byte = byte | 128;
  <D.24528>:
  p.53 = p;
  p = p.53 + 1;
  *p.53 = byte;
  <D.22701>:
  if (more != 0) goto <D.22700>; else goto <D.22702>;
  <D.22702>:
  *endbuf = p;
}


encode_frame_reg (int frame_reg)
{
  int D.24536;

  if (frame_reg == 4) goto <D.24534>; else goto <D.24535>;
  <D.24534>:
  D.24536 = 0;
  return D.24536;
  <D.24535>:
  if (frame_reg == 5) goto <D.24537>; else goto <D.24538>;
  <D.24537>:
  D.24536 = 1;
  return D.24536;
  <D.24538>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-gc.c", 395);
  D.24536 = -1;
  return D.24536;
}


encode_regmask (guint32 regmask)
{
  int D.24540;
  int D.24541;
  unsigned int D.24542;
  unsigned int D.24543;
  int D.24546;
  unsigned int D.24547;
  unsigned int i.54;
  _Bool D.24549;
  long int D.24550;
  long int D.24551;
  guint32 D.24554;
  int i;
  guint32 res;

  res = 0;
  i = 0;
  goto <D.22736>;
  <D.22735>:
  D.24540 = callee_saved_regs[i];
  D.24541 = 1 << D.24540;
  D.24542 = (unsigned int) D.24541;
  D.24543 = D.24542 & regmask;
  if (D.24543 != 0) goto <D.24544>; else goto <D.24545>;
  <D.24544>:
  D.24546 = 1 << i;
  D.24547 = (unsigned int) D.24546;
  res = D.24547 | res;
  D.24540 = callee_saved_regs[i];
  D.24541 = 1 << D.24540;
  D.24542 = (unsigned int) D.24541;
  regmask = regmask - D.24542;
  <D.24545>:
  i = i + 1;
  <D.22736>:
  i.54 = (unsigned int) i;
  if (i.54 <= 5) goto <D.22735>; else goto <D.22737>;
  <D.22737>:
  D.24549 = regmask != 0;
  D.24550 = (long int) D.24549;
  D.24551 = __builtin_expect (D.24550, 0);
  if (D.24551 != 0) goto <D.24552>; else goto <D.24553>;
  <D.24552>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 456, "regmask == 0");
  <D.24553>:
  D.24554 = res;
  return D.24554;
}


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

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

    D.24556 = (unsigned char) value;
    b = D.24556 & 127;
    value = value >> 7;
    if (value != 0) goto <D.24557>; else goto <D.24558>;
    <D.24557>:
    b = b | 128;
    <D.24558>:
    p.55 = p;
    p = p.55 + 1;
    *p.55 = b;
  }
  if (value != 0) goto <D.22688>; else goto <D.22689>;
  <D.22689>:
  *endbuf = p;
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.24560;
  long unsigned int D.24561;

  D.24561 = __builtin_object_size (__dest, 0);
  D.24560 = __builtin___memcpy_chk (__dest, __src, __len, D.24561);
  return D.24560;
}


mini_gc_init ()
{
  struct FILE * logfile.56;
  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);
      logfile.56 = mono_gc_get_logfile ();
      logfile = logfile.56;
      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.24564>; else goto <D.24565>;
  <D.24564>:
  conservative_pass (tls, stack_start, stack_end);
  goto <D.24566>;
  <D.24565>:
  precise_pass (tls, stack_start, stack_end);
  <D.24566>:
}


conservative_pass (struct TlsData * tls, guint8 * stack_start, guint8 * stack_end)
{
  struct MonoInternalThread * D.24571;
  int D.24573;
  unsigned int D.24574;
  long int stack_end.57;
  long int stack_start.58;
  long int D.24577;
  unsigned int D.24578;
  unsigned int D.24579;
  int D.24580;
  void * lmf.59;
  int D.24582;
  struct MonoContext * D.24586;
  mgreg_t * D.24588;
  mgreg_t * D.24591;
  void * D.24594;
  unsigned long stack_limit.60;
  unsigned long D.24596;
  _Bool D.24597;
  long int D.24598;
  long int D.24599;
  void * D.24602;
  struct MonoDomain * iftmp.61;
  struct MonoDomain * D.24604;
  <unnamed type> D.24609;
  void * D.24625;
  long int D.24626;
  unsigned int D.24627;
  void * D.24628;
  long int D.24629;
  unsigned int D.24630;
  unsigned int D.24631;
  unsigned char D.24632;
  unsigned char D.24633;
  int D.24636;
  _Bool D.24638;
  long int D.24639;
  long int D.24640;
  unsigned long emap.62;
  unsigned long D.24646;
  _Bool D.24647;
  long int D.24648;
  long int D.24649;
  int precise_frame_limit_inited.63;
  const gchar * D.24655;
  const gchar * D.24658;
  int precise_frame_limit.64;
  int precise_frame_limit.65;
  int D.24663;
  char * D.24666;
  int D.24669;
  guint8 * D.24670;
  unsigned char D.24671;
  int D.24672;
  int D.24673;
  long int D.24674;
  guint8 * p.66;
  long int p.67;
  long int D.24677;
  int D.24678;
  long int D.24679;
  long int D.24680;
  guint8 * p.68;
  int D.24682;
  int D.24683;
  sizetype D.24684;
  guint8 * p.69;
  unsigned char D.24686;
  int D.24687;
  long int D.24688;
  int D.24689;
  sizetype D.24690;
  int D.24691;
  sizetype D.24692;
  sizetype D.24693;
  int D.24694;
  sizetype D.24695;
  guint8 * D.24698;
  sizetype D.24699;
  guint8 * D.24700;
  unsigned char D.24701;
  int D.24702;
  int D.24703;
  guint16 * D.24708;
  long unsigned int D.24709;
  long unsigned int D.24710;
  guint16 * D.24711;
  short unsigned int D.24712;
  int D.24713;
  guint32 * D.24716;
  long unsigned int D.24717;
  guint32 * D.24718;
  unsigned int D.24719;
  unsigned int D.24720;
  char * D.24724;
  int D.24727;
  unsigned int D.24728;
  long int real_frame_start.70;
  long int stack_limit.71;
  long int D.24731;
  unsigned int D.24732;
  unsigned int D.24733;
  int D.24734;
  unsigned char D.24735;
  unsigned char D.24736;
  int D.24739;
  long int D.24740;
  long int D.24741;
  long int D.24742;
  unsigned int D.24743;
  int D.24744;
  unsigned int D.24745;
  unsigned int D.24746;
  sizetype D.24747;
  int D.24748;
  sizetype D.24749;
  guint8 * D.24750;
  unsigned char D.24751;
  int D.24752;
  int D.24753;
  int D.24754;
  void * D.24757;
  int D.24760;
  int D.24761;
  int D.24762;
  int D.24763;
  unsigned int D.24764;
  int D.24765;
  unsigned int D.24766;
  unsigned char D.24767;
  unsigned char D.24770;
  long int D.24771;
  long int D.24772;
  long int D.24773;
  unsigned int D.24774;
  int D.24775;
  unsigned int D.24776;
  unsigned int D.24777;
  sizetype D.24778;
  int D.24779;
  unsigned int D.24780;
  unsigned int D.24781;
  unsigned int D.24784;
  unsigned int D.24785;
  int D.24788;
  sizetype D.24789;
  guint8 * D.24790;
  unsigned char D.24791;
  int D.24792;
  int D.24793;
  int D.24794;
  int D.24795;
  int D.24798;
  unsigned int D.24799;
  int D.24800;
  _Bool D.24801;
  long int D.24802;
  long int D.24803;
  unsigned char D.24806;
  unsigned int D.24809;
  int D.24810;
  unsigned int D.24811;
  unsigned int D.24812;
  sizetype D.24813;
  guint8 * D.24814;
  long int frame_start.72;
  long int D.24817;
  int D.24818;
  unsigned char D.24819;
  unsigned char D.24822;
  long int D.24823;
  long int D.24824;
  long int D.24825;
  unsigned int D.24826;
  int D.24827;
  unsigned int D.24828;
  unsigned int D.24829;
  sizetype D.24830;
  unsigned int D.24831;
  unsigned int D.24832;
  int D.24837;
  sizetype D.24838;
  guint8 * D.24839;
  unsigned char D.24840;
  int D.24841;
  int D.24842;
  int D.24843;
  int D.24844;
  int D.24847;
  long int D.24848;
  long int D.24849;
  int D.24850;
  int D.24851;
  unsigned int D.24854;
  int D.24859;
  int D.24866;
  unsigned int D.24867;
  long int D.24868;
  unsigned int D.24869;
  unsigned int D.24870;
  int D.24871;
  int D.24872;
  int D.24873;
  int D.24874;
  int D.24875;
  int D.24876;
  int D.24877;
  int D.24878;
  int D.24879;
  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.24567>; else goto <D.24568>;
      <D.24567>:
      tls->nframes = 0;
      tls->ref_to_track = 0B;
      <D.24568>:
      D.24571 = mono_thread_internal_current ();
      if (D.24571 == 0B) goto <D.24569>; else goto <D.24572>;
      <D.24572>:
      if (tls == 0B) goto <D.24569>; else goto <D.24570>;
      <D.24569>:
      mono_gc_conservatively_scan_area (stack_start, stack_end);
      D.24573 = stats.scanned_stacks;
      D.24574 = (unsigned int) D.24573;
      stack_end.57 = (long int) stack_end;
      stack_start.58 = (long int) stack_start;
      D.24577 = stack_end.57 - stack_start.58;
      D.24578 = (unsigned int) D.24577;
      D.24579 = D.24574 + D.24578;
      D.24580 = (int) D.24579;
      stats.scanned_stacks = D.24580;
      return;
      <D.24570>:
      lmf.59 = tls->unwind_state.unwind_data[1];
      lmf = lmf.59;
      frame.domain = 0B;
      scanned = 0;
      scanned_precisely = 0;
      scanned_conservatively = 0;
      scanned_registers = 0;
      stack_limit = stack_start;
      D.24582 = tls->unwind_state.valid;
      if (D.24582 == 0) goto <D.24583>; else goto <D.24584>;
      <D.24583>:
      memset (&new_ctx, 0, 136);
      goto <D.24585>;
      <D.24584>:
      D.24586 = &tls->unwind_state.ctx;
      memcpy (&new_ctx, D.24586, 136);
      <D.24585>:
      memset (&reg_locations, 0, 128);
      memset (&new_reg_locations, 0, 128);
      <D.22895>:
      D.24582 = tls->unwind_state.valid;
      if (D.24582 == 0) goto <D.22851>; else goto <D.24587>;
      <D.24587>:
      memcpy (&ctx, &new_ctx, 136);
      i = 0;
      goto <D.22853>;
      <D.22852>:
      D.24588 = new_reg_locations[i];
      if (D.24588 != 0B) goto <D.24589>; else goto <D.24590>;
      <D.24589>:
      D.24591 = reg_locations[i];
      if (D.24591 != 0B) goto <D.24592>; else goto <D.24593>;
      <D.24592>:
      D.24591 = reg_locations[i];
      D.24594 = D.24591 + 8;
      D.24591 = reg_locations[i];
      mono_gc_conservatively_scan_area (D.24591, D.24594);
      scanned_registers = scanned_registers + 8;
      <D.24593>:
      D.24588 = new_reg_locations[i];
      reg_locations[i] = D.24588;
      <D.24590>:
      i = i + 1;
      <D.22853>:
      if (i <= 15) goto <D.22852>; else goto <D.22854>;
      <D.22854>:
      stack_limit.60 = (unsigned long) stack_limit;
      D.24596 = stack_limit.60 & 7;
      D.24597 = D.24596 != 0;
      D.24598 = (long int) D.24597;
      D.24599 = __builtin_expect (D.24598, 0);
      if (D.24599 != 0) goto <D.24600>; else goto <D.24601>;
      <D.24600>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 784, "(mgreg_t)stack_limit % SIZEOF_SLOT == 0");
      <D.24601>:
      D.24602 = tls->unwind_state.unwind_data[2];
      D.24604 = frame.domain;
      if (D.24604 != 0B) goto <D.24605>; else goto <D.24606>;
      <D.24605>:
      iftmp.61 = frame.domain;
      goto <D.24607>;
      <D.24606>:
      iftmp.61 = tls->unwind_state.unwind_data[0];
      <D.24607>:
      res = mono_find_jit_info_ext (iftmp.61, D.24602, 0B, &ctx, &new_ctx, 0B, &lmf, &new_reg_locations, &frame);
      if (res == 0) goto <D.22851>; else goto <D.24608>;
      <D.24608>:
      ji = frame.ji;
      D.24609 = frame.type;
      if (D.24609 == 2) goto <D.24610>; else goto <D.24611>;
      <D.24610>:
      i = 0;
      goto <D.22856>;
      <D.22855>:
      D.24591 = reg_locations[i];
      if (D.24591 != 0B) goto <D.24612>; else goto <D.24613>;
      <D.24612>:
      D.24591 = reg_locations[i];
      D.24594 = D.24591 + 8;
      D.24591 = reg_locations[i];
      mono_gc_conservatively_scan_area (D.24591, D.24594);
      scanned_registers = scanned_registers + 8;
      <D.24613>:
      reg_locations[i] = 0B;
      new_reg_locations[i] = 0B;
      i = i + 1;
      <D.22856>:
      if (i <= 15) goto <D.22855>; else goto <D.22857>;
      <D.22857>:
      ctx = new_ctx;
      // predicted unlikely by continue predictor.
      goto <D.22858>;
      <D.24611>:
      if (ji != 0B) goto <D.24614>; else goto <D.24615>;
      <D.24614>:
      method = jinfo_get_method (ji);
      goto <D.24616>;
      <D.24615>:
      method = 0B;
      <D.24616>:
      if (last != 0) goto <D.24617>; else goto <D.24618>;
      <D.24617>:
      if (ji != 0B) goto <D.24619>; else goto <D.24620>;
      <D.24619>:
      <D.24620>:
      last = 0;
      i = 0;
      goto <D.22860>;
      <D.22859>:
      D.24591 = reg_locations[i];
      if (D.24591 != 0B) goto <D.24621>; else goto <D.24622>;
      <D.24621>:
      D.24591 = reg_locations[i];
      D.24594 = D.24591 + 8;
      D.24591 = reg_locations[i];
      mono_gc_conservatively_scan_area (D.24591, D.24594);
      scanned_registers = scanned_registers + 8;
      <D.24622>:
      D.24588 = new_reg_locations[i];
      if (D.24588 != 0B) goto <D.24623>; else goto <D.24624>;
      <D.24623>:
      D.24588 = new_reg_locations[i];
      D.24625 = D.24588 + 8;
      D.24588 = new_reg_locations[i];
      mono_gc_conservatively_scan_area (D.24588, D.24625);
      scanned_registers = scanned_registers + 8;
      <D.24624>:
      reg_locations[i] = 0B;
      new_reg_locations[i] = 0B;
      i = i + 1;
      <D.22860>:
      if (i <= 15) goto <D.22859>; else goto <D.22861>;
      <D.22861>:
      // predicted unlikely by continue predictor.
      goto <D.22858>;
      <D.24618>:
      D.24626 = ctx.rip;
      D.24627 = (unsigned int) D.24626;
      D.24628 = ji->code_start;
      D.24629 = (long int) D.24628;
      D.24630 = (unsigned int) D.24629;
      D.24631 = D.24627 - D.24630;
      pc_offset = (int) D.24631;
      D.24632 = BIT_FIELD_REF <*method, 8, 256>;
      D.24633 = D.24632 & 124;
      if (D.24633 == 24) goto <D.24634>; else goto <D.24635>;
      <D.24634>:
      // predicted unlikely by continue predictor.
      goto <D.22858>;
      <D.24635>:
      D.24636 = tls->nframes;
      if (D.24636 == 50) goto <D.22851>; else goto <D.24637>;
      <D.24637>:
      D.24638 = pc_offset < 0;
      D.24639 = (long int) D.24638;
      D.24640 = __builtin_expect (D.24639, 0);
      if (D.24640 != 0) goto <D.24641>; else goto <D.24642>;
      <D.24641>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 877, "pc_offset >= 0");
      <D.24642>:
      emap = ji->gc_info;
      if (emap == 0B) goto <D.24643>; else goto <D.24644>;
      <D.24643>:
      // predicted unlikely by continue predictor.
      goto <D.22858>;
      <D.24644>:
      emap.62 = (unsigned long) emap;
      D.24646 = emap.62 & 3;
      D.24647 = D.24646 != 0;
      D.24648 = (long int) D.24647;
      D.24649 = __builtin_expect (D.24648, 0);
      if (D.24649 != 0) goto <D.24650>; else goto <D.24651>;
      <D.24650>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 888, "((mgreg_t)emap % 4) == 0");
      <D.24651>:
      precise_frame_limit_inited.63 = precise_frame_limit_inited;
      if (precise_frame_limit_inited.63 == 0) goto <D.24653>; else goto <D.24654>;
      <D.24653>:
      D.24655 = monoeg_g_getenv ("MONO_PRECISE_COUNT");
      if (D.24655 != 0B) goto <D.24656>; else goto <D.24657>;
      <D.24656>:
      D.24658 = monoeg_g_getenv ("MONO_PRECISE_COUNT");
      precise_frame_limit.64 = atoi (D.24658);
      precise_frame_limit = precise_frame_limit.64;
      <D.24657>:
      precise_frame_limit_inited = 1;
      <D.24654>:
      precise_frame_limit.65 = precise_frame_limit;
      if (precise_frame_limit.65 != -1) goto <D.24661>; else goto <D.24662>;
      <D.24661>:
      D.24663 = precise_frame_count[0];
      precise_frame_limit.65 = precise_frame_limit;
      if (D.24663 == precise_frame_limit.65) goto <D.24664>; else goto <D.24665>;
      <D.24664>:
      D.24666 = mono_method_full_name (method, 1);
      printf ("LAST PRECISE FRAME: %s\n", D.24666);
      <D.24665>:
      D.24663 = precise_frame_count[0];
      precise_frame_limit.65 = precise_frame_limit;
      if (D.24663 > precise_frame_limit.65) goto <D.24667>; else goto <D.24668>;
      <D.24667>:
      // predicted unlikely by continue predictor.
      goto <D.22858>;
      <D.24668>:
      <D.24662>:
      D.24663 = precise_frame_count[0];
      D.24669 = D.24663 + 1;
      precise_frame_count[0] = D.24669;
      map = &map_tmp;
      memset (map, 0, 72);
      D.24670 = &emap->encoded[0];
      decode_gc_map (D.24670, map, &p);
      D.24671 = map->callsite_entry_size;
      D.24672 = (int) D.24671;
      D.24673 = D.24672 + -1;
      D.24674 = (long int) D.24673;
      p.66 = p;
      p.67 = (long int) p.66;
      D.24677 = D.24674 + p.67;
      D.24671 = map->callsite_entry_size;
      D.24672 = (int) D.24671;
      D.24678 = -D.24672;
      D.24679 = (long int) D.24678;
      D.24680 = D.24677 & D.24679;
      p.68 = (guint8 *) D.24680;
      p = p.68;
      p.66 = p;
      map->callsites.offsets8 = p.66;
      p.66 = p;
      D.24671 = map->callsite_entry_size;
      D.24672 = (int) D.24671;
      D.24682 = map->ncallsites;
      D.24683 = D.24672 * D.24682;
      D.24684 = (sizetype) D.24683;
      p.69 = p.66 + D.24684;
      p = p.69;
      bitmaps = p;
      D.24686 = map->frame_reg;
      D.24687 = (int) D.24686;
      D.24688 = get_frame_pointer (&ctx, D.24687);
      fp = (guint8 *) D.24688;
      D.24689 = map->start_offset;
      D.24690 = (sizetype) D.24689;
      real_frame_start = fp + D.24690;
      D.24689 = map->start_offset;
      D.24690 = (sizetype) D.24689;
      D.24691 = map->map_offset;
      D.24692 = (sizetype) D.24691;
      D.24693 = D.24690 + D.24692;
      frame_start = fp + D.24693;
      D.24694 = map->end_offset;
      D.24695 = (sizetype) D.24694;
      frame_end = fp + D.24695;
      D.24671 = map->callsite_entry_size;
      if (D.24671 == 1) goto <D.24696>; else goto <D.24697>;
      <D.24696>:
      i = 0;
      goto <D.22864>;
      <D.22863>:
      D.24698 = map->callsites.offsets8;
      D.24699 = (sizetype) i;
      D.24700 = D.24698 + D.24699;
      D.24701 = *D.24700;
      D.24702 = (int) D.24701;
      D.24703 = pc_offset + 1;
      if (D.24702 == D.24703) goto <D.22862>; else goto <D.24704>;
      <D.24704>:
      i = i + 1;
      <D.22864>:
      D.24682 = map->ncallsites;
      if (D.24682 > i) goto <D.22863>; else goto <D.22862>;
      <D.22862>:
      goto <D.24705>;
      <D.24697>:
      D.24671 = map->callsite_entry_size;
      if (D.24671 == 2) goto <D.24706>; else goto <D.24707>;
      <D.24706>:
      i = 0;
      goto <D.22867>;
      <D.22866>:
      D.24708 = map->callsites.offsets16;
      D.24709 = (long unsigned int) i;
      D.24710 = D.24709 * 2;
      D.24711 = D.24708 + D.24710;
      D.24712 = *D.24711;
      D.24713 = (int) D.24712;
      D.24703 = pc_offset + 1;
      if (D.24713 == D.24703) goto <D.22865>; else goto <D.24714>;
      <D.24714>:
      i = i + 1;
      <D.22867>:
      D.24682 = map->ncallsites;
      if (D.24682 > i) goto <D.22866>; else goto <D.22865>;
      <D.22865>:
      goto <D.24715>;
      <D.24707>:
      i = 0;
      goto <D.22870>;
      <D.22869>:
      D.24716 = map->callsites.offsets32;
      D.24709 = (long unsigned int) i;
      D.24717 = D.24709 * 4;
      D.24718 = D.24716 + D.24717;
      D.24719 = *D.24718;
      D.24703 = pc_offset + 1;
      D.24720 = (unsigned int) D.24703;
      if (D.24719 == D.24720) goto <D.22868>; else goto <D.24721>;
      <D.24721>:
      i = i + 1;
      <D.22870>:
      D.24682 = map->ncallsites;
      if (D.24682 > i) goto <D.22869>; else goto <D.22868>;
      <D.22868>:
      <D.24715>:
      <D.24705>:
      D.24682 = map->ncallsites;
      if (D.24682 == i) goto <D.24722>; else goto <D.24723>;
      <D.24722>:
      D.24724 = mono_method_full_name (method, 1);
      D.24703 = pc_offset + 1;
      printf ("Unable to find ip offset 0x%x in callsite list of %s.\n", D.24703, D.24724);
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-gc.c", 945);
      <D.24723>:
      cindex = i;
      if (real_frame_start > stack_limit) goto <D.24725>; else goto <D.24726>;
      <D.24725>:
      mono_gc_conservatively_scan_area (stack_limit, real_frame_start);
      D.24727 = stats.scanned_other;
      D.24728 = (unsigned int) D.24727;
      real_frame_start.70 = (long int) real_frame_start;
      stack_limit.71 = (long int) stack_limit;
      D.24731 = real_frame_start.70 - stack_limit.71;
      D.24732 = (unsigned int) D.24731;
      D.24733 = D.24728 + D.24732;
      D.24734 = (int) D.24733;
      stats.scanned_other = D.24734;
      <D.24726>:
      D.24735 = BIT_FIELD_REF <*map, 8, 144>;
      D.24736 = D.24735 & 1;
      if (D.24736 != 0) goto <D.24737>; else goto <D.24738>;
      <D.24737>:
      {
        int bitmap_width;
        guint8 * pin_bitmap;
        guint8 * p;
        gboolean pinned;

        D.24739 = map->nslots;
        D.24740 = (long int) D.24739;
        D.24741 = D.24740 + 7;
        D.24742 = D.24741 >> 3;
        bitmap_width = (int) D.24742;
        D.24743 = map->stack_pin_bitmap_offset;
        D.24744 = bitmap_width * cindex;
        D.24745 = (unsigned int) D.24744;
        D.24746 = D.24743 + D.24745;
        D.24747 = (sizetype) D.24746;
        pin_bitmap = bitmaps + D.24747;
        p = frame_start;
        i = 0;
        goto <D.22876>;
        <D.22875>:
        D.24748 = i / 8;
        D.24749 = (sizetype) D.24748;
        D.24750 = pin_bitmap + D.24749;
        D.24751 = *D.24750;
        D.24752 = (int) D.24751;
        D.24753 = i % 8;
        D.24754 = 1 << D.24753;
        pinned = D.24752 & D.24754;
        if (pinned != 0) goto <D.24755>; else goto <D.24756>;
        <D.24755>:
        D.24757 = p + 8;
        mono_gc_conservatively_scan_area (p, D.24757);
        scanned_conservatively = scanned_conservatively + 8;
        goto <D.24758>;
        <D.24756>:
        scanned_precisely = scanned_precisely + 8;
        <D.24758>:
        p = p + 8;
        i = i + 1;
        <D.22876>:
        D.24739 = map->nslots;
        if (D.24739 > i) goto <D.22875>; else goto <D.22877>;
        <D.22877>:
      }
      goto <D.24759>;
      <D.24738>:
      D.24739 = map->nslots;
      D.24760 = D.24739 * 8;
      scanned_precisely = D.24760 + scanned_precisely;
      <D.24759>:
      D.24694 = map->end_offset;
      D.24689 = map->start_offset;
      D.24761 = D.24694 - D.24689;
      D.24739 = map->nslots;
      D.24762 = D.24739 * -8;
      D.24763 = D.24761 + D.24762;
      scanned_precisely = D.24763 + scanned_precisely;
      D.24764 = map->used_int_regs;
      D.24686 = map->frame_reg;
      D.24687 = (int) D.24686;
      D.24765 = 1 << D.24687;
      D.24766 = (unsigned int) D.24765;
      precise_regmask = D.24764 | D.24766;
      D.24735 = BIT_FIELD_REF <*map, 8, 144>;
      D.24767 = D.24735 & 8;
      if (D.24767 != 0) goto <D.24768>; else goto <D.24769>;
      <D.24768>:
      {
        int bitmap_width;
        guint8 * pin_bitmap;
        int bindex;

        D.24770 = map->npin_regs;
        D.24771 = (long int) D.24770;
        D.24772 = D.24771 + 7;
        D.24773 = D.24772 >> 3;
        bitmap_width = (int) D.24773;
        D.24774 = map->reg_pin_bitmap_offset;
        D.24775 = bitmap_width * cindex;
        D.24776 = (unsigned int) D.24775;
        D.24777 = D.24774 + D.24776;
        D.24778 = (sizetype) D.24777;
        pin_bitmap = bitmaps + D.24778;
        bindex = 0;
        i = 0;
        goto <D.22883>;
        <D.22882>:
        D.24764 = map->used_int_regs;
        D.24779 = 1 << i;
        D.24780 = (unsigned int) D.24779;
        D.24781 = D.24764 & D.24780;
        if (D.24781 == 0) goto <D.24782>; else goto <D.24783>;
        <D.24782>:
        // predicted unlikely by continue predictor.
        goto <D.22881>;
        <D.24783>:
        D.24784 = map->reg_pin_mask;
        D.24779 = 1 << i;
        D.24780 = (unsigned int) D.24779;
        D.24785 = D.24784 & D.24780;
        if (D.24785 == 0) goto <D.24786>; else goto <D.24787>;
        <D.24786>:
        // predicted unlikely by continue predictor.
        goto <D.22881>;
        <D.24787>:
        D.24788 = bindex / 8;
        D.24789 = (sizetype) D.24788;
        D.24790 = pin_bitmap + D.24789;
        D.24791 = *D.24790;
        D.24792 = (int) D.24791;
        D.24793 = bindex % 8;
        D.24794 = D.24792 >> D.24793;
        D.24795 = D.24794 & 1;
        if (D.24795 != 0) goto <D.24796>; else goto <D.24797>;
        <D.24796>:
        D.24779 = 1 << i;
        D.24798 = ~D.24779;
        D.24799 = (unsigned int) D.24798;
        precise_regmask = D.24799 & precise_regmask;
        <D.24797>:
        bindex = bindex + 1;
        <D.22881>:
        i = i + 1;
        <D.22883>:
        if (i <= 15) goto <D.22882>; else goto <D.22884>;
        <D.22884>:
      }
      <D.24769>:
      D.24694 = map->end_offset;
      D.24689 = map->start_offset;
      D.24761 = D.24694 - D.24689;
      scanned = D.24761 + scanned;
      D.24800 = scanned_precisely + scanned_conservatively;
      D.24801 = D.24800 != scanned;
      D.24802 = (long int) D.24801;
      D.24803 = __builtin_expect (D.24802, 0);
      if (D.24803 != 0) goto <D.24804>; else goto <D.24805>;
      <D.24804>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 1011, "scanned == scanned_precisely + scanned_conservatively");
      <D.24805>:
      stack_limit = frame_end;
      D.24636 = tls->nframes;
      fi = &tls->frames[D.24636];
      D.24739 = map->nslots;
      fi->nslots = D.24739;
      D.24739 = map->nslots;
      D.24740 = (long int) D.24739;
      D.24741 = D.24740 + 7;
      D.24742 = D.24741 >> 3;
      bitmap_width = (int) D.24742;
      D.24735 = BIT_FIELD_REF <*map, 8, 144>;
      D.24806 = D.24735 & 2;
      if (D.24806 != 0) goto <D.24807>; else goto <D.24808>;
      <D.24807>:
      D.24809 = map->stack_ref_bitmap_offset;
      D.24810 = bitmap_width * cindex;
      D.24811 = (unsigned int) D.24810;
      D.24812 = D.24809 + D.24811;
      D.24813 = (sizetype) D.24812;
      D.24814 = bitmaps + D.24813;
      fi->bitmap = D.24814;
      goto <D.24815>;
      <D.24808>:
      fi->bitmap = 0B;
      <D.24815>:
      frame_start.72 = (long int) frame_start;
      stack_start.58 = (long int) stack_start;
      D.24817 = frame_start.72 - stack_start.58;
      D.24818 = (int) D.24817;
      fi->frame_start_offset = D.24818;
      fi->nreg_locations = 0;
      D.24735 = BIT_FIELD_REF <*map, 8, 144>;
      D.24819 = D.24735 & 4;
      if (D.24819 != 0) goto <D.24820>; else goto <D.24821>;
      <D.24820>:
      {
        int bitmap_width;
        guint8 * ref_bitmap;
        int bindex;

        D.24822 = map->nref_regs;
        D.24823 = (long int) D.24822;
        D.24824 = D.24823 + 7;
        D.24825 = D.24824 >> 3;
        bitmap_width = (int) D.24825;
        D.24826 = map->reg_ref_bitmap_offset;
        D.24827 = bitmap_width * cindex;
        D.24828 = (unsigned int) D.24827;
        D.24829 = D.24826 + D.24828;
        D.24830 = (sizetype) D.24829;
        ref_bitmap = bitmaps + D.24830;
        bindex = 0;
        i = 0;
        goto <D.22890>;
        <D.22889>:
        D.24831 = map->reg_ref_mask;
        D.24779 = 1 << i;
        D.24780 = (unsigned int) D.24779;
        D.24832 = D.24831 & D.24780;
        if (D.24832 == 0) goto <D.24833>; else goto <D.24834>;
        <D.24833>:
        // predicted unlikely by continue predictor.
        goto <D.22888>;
        <D.24834>:
        D.24591 = reg_locations[i];
        if (D.24591 != 0B) goto <D.24835>; else goto <D.24836>;
        <D.24835>:
        D.24837 = bindex / 8;
        D.24838 = (sizetype) D.24837;
        D.24839 = ref_bitmap + D.24838;
        D.24840 = *D.24839;
        D.24841 = (int) D.24840;
        D.24842 = bindex % 8;
        D.24843 = D.24841 >> D.24842;
        D.24844 = D.24843 & 1;
        if (D.24844 != 0) goto <D.24845>; else goto <D.24846>;
        <D.24845>:
        D.24847 = fi->nreg_locations;
        D.24591 = reg_locations[i];
        D.24848 = (long int) D.24591;
        stack_start.58 = (long int) stack_start;
        D.24849 = D.24848 - stack_start.58;
        D.24850 = (int) D.24849;
        fi->reg_locations[D.24847] = D.24850;
        D.24847 = fi->nreg_locations;
        D.24851 = D.24847 + 1;
        fi->nreg_locations = D.24851;
        <D.24846>:
        <D.24836>:
        bindex = bindex + 1;
        <D.22888>:
        i = i + 1;
        <D.22890>:
        if (i <= 15) goto <D.22889>; else goto <D.22891>;
        <D.22891>:
      }
      <D.24821>:
      if (precise_regmask != 0) goto <D.24852>; else goto <D.24853>;
      <D.24852>:
      i = 0;
      goto <D.22893>;
      <D.22892>:
      D.24779 = 1 << i;
      D.24780 = (unsigned int) D.24779;
      D.24854 = D.24780 & precise_regmask;
      if (D.24854 != 0) goto <D.24855>; else goto <D.24856>;
      <D.24855>:
      D.24591 = reg_locations[i];
      if (D.24591 != 0B) goto <D.24857>; else goto <D.24858>;
      <D.24857>:
      <D.24858>:
      reg_locations[i] = 0B;
      <D.24856>:
      i = i + 1;
      <D.22893>:
      if (i <= 15) goto <D.22892>; else goto <D.22894>;
      <D.22894>:
      <D.24853>:
      D.24636 = tls->nframes;
      D.24859 = D.24636 + 1;
      tls->nframes = D.24859;
      <D.22858>:
      goto <D.22895>;
      <D.22851>:
      i = 0;
      goto <D.22897>;
      <D.22896>:
      D.24591 = reg_locations[i];
      if (D.24591 != 0B) goto <D.24860>; else goto <D.24861>;
      <D.24860>:
      D.24591 = reg_locations[i];
      D.24594 = D.24591 + 8;
      D.24591 = reg_locations[i];
      mono_gc_conservatively_scan_area (D.24591, D.24594);
      scanned_registers = scanned_registers + 8;
      <D.24861>:
      D.24588 = new_reg_locations[i];
      if (D.24588 != 0B) goto <D.24862>; else goto <D.24863>;
      <D.24862>:
      D.24588 = new_reg_locations[i];
      D.24625 = D.24588 + 8;
      D.24588 = new_reg_locations[i];
      mono_gc_conservatively_scan_area (D.24588, D.24625);
      scanned_registers = scanned_registers + 8;
      <D.24863>:
      i = i + 1;
      <D.22897>:
      if (i <= 15) goto <D.22896>; else goto <D.22898>;
      <D.22898>:
      if (stack_limit < stack_end) goto <D.24864>; else goto <D.24865>;
      <D.24864>:
      mono_gc_conservatively_scan_area (stack_limit, stack_end);
      D.24866 = stats.scanned_native;
      D.24867 = (unsigned int) D.24866;
      stack_end.57 = (long int) stack_end;
      stack_limit.71 = (long int) stack_limit;
      D.24868 = stack_end.57 - stack_limit.71;
      D.24869 = (unsigned int) D.24868;
      D.24870 = D.24867 + D.24869;
      D.24871 = (int) D.24870;
      stats.scanned_native = D.24871;
      <D.24865>:
      D.24573 = stats.scanned_stacks;
      D.24574 = (unsigned int) D.24573;
      stack_end.57 = (long int) stack_end;
      stack_start.58 = (long int) stack_start;
      D.24577 = stack_end.57 - stack_start.58;
      D.24578 = (unsigned int) D.24577;
      D.24579 = D.24574 + D.24578;
      D.24580 = (int) D.24579;
      stats.scanned_stacks = D.24580;
      D.24872 = stats.scanned;
      D.24873 = D.24872 + scanned;
      stats.scanned = D.24873;
      D.24874 = stats.scanned_precisely;
      D.24875 = D.24874 + scanned_precisely;
      stats.scanned_precisely = D.24875;
      D.24876 = stats.scanned_conservatively;
      D.24877 = D.24876 + scanned_conservatively;
      stats.scanned_conservatively = D.24877;
      D.24878 = stats.scanned_registers;
      D.24879 = D.24878 + scanned_registers;
      stats.scanned_registers = D.24879;
    }
  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.24883;

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


atoi (const char * __nptr)
{
  int D.24885;
  long int D.24886;

  D.24886 = strtol (__nptr, 0B, 10);
  D.24885 = (int) D.24886;
  return D.24885;
}


decode_gc_map (guint8 * buf, struct GCMap * map, guint8 * * endbuf)
{
  guint8 * buf.73;
  int D.24889;
  int D.24890;
  int D.24891;
  int D.24892;
  int D.24893;
  int D.24894;
  unsigned int D.24895;
  int D.24896;
  unsigned int D.24897;
  _Bool D.24898;
  unsigned int D.24899;
  _Bool D.24900;
  unsigned int D.24901;
  _Bool D.24902;
  unsigned int D.24903;
  _Bool D.24904;
  unsigned int D.24905;
  unsigned char D.24906;
  unsigned char D.24907;
  unsigned char D.24908;
  unsigned int D.24909;
  int D.24910;
  unsigned char D.24911;
  unsigned int D.24912;
  unsigned int D.24913;
  unsigned char D.24914;
  unsigned char D.24915;
  unsigned int D.24918;
  unsigned int D.24919;
  unsigned int D.24920;
  int D.24921;
  unsigned int D.24922;
  unsigned int D.24923;
  unsigned char D.24926;
  unsigned char D.24927;
  unsigned int D.24930;
  unsigned int D.24931;
  unsigned int D.24932;
  unsigned int D.24933;
  unsigned int D.24936;
  int D.24937;
  int D.24938;
  long int D.24939;
  long int D.24940;
  long int D.24941;
  unsigned int D.24942;
  int D.24943;
  unsigned int D.24944;
  unsigned int D.24945;
  unsigned char D.24946;
  long int D.24947;
  long int D.24948;
  long int D.24949;
  unsigned int D.24950;
  unsigned int D.24951;
  unsigned char D.24952;
  long int D.24953;
  long int D.24954;
  long int D.24955;
  unsigned int D.24956;
  unsigned int D.24957;
  unsigned int offset.74;
  unsigned char D.24959;
  unsigned char D.24962;
  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.73 = buf;
  D.24889 = decode_sleb128 (buf.73, &buf);
  D.24890 = D.24889 * 8;
  map->start_offset = D.24890;
  buf.73 = buf;
  D.24891 = decode_sleb128 (buf.73, &buf);
  D.24892 = D.24891 * 8;
  map->end_offset = D.24892;
  buf.73 = buf;
  D.24893 = decode_sleb128 (buf.73, &buf);
  D.24894 = D.24893 * 8;
  map->map_offset = D.24894;
  buf.73 = buf;
  D.24895 = decode_uleb128 (buf.73, &buf);
  D.24896 = (int) D.24895;
  map->nslots = D.24896;
  buf.73 = buf;
  flags = decode_uleb128 (buf.73, &buf);
  D.24897 = flags & 1;
  D.24898 = D.24897 != 0;
  map->has_ref_slots = D.24898;
  D.24899 = flags & 2;
  D.24900 = D.24899 != 0;
  map->has_pin_slots = D.24900;
  D.24901 = flags & 4;
  D.24902 = D.24901 != 0;
  map->has_ref_regs = D.24902;
  D.24903 = flags & 8;
  D.24904 = D.24903 != 0;
  map->has_pin_regs = D.24904;
  D.24905 = flags >> 4;
  D.24906 = (unsigned char) D.24905;
  D.24907 = D.24906 & 3;
  D.24908 = D.24907 + 1;
  map->callsite_entry_size = D.24908;
  D.24909 = flags >> 6;
  freg = (int) D.24909;
  D.24910 = decode_frame_reg (freg);
  D.24911 = (unsigned char) D.24910;
  map->frame_reg = D.24911;
  buf.73 = buf;
  D.24912 = decode_uleb128 (buf.73, &buf);
  D.24913 = decode_regmask (D.24912);
  map->used_int_regs = D.24913;
  D.24914 = BIT_FIELD_REF <*map, 8, 144>;
  D.24915 = D.24914 & 4;
  if (D.24915 != 0) goto <D.24916>; else goto <D.24917>;
  <D.24916>:
  buf.73 = buf;
  D.24918 = decode_uleb128 (buf.73, &buf);
  D.24919 = decode_regmask (D.24918);
  map->reg_ref_mask = D.24919;
  n = 0;
  i = 0;
  goto <D.22767>;
  <D.22766>:
  D.24920 = map->reg_ref_mask;
  D.24921 = 1 << i;
  D.24922 = (unsigned int) D.24921;
  D.24923 = D.24920 & D.24922;
  if (D.24923 != 0) goto <D.24924>; else goto <D.24925>;
  <D.24924>:
  n = n + 1;
  <D.24925>:
  i = i + 1;
  <D.22767>:
  if (i <= 15) goto <D.22766>; else goto <D.22768>;
  <D.22768>:
  D.24926 = (unsigned char) n;
  map->nref_regs = D.24926;
  <D.24917>:
  D.24914 = BIT_FIELD_REF <*map, 8, 144>;
  D.24927 = D.24914 & 8;
  if (D.24927 != 0) goto <D.24928>; else goto <D.24929>;
  <D.24928>:
  buf.73 = buf;
  D.24930 = decode_uleb128 (buf.73, &buf);
  D.24931 = decode_regmask (D.24930);
  map->reg_pin_mask = D.24931;
  n = 0;
  i = 0;
  goto <D.22770>;
  <D.22769>:
  D.24932 = map->reg_pin_mask;
  D.24921 = 1 << i;
  D.24922 = (unsigned int) D.24921;
  D.24933 = D.24932 & D.24922;
  if (D.24933 != 0) goto <D.24934>; else goto <D.24935>;
  <D.24934>:
  n = n + 1;
  <D.24935>:
  i = i + 1;
  <D.22770>:
  if (i <= 15) goto <D.22769>; else goto <D.22771>;
  <D.22771>:
  D.24926 = (unsigned char) n;
  map->npin_regs = D.24926;
  <D.24929>:
  buf.73 = buf;
  D.24936 = decode_uleb128 (buf.73, &buf);
  D.24937 = (int) D.24936;
  map->ncallsites = D.24937;
  D.24938 = map->nslots;
  D.24939 = (long int) D.24938;
  D.24940 = D.24939 + 7;
  D.24941 = D.24940 >> 3;
  D.24942 = (unsigned int) D.24941;
  D.24943 = map->ncallsites;
  D.24944 = (unsigned int) D.24943;
  D.24945 = D.24942 * D.24944;
  stack_bitmap_size = (int) D.24945;
  D.24946 = map->nref_regs;
  D.24947 = (long int) D.24946;
  D.24948 = D.24947 + 7;
  D.24949 = D.24948 >> 3;
  D.24950 = (unsigned int) D.24949;
  D.24943 = map->ncallsites;
  D.24944 = (unsigned int) D.24943;
  D.24951 = D.24950 * D.24944;
  reg_ref_bitmap_size = (int) D.24951;
  D.24952 = map->npin_regs;
  D.24953 = (long int) D.24952;
  D.24954 = D.24953 + 7;
  D.24955 = D.24954 >> 3;
  D.24956 = (unsigned int) D.24955;
  D.24943 = map->ncallsites;
  D.24944 = (unsigned int) D.24943;
  D.24957 = D.24956 * D.24944;
  reg_pin_bitmap_size = (int) D.24957;
  offset = 0;
  offset.74 = (unsigned int) offset;
  map->stack_ref_bitmap_offset = offset.74;
  D.24914 = BIT_FIELD_REF <*map, 8, 144>;
  D.24959 = D.24914 & 2;
  if (D.24959 != 0) goto <D.24960>; else goto <D.24961>;
  <D.24960>:
  offset = offset + stack_bitmap_size;
  <D.24961>:
  offset.74 = (unsigned int) offset;
  map->stack_pin_bitmap_offset = offset.74;
  D.24914 = BIT_FIELD_REF <*map, 8, 144>;
  D.24962 = D.24914 & 1;
  if (D.24962 != 0) goto <D.24963>; else goto <D.24964>;
  <D.24963>:
  offset = offset + stack_bitmap_size;
  <D.24964>:
  offset.74 = (unsigned int) offset;
  map->reg_ref_bitmap_offset = offset.74;
  D.24914 = BIT_FIELD_REF <*map, 8, 144>;
  D.24915 = D.24914 & 4;
  if (D.24915 != 0) goto <D.24965>; else goto <D.24966>;
  <D.24965>:
  offset = offset + reg_ref_bitmap_size;
  <D.24966>:
  offset.74 = (unsigned int) offset;
  map->reg_pin_bitmap_offset = offset.74;
  D.24914 = BIT_FIELD_REF <*map, 8, 144>;
  D.24927 = D.24914 & 8;
  if (D.24927 != 0) goto <D.24967>; else goto <D.24968>;
  <D.24967>:
  offset = offset + reg_pin_bitmap_size;
  <D.24968>:
  buf.73 = buf;
  *endbuf = buf.73;
}


decode_sleb128 (guint8 * buf, guint8 * * endbuf)
{
  int D.24969;
  int D.24970;
  int D.24971;
  signed char b.75;
  int D.24977;
  int D.24980;
  int D.24981;
  gint32 D.24982;
  guint8 * p;
  gint32 res;
  int shift;

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

    b = *p;
    p = p + 1;
    D.24969 = (int) b;
    D.24970 = D.24969 & 127;
    D.24971 = D.24970 << shift;
    res = D.24971 | res;
    shift = shift + 7;
    b.75 = (signed char) b;
    if (b.75 >= 0) goto <D.24973>; else goto <D.24974>;
    <D.24973>:
    if (shift <= 31) goto <D.24975>; else goto <D.24976>;
    <D.24975>:
    D.24969 = (int) b;
    D.24977 = D.24969 & 64;
    if (D.24977 != 0) goto <D.24978>; else goto <D.24979>;
    <D.24978>:
    D.24980 = 1 << shift;
    D.24981 = -D.24980;
    res = D.24981 | res;
    <D.24979>:
    <D.24976>:
    goto <D.22721>;
    <D.24974>:
  }
  goto <D.22722>;
  <D.22721>:
  *endbuf = p;
  D.24982 = res;
  return D.24982;
}


decode_frame_reg (int encoded)
{
  int D.24986;

  if (encoded == 0) goto <D.24984>; else goto <D.24985>;
  <D.24984>:
  D.24986 = 4;
  return D.24986;
  <D.24985>:
  if (encoded == 1) goto <D.24987>; else goto <D.24988>;
  <D.24987>:
  D.24986 = 5;
  return D.24986;
  <D.24988>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-gc.c", 425);
  D.24986 = -1;
  return D.24986;
}


decode_regmask (guint32 regmask)
{
  int D.24990;
  unsigned int D.24991;
  unsigned int D.24992;
  int D.24995;
  int D.24996;
  unsigned int D.24997;
  unsigned int i.76;
  guint32 D.24999;
  int i;
  guint32 res;

  res = 0;
  i = 0;
  goto <D.22744>;
  <D.22743>:
  D.24990 = 1 << i;
  D.24991 = (unsigned int) D.24990;
  D.24992 = D.24991 & regmask;
  if (D.24992 != 0) goto <D.24993>; else goto <D.24994>;
  <D.24993>:
  D.24995 = callee_saved_regs[i];
  D.24996 = 1 << D.24995;
  D.24997 = (unsigned int) D.24996;
  res = D.24997 | res;
  <D.24994>:
  i = i + 1;
  <D.22744>:
  i.76 = (unsigned int) i;
  if (i.76 <= 5) goto <D.22743>; else goto <D.22745>;
  <D.22745>:
  D.24999 = res;
  return D.24999;
}


decode_uleb128 (guint8 * buf, guint8 * * endbuf)
{
  int D.25001;
  int D.25002;
  int D.25003;
  unsigned int D.25004;
  signed char b.77;
  guint32 D.25007;
  guint8 * p;
  guint32 res;
  int shift;

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

    b = *p;
    p = p + 1;
    D.25001 = (int) b;
    D.25002 = D.25001 & 127;
    D.25003 = D.25002 << shift;
    D.25004 = (unsigned int) D.25003;
    res = D.25004 | res;
    b.77 = (signed char) b;
    if (b.77 >= 0) goto <D.22711>; else goto <D.25006>;
    <D.25006>:
    shift = shift + 7;
  }
  goto <D.22712>;
  <D.22711>:
  *endbuf = p;
  D.25007 = res;
  return D.25007;
}


get_frame_pointer (struct MonoContext * ctx, int frame_reg)
{
  mgreg_t D.25011;

  if (frame_reg == 4) goto <D.25009>; else goto <D.25010>;
  <D.25009>:
  D.25011 = ctx->rsp;
  return D.25011;
  <D.25010>:
  if (frame_reg == 5) goto <D.25012>; else goto <D.25013>;
  <D.25012>:
  D.25011 = ctx->rbp;
  return D.25011;
  <D.25013>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "mini-gc.c", 692);
  D.25011 = 0;
  return D.25011;
}


precise_pass (struct TlsData * tls, guint8 * stack_start, guint8 * stack_end)
{
  int D.25017;
  int D.25020;
  sizetype D.25021;
  guint8 * D.25022;
  int D.25025;
  sizetype D.25026;
  int D.25027;
  sizetype D.25028;
  guint8 * D.25029;
  unsigned char D.25030;
  int D.25031;
  int D.25032;
  int D.25033;
  void * D.25038;
  int D.25041;
  int D.25042;
  sizetype D.25043;
  void * D.25046;
  int D.25048;
  int D.25049;
  void * D.25050;
  long int D.25053;
  long int D.25054;
  int findex;
  int i;
  struct FrameInfo * fi;
  guint8 * frame_start;

  if (tls == 0B) goto <D.25015>; else goto <D.25016>;
  <D.25015>:
  return;
  <D.25016>:
  D.25017 = tls->unwind_state.valid;
  if (D.25017 == 0) goto <D.25018>; else goto <D.25019>;
  <D.25018>:
  return;
  <D.25019>:
  findex = 0;
  goto <D.22921>;
  <D.22920>:
  fi = &tls->frames[findex];
  D.25020 = fi->frame_start_offset;
  D.25021 = (sizetype) D.25020;
  frame_start = stack_start + D.25021;
  D.25022 = fi->bitmap;
  if (D.25022 != 0B) goto <D.25023>; else goto <D.25024>;
  <D.25023>:
  {
    guint8 * ref_bitmap;
    gboolean live;

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

      D.25025 = i * 8;
      D.25026 = (sizetype) D.25025;
      ptr = frame_start + D.25026;
      D.25027 = i / 8;
      D.25028 = (sizetype) D.25027;
      D.25029 = ref_bitmap + D.25028;
      D.25030 = *D.25029;
      D.25031 = (int) D.25030;
      D.25032 = i % 8;
      D.25033 = 1 << D.25032;
      live = D.25031 & D.25033;
      if (live != 0) goto <D.25034>; else goto <D.25035>;
      <D.25034>:
      {
        struct MonoObject * obj;

        obj = *ptr;
        if (obj != 0B) goto <D.25036>; else goto <D.25037>;
        <D.25036>:
        D.25038 = mono_gc_scan_object (obj);
        *ptr = D.25038;
        goto <D.25039>;
        <D.25037>:
        <D.25039>:
      }
      goto <D.25040>;
      <D.25035>:
      <D.25040>:
    }
    i = i + 1;
    <D.22913>:
    D.25041 = fi->nslots;
    if (D.25041 > i) goto <D.22912>; else goto <D.22914>;
    <D.22914>:
  }
  <D.25024>:
  i = 0;
  goto <D.22918>;
  <D.22917>:
  {
    struct MonoObject * * ptr;
    struct MonoObject * obj;

    D.25042 = fi->reg_locations[i];
    D.25043 = (sizetype) D.25042;
    ptr = stack_start + D.25043;
    obj = *ptr;
    if (obj != 0B) goto <D.25044>; else goto <D.25045>;
    <D.25044>:
    D.25046 = mono_gc_scan_object (obj);
    *ptr = D.25046;
    goto <D.25047>;
    <D.25045>:
    <D.25047>:
  }
  i = i + 1;
  <D.22918>:
  D.25048 = fi->nreg_locations;
  if (D.25048 > i) goto <D.22917>; else goto <D.22919>;
  <D.22919>:
  findex = findex + 1;
  <D.22921>:
  D.25049 = tls->nframes;
  if (D.25049 > findex) goto <D.22920>; else goto <D.22922>;
  <D.22922>:
  D.25050 = tls->ref_to_track;
  if (D.25050 != 0B) goto <D.25051>; else goto <D.25052>;
  <D.25051>:
  {
    mgreg_t * p;

    p = stack_start;
    goto <D.22925>;
    <D.22924>:
    D.25053 = *p;
    D.25050 = tls->ref_to_track;
    D.25054 = (long int) D.25050;
    if (D.25053 == D.25054) goto <D.25055>; else goto <D.25056>;
    <D.25055>:
    printf ("REF AT %p.\n", p);
    <D.25056>:
    p = p + 8;
    <D.22925>:
    if (p < stack_end) goto <D.22924>; else goto <D.22926>;
    <D.22926>:
  }
  <D.25052>:
}


thread_suspend_func (void * user_data, void * sigctx, struct MonoContext * ctx)
{
  long int D.25060;
  long unsigned int D.25061;
  long unsigned int D.25062;
  struct MonoThreadInfo * D.25065;
  _Bool D.25066;
  long int D.25067;
  long int D.25068;
  int D.25071;
  struct MonoThreadUnwindState * D.25072;
  struct MonoLMF * D.25074;
  struct MonoContext * D.25077;
  unsigned int mono_jit_tls_id.78;
  void * D.25083;
  struct MonoDomain * D.25084;
  void * D.25085;
  struct TlsData * tls;

  tls = user_data;
  if (tls == 0B) goto <D.25058>; else goto <D.25059>;
  <D.25058>:
  return;
  <D.25059>:
  D.25060 = tls->tid;
  D.25061 = (long unsigned int) D.25060;
  D.25062 = GetCurrentThreadId ();
  if (D.25061 != D.25062) goto <D.25063>; else goto <D.25064>;
  <D.25063>:
  {
    gboolean res;

    D.25065 = tls->info;
    D.25066 = D.25065 == 0B;
    D.25067 = (long int) D.25066;
    D.25068 = __builtin_expect (D.25067, 0);
    if (D.25068 != 0) goto <D.25069>; else goto <D.25070>;
    <D.25069>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mini-gc.c", 600, "tls->info");
    <D.25070>:
    D.25065 = tls->info;
    D.25071 = D.25065->native_handle;
    D.25060 = tls->tid;
    D.25061 = (long unsigned int) D.25060;
    D.25072 = &tls->unwind_state;
    res = mono_thread_state_init_from_handle (D.25072, D.25061, D.25071);
  }
  goto <D.25073>;
  <D.25064>:
  D.25074 = mono_get_lmf ();
  tls->unwind_state.unwind_data[1] = D.25074;
  if (sigctx != 0B) goto <D.25075>; else goto <D.25076>;
  <D.25075>:
  D.25077 = &tls->unwind_state.ctx;
  mono_arch_sigctx_to_monoctx (sigctx, D.25077);
  tls->unwind_state.valid = 1;
  goto <D.25078>;
  <D.25076>:
  if (ctx != 0B) goto <D.25079>; else goto <D.25080>;
  <D.25079>:
  D.25077 = &tls->unwind_state.ctx;
  memcpy (D.25077, ctx, 136);
  tls->unwind_state.valid = 1;
  goto <D.25081>;
  <D.25080>:
  tls->unwind_state.valid = 0;
  <D.25081>:
  <D.25078>:
  mono_jit_tls_id.78 = mono_jit_tls_id;
  D.25083 = pthread_getspecific (mono_jit_tls_id.78);
  tls->unwind_state.unwind_data[2] = D.25083;
  D.25084 = mono_domain_get ();
  tls->unwind_state.unwind_data[0] = D.25084;
  <D.25073>:
  D.25085 = tls->unwind_state.unwind_data[0];
  if (D.25085 == 0B) goto <D.25086>; else goto <D.25087>;
  <D.25086>:
  tls->unwind_state.valid = 0;
  return;
  <D.25087>:
}


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

  tls = user_data;
  monoeg_g_free (tls);
}


thread_attach_func ()
{
  long unsigned int D.25089;
  long int D.25090;
  struct MonoThreadInfo * D.25091;
  int D.25092;
  unsigned int D.25093;
  unsigned int D.25094;
  int D.25095;
  void * D.25096;
  struct TlsData * tls;

  tls = monoeg_malloc0 (4600);
  D.25089 = GetCurrentThreadId ();
  D.25090 = (long int) D.25089;
  tls->tid = D.25090;
  D.25091 = mono_thread_info_current ();
  tls->info = D.25091;
  D.25092 = stats.tlsdata_size;
  D.25093 = (unsigned int) D.25092;
  D.25094 = D.25093 + 4600;
  D.25095 = (int) D.25094;
  stats.tlsdata_size = D.25095;
  D.25096 = tls;
  return D.25096;
}


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

  env = monoeg_g_getenv ("MONO_GCMAP_DEBUG");
  if (env == 0B) goto <D.25098>; else goto <D.25099>;
  <D.25098>:
  return;
  <D.25099>:
  opts = monoeg_g_strsplit (env, ",", -1);
  ptr = opts;
  goto <D.23371>;
  <D.23370>:
  stderr.79 = stderr;
  fprintf (stderr.79, "Invalid format for the MONO_GCMAP_DEBUG env variable: \'%s\'\n", env);
  exit (1);
  ptr = ptr + 8;
  <D.23371>:
  if (ptr != 0B) goto <D.25101>; else goto <D.23372>;
  <D.25101>:
  D.25102 = *ptr;
  if (D.25102 != 0B) goto <D.23370>; else goto <D.23372>;
  <D.23372>:
  monoeg_g_strfreev (opts);
}


fprintf (struct FILE * restrict __stream, const char * restrict __fmt)
{
  int D.25104;

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


mini_gc_init_cfg (struct MonoCompile * cfg)
{
  int D.25106;

  D.25106 = mono_gc_is_moving ();
  if (D.25106 != 0) goto <D.25107>; else goto <D.25108>;
  <D.25107>:
  cfg->disable_ref_noref_stack_slot_share = 1;
  cfg->gen_write_barriers = 1;
  <D.25108>:
  mini_gc_init_gc_map (cfg);
}


mini_gc_init_gc_map (struct MonoCompile * cfg)
{
  int D.25111;
  unsigned char D.25114;
  unsigned char D.25115;
  int enable_gc_maps_for_aot.80;
  int D.25122;
  int precise_count.81;
  int precise_count.82;
  const gchar * D.25127;
  const gchar * D.25130;
  int D.25131;
  struct MonoMethod * D.25134;
  char * D.25135;
  const gchar * D.25136;
  int D.25137;
  struct MonoMemPool * D.25140;
  void * D.25141;

  if (0 != 0) goto <D.25109>; else goto <D.25110>;
  <D.25109>:
  return;
  <D.25110>:
  D.25111 = mono_gc_is_moving ();
  if (D.25111 == 0) goto <D.25112>; else goto <D.25113>;
  <D.25112>:
  return;
  <D.25113>:
  D.25114 = BIT_FIELD_REF <*cfg, 8, 5600>;
  D.25115 = D.25114 & 64;
  if (D.25115 != 0) goto <D.25116>; else goto <D.25117>;
  <D.25116>:
  enable_gc_maps_for_aot.80 = enable_gc_maps_for_aot;
  if (enable_gc_maps_for_aot.80 == 0) goto <D.25119>; else goto <D.25120>;
  <D.25119>:
  return;
  <D.25120>:
  goto <D.25121>;
  <D.25117>:
  D.25122 = mono_gc_precise_stack_mark_enabled ();
  if (D.25122 == 0) goto <D.25123>; else goto <D.25124>;
  <D.25123>:
  return;
  <D.25124>:
  <D.25121>:
  {
    static int precise_count;

    precise_count.81 = precise_count;
    precise_count.82 = precise_count.81 + 1;
    precise_count = precise_count.82;
    D.25127 = monoeg_g_getenv ("MONO_GCMAP_COUNT");
    if (D.25127 != 0B) goto <D.25128>; else goto <D.25129>;
    <D.25128>:
    D.25130 = monoeg_g_getenv ("MONO_GCMAP_COUNT");
    D.25131 = atoi (D.25130);
    precise_count.81 = precise_count;
    if (D.25131 == precise_count.81) goto <D.25132>; else goto <D.25133>;
    <D.25132>:
    D.25134 = cfg->method;
    D.25135 = mono_method_full_name (D.25134, 1);
    printf ("LAST: %s\n", D.25135);
    <D.25133>:
    D.25136 = monoeg_g_getenv ("MONO_GCMAP_COUNT");
    D.25137 = atoi (D.25136);
    precise_count.81 = precise_count;
    if (D.25137 < precise_count.81) goto <D.25138>; else goto <D.25139>;
    <D.25138>:
    return;
    <D.25139>:
    <D.25129>:
  }
  cfg->compute_gc_maps = 1;
  D.25140 = cfg->mempool;
  D.25141 = mono_mempool_alloc0 (D.25140, 96);
  cfg->gc_info = D.25141;
}


