sgen_simple_nursery_init (struct SgenMinorCollector * collector)
{
  collector->is_split = 0;
  collector->alloc_for_promotion = alloc_for_promotion;
  collector->par_alloc_for_promotion = par_alloc_for_promotion;
  collector->prepare_to_space = prepare_to_space;
  collector->clear_fragments = clear_fragments;
  collector->build_fragments_get_exclude_head = build_fragments_get_exclude_head;
  collector->build_fragments_release_exclude_head = build_fragments_release_exclude_head;
  collector->build_fragments_finish = build_fragments_finish;
  collector->init_nursery = init_nursery;
  collector->serial_ops.copy_or_mark_object = simple_nursery_serial_copy_object;
  collector->parallel_ops.copy_or_mark_object = simple_nursery_parallel_copy_object;
  collector->parallel_ops.scan_object = simple_nursery_parallel_scan_object;
  collector->parallel_ops.scan_vtype = simple_nursery_parallel_scan_vtype;
  collector->serial_ops.scan_object = simple_nursery_serial_scan_object;
  collector->serial_ops.scan_vtype = simple_nursery_serial_scan_vtype;
}


simple_nursery_serial_scan_vtype (char * start, mword desc, struct SgenGrayQueue * queue)
{
  long unsigned int D.18431;
  long unsigned int D.18432;
  long unsigned int D.18435;
  long unsigned int D.18436;
  long unsigned int D.18437;
  long unsigned int D.18438;
  long unsigned int D.18439;
  long unsigned int D.18440;
  void * D.18445;
  struct FILE * gc_debug_file.0;
  long unsigned int D.18455;
  long unsigned int D.18456;
  int D.18457;
  void * D.18462;
  long unsigned int D.18465;
  long unsigned int D.18466;
  int D.18467;
  long unsigned int D.18474;
  long unsigned int D.18477;
  int D.18478;
  int D.18479;
  unsigned int D.18482;
  unsigned int el_size.1;
  unsigned int D.18484;
  sizetype D.18485;
  void * D.18490;
  int D.18496;
  int D.18497;
  long unsigned int D.18498;
  long unsigned int D.18499;
  long unsigned int D.18500;
  long unsigned int D.18501;
  void * * D.18502;
  void * D.18507;
  sizetype D.18510;
  long unsigned int D.18514;
  void * D.18521;
  long unsigned int D.18524;
  void * D.18531;
  long unsigned int D.18534;
  unsigned int D.18535;
  unsigned int D.18536;
  struct MonoVTable * D.18539;
  struct MonoClass * D.18540;
  const char * D.18541;
  const char * D.18542;
  gsize * bitmap_data.2;
  long unsigned int D.18544;
  void * D.18551;
  int bwords.3;

  start = start + 18446744073709551600;
  D.18431 = desc & 7;
  switch (D.18431) <default: <D.18426>, case 1: <D.18352>, case 2: <D.18361>, case 3: <D.18411>, case 4: <D.18371>, case 5: <D.18404>, case 7: <D.18425>>
  <D.18352>:
  D.18432 = desc & 4294901760;
  if (D.18432 != 0) goto <D.18433>; else goto <D.18434>;
  <D.18433>:
  {
    void * * _objptr_end;
    void * * _objptr;

    _objptr = start;
    D.18435 = desc >> 16;
    D.18436 = D.18435 & 255;
    D.18437 = D.18436 * 8;
    _objptr = _objptr + D.18437;
    D.18438 = desc >> 24;
    D.18439 = D.18438 & 255;
    D.18440 = D.18439 * 8;
    _objptr_end = _objptr + D.18440;
    {
      void * __old;

      __old = *_objptr;
      if (__old != 0B) goto <D.18441>; else goto <D.18442>;
      <D.18441>:
      simple_nursery_serial_copy_object_from_obj (_objptr, queue);
      if (0 != 0) goto <D.18443>; else goto <D.18444>;
      <D.18443>:
      D.18445 = *_objptr;
      if (D.18445 != __old) goto <D.18446>; else goto <D.18447>;
      <D.18446>:
      D.18445 = *_objptr;
      gc_debug_file.0 = gc_debug_file;
      fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18445, __old);
      gc_debug_file.0 = gc_debug_file;
      fflush (gc_debug_file.0);
      <D.18447>:
      <D.18444>:
      <D.18442>:
    }
    _objptr = _objptr + 8;
    goto <D.18358>;
    <D.18357>:
    {
      void * __old;

      __old = *_objptr;
      if (__old != 0B) goto <D.18449>; else goto <D.18450>;
      <D.18449>:
      simple_nursery_serial_copy_object_from_obj (_objptr, queue);
      if (0 != 0) goto <D.18451>; else goto <D.18452>;
      <D.18451>:
      D.18445 = *_objptr;
      if (D.18445 != __old) goto <D.18453>; else goto <D.18454>;
      <D.18453>:
      D.18445 = *_objptr;
      gc_debug_file.0 = gc_debug_file;
      fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18445, __old);
      gc_debug_file.0 = gc_debug_file;
      fflush (gc_debug_file.0);
      <D.18454>:
      <D.18452>:
      <D.18450>:
    }
    _objptr = _objptr + 8;
    <D.18358>:
    if (_objptr < _objptr_end) goto <D.18357>; else goto <D.18359>;
    <D.18359>:
  }
  <D.18434>:
  goto <D.18360>;
  <D.18361>:
  {
    void * * _objptr;
    gsize _bmap;

    _objptr = start;
    _bmap = desc >> 16;
    _objptr = _objptr + 16;
    {
      int _index;

      _index = __builtin_ctzl (_bmap);
      D.18455 = (long unsigned int) _index;
      D.18456 = D.18455 * 8;
      _objptr = _objptr + D.18456;
      D.18457 = _index + 1;
      _bmap = _bmap >> D.18457;
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18458>; else goto <D.18459>;
        <D.18458>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18460>; else goto <D.18461>;
        <D.18460>:
        D.18462 = *_objptr;
        if (D.18462 != __old) goto <D.18463>; else goto <D.18464>;
        <D.18463>:
        D.18462 = *_objptr;
        gc_debug_file.0 = gc_debug_file;
        fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18462, __old);
        gc_debug_file.0 = gc_debug_file;
        fflush (gc_debug_file.0);
        <D.18464>:
        <D.18461>:
        <D.18459>:
      }
      _objptr = _objptr + 8;
    }
    goto <D.18369>;
    <D.18368>:
    {
      int _index;

      _index = __builtin_ctzl (_bmap);
      D.18465 = (long unsigned int) _index;
      D.18466 = D.18465 * 8;
      _objptr = _objptr + D.18466;
      D.18467 = _index + 1;
      _bmap = _bmap >> D.18467;
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18468>; else goto <D.18469>;
        <D.18468>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18470>; else goto <D.18471>;
        <D.18470>:
        D.18462 = *_objptr;
        if (D.18462 != __old) goto <D.18472>; else goto <D.18473>;
        <D.18472>:
        D.18462 = *_objptr;
        gc_debug_file.0 = gc_debug_file;
        fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18462, __old);
        gc_debug_file.0 = gc_debug_file;
        fflush (gc_debug_file.0);
        <D.18473>:
        <D.18471>:
        <D.18469>:
      }
      _objptr = _objptr + 8;
    }
    <D.18369>:
    if (_bmap != 0) goto <D.18368>; else goto <D.18370>;
    <D.18370>:
  }
  goto <D.18360>;
  <D.18371>:
  D.18474 = desc & 4294950912;
  if (D.18474 != 0) goto <D.18475>; else goto <D.18476>;
  <D.18475>:
  {
    int el_size;
    int etype;

    D.18477 = desc >> 3;
    D.18478 = (int) D.18477;
    el_size = D.18478 & 1023;
    D.18479 = (int) desc;
    etype = D.18479 & 49152;
    if (etype == 16384) goto <D.18480>; else goto <D.18481>;
    <D.18480>:
    {
      void * * p;
      void * * end_refs;

      p = start + 32;
      D.18482 = MEM[(struct MonoArray *)start].max_length;
      el_size.1 = (unsigned int) el_size;
      D.18484 = D.18482 * el_size.1;
      D.18485 = (sizetype) D.18484;
      end_refs = p + D.18485;
      goto <D.18378>;
      <D.18377>:
      {
        void * __old;

        __old = *p;
        if (__old != 0B) goto <D.18486>; else goto <D.18487>;
        <D.18486>:
        simple_nursery_serial_copy_object_from_obj (p, queue);
        if (0 != 0) goto <D.18488>; else goto <D.18489>;
        <D.18488>:
        D.18490 = *p;
        if (D.18490 != __old) goto <D.18491>; else goto <D.18492>;
        <D.18491>:
        D.18490 = *p;
        gc_debug_file.0 = gc_debug_file;
        fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", p, D.18490, __old);
        gc_debug_file.0 = gc_debug_file;
        fflush (gc_debug_file.0);
        <D.18492>:
        <D.18489>:
        <D.18487>:
      }
      p = p + 8;
      <D.18378>:
      if (p < end_refs) goto <D.18377>; else goto <D.18379>;
      <D.18379>:
    }
    goto <D.18493>;
    <D.18481>:
    if (etype == 32768) goto <D.18494>; else goto <D.18495>;
    <D.18494>:
    {
      int offset;
      int num_refs;
      char * e_start;
      char * e_end;

      D.18435 = desc >> 16;
      D.18496 = (int) D.18435;
      offset = D.18496 & 255;
      D.18438 = desc >> 24;
      D.18497 = (int) D.18438;
      num_refs = D.18497 & 255;
      e_start = start + 32;
      D.18482 = MEM[(struct MonoArray *)start].max_length;
      el_size.1 = (unsigned int) el_size;
      D.18484 = D.18482 * el_size.1;
      D.18485 = (sizetype) D.18484;
      e_end = e_start + D.18485;
      goto <D.18391>;
      <D.18390>:
      {
        void * * p;
        int i;

        p = e_start;
        D.18498 = (long unsigned int) offset;
        D.18499 = D.18498 * 8;
        p = p + D.18499;
        i = 0;
        goto <D.18388>;
        <D.18387>:
        {
          void * __old;

          D.18500 = (long unsigned int) i;
          D.18501 = D.18500 * 8;
          D.18502 = p + D.18501;
          __old = *D.18502;
          if (__old != 0B) goto <D.18503>; else goto <D.18504>;
          <D.18503>:
          D.18500 = (long unsigned int) i;
          D.18501 = D.18500 * 8;
          D.18502 = p + D.18501;
          simple_nursery_serial_copy_object_from_obj (D.18502, queue);
          if (0 != 0) goto <D.18505>; else goto <D.18506>;
          <D.18505>:
          D.18500 = (long unsigned int) i;
          D.18501 = D.18500 * 8;
          D.18502 = p + D.18501;
          D.18507 = *D.18502;
          if (D.18507 != __old) goto <D.18508>; else goto <D.18509>;
          <D.18508>:
          D.18500 = (long unsigned int) i;
          D.18501 = D.18500 * 8;
          D.18502 = p + D.18501;
          D.18507 = *D.18502;
          D.18500 = (long unsigned int) i;
          D.18501 = D.18500 * 8;
          D.18502 = p + D.18501;
          gc_debug_file.0 = gc_debug_file;
          fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", D.18502, D.18507, __old);
          gc_debug_file.0 = gc_debug_file;
          fflush (gc_debug_file.0);
          <D.18509>:
          <D.18506>:
          <D.18504>:
        }
        i = i + 1;
        <D.18388>:
        if (i < num_refs) goto <D.18387>; else goto <D.18389>;
        <D.18389>:
        D.18510 = (sizetype) el_size;
        e_start = e_start + D.18510;
      }
      <D.18391>:
      if (e_start < e_end) goto <D.18390>; else goto <D.18392>;
      <D.18392>:
    }
    goto <D.18511>;
    <D.18495>:
    if (etype == 49152) goto <D.18512>; else goto <D.18513>;
    <D.18512>:
    {
      char * e_start;
      char * e_end;

      e_start = start + 32;
      D.18482 = MEM[(struct MonoArray *)start].max_length;
      el_size.1 = (unsigned int) el_size;
      D.18484 = D.18482 * el_size.1;
      D.18485 = (sizetype) D.18484;
      e_end = e_start + D.18485;
      goto <D.18402>;
      <D.18401>:
      {
        void * * p;
        gsize _bmap;

        p = e_start;
        _bmap = desc >> 16;
        goto <D.18399>;
        <D.18398>:
        D.18514 = _bmap & 1;
        if (D.18514 != 0) goto <D.18515>; else goto <D.18516>;
        <D.18515>:
        {
          void * __old;

          __old = *p;
          if (__old != 0B) goto <D.18517>; else goto <D.18518>;
          <D.18517>:
          simple_nursery_serial_copy_object_from_obj (p, queue);
          if (0 != 0) goto <D.18519>; else goto <D.18520>;
          <D.18519>:
          D.18521 = *p;
          if (D.18521 != __old) goto <D.18522>; else goto <D.18523>;
          <D.18522>:
          D.18521 = *p;
          gc_debug_file.0 = gc_debug_file;
          fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", p, D.18521, __old);
          gc_debug_file.0 = gc_debug_file;
          fflush (gc_debug_file.0);
          <D.18523>:
          <D.18520>:
          <D.18518>:
        }
        <D.18516>:
        _bmap = _bmap >> 1;
        p = p + 8;
        <D.18399>:
        if (_bmap != 0) goto <D.18398>; else goto <D.18400>;
        <D.18400>:
        D.18510 = (sizetype) el_size;
        e_start = e_start + D.18510;
      }
      <D.18402>:
      if (e_start < e_end) goto <D.18401>; else goto <D.18403>;
      <D.18403>:
    }
    <D.18513>:
    <D.18511>:
    <D.18493>:
  }
  <D.18476>:
  goto <D.18360>;
  <D.18404>:
  {
    void * * _objptr;
    gsize _bmap;

    _objptr = start;
    _bmap = desc >> 3;
    _objptr = _objptr + 16;
    goto <D.18409>;
    <D.18408>:
    D.18524 = _bmap & 1;
    if (D.18524 != 0) goto <D.18525>; else goto <D.18526>;
    <D.18525>:
    {
      void * __old;

      __old = *_objptr;
      if (__old != 0B) goto <D.18527>; else goto <D.18528>;
      <D.18527>:
      simple_nursery_serial_copy_object_from_obj (_objptr, queue);
      if (0 != 0) goto <D.18529>; else goto <D.18530>;
      <D.18529>:
      D.18531 = *_objptr;
      if (D.18531 != __old) goto <D.18532>; else goto <D.18533>;
      <D.18532>:
      D.18531 = *_objptr;
      gc_debug_file.0 = gc_debug_file;
      fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18531, __old);
      gc_debug_file.0 = gc_debug_file;
      fflush (gc_debug_file.0);
      <D.18533>:
      <D.18530>:
      <D.18528>:
    }
    <D.18526>:
    _bmap = _bmap >> 1;
    _objptr = _objptr + 8;
    <D.18409>:
    if (_bmap != 0) goto <D.18408>; else goto <D.18410>;
    <D.18410>:
  }
  goto <D.18360>;
  <D.18411>:
  {
    void * * _objptr;
    gsize * bitmap_data;
    int bwords;
    void * * start_run;

    _objptr = start;
    bitmap_data = sgen_get_complex_descriptor (desc);
    D.18534 = *bitmap_data;
    D.18535 = (unsigned int) D.18534;
    D.18536 = D.18535 + 4294967295;
    bwords = (int) D.18536;
    start_run = _objptr;
    bitmap_data = bitmap_data + 8;
    if (0 != 0) goto <D.18537>; else goto <D.18538>;
    <D.18537>:
    {
      struct MonoObject * myobj;

      myobj = start;
      D.18539 = myobj->vtable;
      D.18540 = D.18539->klass;
      D.18541 = D.18540->name;
      D.18539 = myobj->vtable;
      D.18540 = D.18539->klass;
      D.18542 = D.18540->name_space;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.18542, D.18541);
    }
    <D.18538>:
    goto <D.18423>;
    <D.18422>:
    {
      gsize _bmap;

      bitmap_data.2 = bitmap_data;
      bitmap_data = bitmap_data.2 + 8;
      _bmap = *bitmap_data.2;
      _objptr = start_run;
      goto <D.18420>;
      <D.18419>:
      D.18544 = _bmap & 1;
      if (D.18544 != 0) goto <D.18545>; else goto <D.18546>;
      <D.18545>:
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18547>; else goto <D.18548>;
        <D.18547>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18549>; else goto <D.18550>;
        <D.18549>:
        D.18551 = *_objptr;
        if (D.18551 != __old) goto <D.18552>; else goto <D.18553>;
        <D.18552>:
        D.18551 = *_objptr;
        gc_debug_file.0 = gc_debug_file;
        fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18551, __old);
        gc_debug_file.0 = gc_debug_file;
        fflush (gc_debug_file.0);
        <D.18553>:
        <D.18550>:
        <D.18548>:
      }
      <D.18546>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.18420>:
      if (_bmap != 0) goto <D.18419>; else goto <D.18421>;
      <D.18421>:
      start_run = start_run + 512;
    }
    <D.18423>:
    bwords.3 = bwords;
    bwords = bwords.3 + -1;
    if (bwords.3 > 0) goto <D.18422>; else goto <D.18424>;
    <D.18424>:
  }
  goto <D.18360>;
  <D.18425>:
  goto <D.18360>;
  <D.18426>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
  <D.18360>:
}


simple_nursery_serial_copy_object_from_obj (void * * obj_slot, struct SgenGrayQueue * queue)
{
  int current_collection_generation.4;
  int D.18559;
  struct FILE * gc_debug_file.5;
  char * iftmp.6;
  long unsigned int D.18566;
  long unsigned int D.18567;
  long unsigned int D.18570;
  long unsigned int D.18578;
  _Bool D.18579;
  long int D.18580;
  long int D.18581;
  int D.18588;
  _Bool D.18591;
  long int D.18592;
  long int D.18593;
  int iftmp.7;
  int D.18599;
  int D.18601;
  _Bool D.18603;
  long int D.18604;
  long int D.18605;
  char * forwarded;
  char * obj;
  void * copy;

  obj = *obj_slot;
  if (0 != 0) goto <D.18556>; else goto <D.18557>;
  <D.18556>:
  current_collection_generation.4 = current_collection_generation;
  monoeg_g_log (0B, 4, "calling minor-serial-copy-from-obj from a %d generation collection", current_collection_generation.4);
  <D.18029>:
  goto <D.18029>;
  <D.18557>:
  D.18559 = sgen_ptr_in_nursery (obj);
  if (D.18559 == 0) goto <D.18560>; else goto <D.18561>;
  <D.18560>:
  return;
  <D.18561>:
  if (0 != 0) goto <D.18562>; else goto <D.18563>;
  <D.18562>:
  gc_debug_file.5 = gc_debug_file;
  fprintf (gc_debug_file.5, "Precise copy of %p from %p\n", obj, obj_slot);
  gc_debug_file.5 = gc_debug_file;
  fflush (gc_debug_file.5);
  <D.18563>:
  D.18566 = MEM[(mword *)obj];
  D.18567 = D.18566 & 1;
  if (D.18567 != 0) goto <D.18568>; else goto <D.18569>;
  <D.18568>:
  D.18566 = MEM[(mword *)obj];
  D.18570 = D.18566 & 18446744073709551612;
  iftmp.6 = (char *) D.18570;
  goto <D.18571>;
  <D.18569>:
  iftmp.6 = 0B;
  <D.18571>:
  forwarded = iftmp.6;
  if (forwarded != 0B) goto <D.18572>; else goto <D.18573>;
  <D.18572>:
  if (0 != 0) goto <D.18574>; else goto <D.18575>;
  <D.18574>:
  monoeg_g_log (0B, 4, "forwarded object %p has no gc descriptor", forwarded);
  <D.18030>:
  goto <D.18030>;
  <D.18575>:
  if (0 != 0) goto <D.18576>; else goto <D.18577>;
  <D.18576>:
  gc_debug_file.5 = gc_debug_file;
  fprintf (gc_debug_file.5, " (already forwarded to %p)\n", forwarded);
  gc_debug_file.5 = gc_debug_file;
  fflush (gc_debug_file.5);
  <D.18577>:
  *obj_slot = forwarded;
  return;
  <D.18573>:
  D.18566 = MEM[(mword *)obj];
  D.18578 = D.18566 & 2;
  D.18579 = D.18578 != 0;
  D.18580 = (long int) D.18579;
  D.18581 = __builtin_expect (D.18580, 0);
  if (D.18581 != 0) goto <D.18582>; else goto <D.18583>;
  <D.18582>:
  if (0 != 0) goto <D.18584>; else goto <D.18585>;
  <D.18584>:
  monoeg_g_log (0B, 4, "pinned object %p has no gc descriptor", obj);
  <D.18031>:
  goto <D.18031>;
  <D.18585>:
  if (0 != 0) goto <D.18586>; else goto <D.18587>;
  <D.18586>:
  gc_debug_file.5 = gc_debug_file;
  fprintf (gc_debug_file.5, " (pinned, no change)\n");
  gc_debug_file.5 = gc_debug_file;
  fflush (gc_debug_file.5);
  <D.18587>:
  D.18588 = sgen_ptr_in_nursery (obj_slot);
  if (D.18588 == 0) goto <D.18589>; else goto <D.18590>;
  <D.18589>:
  sgen_add_to_global_remset (obj_slot, obj);
  <D.18590>:
  return;
  <D.18583>:
  copy = copy_object_no_checks (obj, queue);
  *obj_slot = copy;
  D.18591 = obj == copy;
  D.18592 = (long int) D.18591;
  D.18593 = __builtin_expect (D.18592, 0);
  if (D.18593 != 0) goto <D.18594>; else goto <D.18595>;
  <D.18594>:
  D.18599 = sgen_ptr_in_nursery (copy);
  if (D.18599 != 0) goto <D.18600>; else goto <D.18597>;
  <D.18600>:
  D.18601 = sgen_ptr_in_nursery (obj_slot);
  if (D.18601 == 0) goto <D.18602>; else goto <D.18597>;
  <D.18602>:
  iftmp.7 = 1;
  goto <D.18598>;
  <D.18597>:
  iftmp.7 = 0;
  <D.18598>:
  D.18603 = iftmp.7 != 0;
  D.18604 = (long int) D.18603;
  D.18605 = __builtin_expect (D.18604, 0);
  if (D.18605 != 0) goto <D.18606>; else goto <D.18607>;
  <D.18606>:
  sgen_add_to_global_remset (obj_slot, copy);
  <D.18607>:
  <D.18595>:
}


copy_object_no_checks (void * obj, struct SgenGrayQueue * queue)
{
  void * D.18609;
  long unsigned int D.18610;
  unsigned int D.18611;
  unsigned int D.18612;
  long unsigned int D.18613;
  _Bool D.18614;
  long int D.18615;
  long int D.18616;
  void * D.18619;
  struct SgenGrayQueue * iftmp.8;
  long unsigned int destination.9;
  long unsigned int D.18625;
  struct MonoVTable * vt;
  gboolean has_references;
  mword objsize;
  char * destination;

  vt = MEM[(struct MonoObject *)obj].vtable;
  D.18609 = vt->gc_descr;
  D.18610 = (long unsigned int) D.18609;
  has_references = sgen_gc_descr_has_references (D.18610);
  D.18611 = sgen_par_object_get_size (vt, obj);
  D.18612 = D.18611 + 7;
  D.18613 = (long unsigned int) D.18612;
  objsize = D.18613 & 4294967288;
  destination = alloc_for_promotion (vt, obj, objsize, has_references);
  D.18614 = destination == 0B;
  D.18615 = (long int) D.18614;
  D.18616 = __builtin_expect (D.18615, 0);
  if (D.18616 != 0) goto <D.18617>; else goto <D.18618>;
  <D.18617>:
  sgen_pin_object (obj, queue);
  sgen_set_pinned_from_failed_allocation (objsize);
  D.18619 = obj;
  return D.18619;
  <D.18618>:
  if (has_references != 0) goto <D.18621>; else goto <D.18622>;
  <D.18621>:
  iftmp.8 = queue;
  goto <D.18623>;
  <D.18622>:
  iftmp.8 = 0B;
  <D.18623>:
  par_copy_object_no_checks (destination, vt, obj, objsize, iftmp.8);
  destination.9 = (long unsigned int) destination;
  D.18625 = destination.9 | 1;
  MEM[(mword *)obj] = D.18625;
  D.18619 = destination;
  return D.18619;
}


sgen_gc_descr_has_references (mword desc)
{
  long unsigned int D.18627;
  gboolean D.18630;
  long unsigned int D.18631;
  long unsigned int D.18634;

  D.18627 = desc & 4294901767;
  if (D.18627 == 1) goto <D.18628>; else goto <D.18629>;
  <D.18628>:
  D.18630 = 0;
  return D.18630;
  <D.18629>:
  D.18631 = desc & 49159;
  if (D.18631 == 4) goto <D.18632>; else goto <D.18633>;
  <D.18632>:
  D.18630 = 0;
  return D.18630;
  <D.18633>:
  D.18634 = desc & 7;
  if (D.18634 == 7) goto <D.18635>; else goto <D.18636>;
  <D.18635>:
  D.18630 = 0;
  return D.18630;
  <D.18636>:
  D.18630 = 1;
  return D.18630;
}


sgen_par_object_get_size (struct MonoVTable * vtable, struct MonoObject * o)
{
  void * D.18638;
  long unsigned int D.18639;
  guint D.18644;
  int D.18645;
  int D.18646;
  unsigned int D.18647;
  long unsigned int D.18650;
  int D.18651;
  unsigned int D.18652;
  unsigned int element_size.10;
  unsigned int D.18654;
  long unsigned int D.18655;
  long unsigned int D.18656;
  struct MonoClass * D.18659;
  unsigned char D.18660;
  long unsigned int D.18661;
  long unsigned int D.18662;
  mword descr;
  mword type;

  D.18638 = vtable->gc_descr;
  descr = (mword) D.18638;
  type = descr & 7;
  D.18639 = type + 18446744073709551615;
  if (D.18639 <= 1) goto <D.18640>; else goto <D.18641>;
  <D.18640>:
  {
    mword size;

    size = descr & 65528;
    if (size == 0) goto <D.18642>; else goto <D.18643>;
    <D.18642>:
    D.18645 = MEM[(struct MonoString *)o].length;
    D.18646 = D.18645 * 2;
    D.18647 = (unsigned int) D.18646;
    D.18644 = D.18647 + 26;
    return D.18644;
    <D.18643>:
    D.18644 = (guint) size;
    return D.18644;
  }
  <D.18641>:
  if (type == 4) goto <D.18648>; else goto <D.18649>;
  <D.18648>:
  {
    int element_size;
    struct MonoArray * array;
    size_t size;

    D.18650 = descr >> 3;
    D.18651 = (int) D.18650;
    element_size = D.18651 & 1023;
    array = o;
    D.18652 = array->max_length;
    element_size.10 = (unsigned int) element_size;
    D.18654 = D.18652 * element_size.10;
    D.18655 = (long unsigned int) D.18654;
    size = D.18655 + 32;
    D.18656 = descr & 8192;
    if (D.18656 != 0) goto <D.18657>; else goto <D.18658>;
    <D.18657>:
    size = size + 3;
    size = size & 18446744073709551612;
    D.18659 = vtable->klass;
    D.18660 = D.18659->rank;
    D.18661 = (long unsigned int) D.18660;
    D.18662 = D.18661 * 8;
    size = D.18662 + size;
    <D.18658>:
    D.18644 = (guint) size;
    return D.18644;
  }
  <D.18649>:
  D.18644 = slow_object_get_size (vtable, o);
  return D.18644;
}


slow_object_get_size (struct MonoVTable * vtable, struct MonoObject * o)
{
  struct MonoClass * D.18664;
  guint D.18667;
  int D.18668;
  int D.18669;
  unsigned int D.18670;
  unsigned char D.18671;
  int D.18674;
  unsigned int D.18675;
  unsigned int D.18676;
  unsigned int D.18677;
  long unsigned int D.18678;
  struct MonoArrayBounds * D.18679;
  _Bool D.18680;
  long int D.18681;
  long int D.18682;
  long unsigned int D.18685;
  long unsigned int D.18686;
  int D.18687;
  struct MonoClass * klass;

  klass = vtable->klass;
  D.18664 = mono_defaults.string_class;
  if (D.18664 == klass) goto <D.18665>; else goto <D.18666>;
  <D.18665>:
  D.18668 = MEM[(struct MonoString *)o].length;
  D.18669 = D.18668 * 2;
  D.18670 = (unsigned int) D.18669;
  D.18667 = D.18670 + 26;
  return D.18667;
  <D.18666>:
  D.18671 = klass->rank;
  if (D.18671 != 0) goto <D.18672>; else goto <D.18673>;
  <D.18672>:
  {
    struct MonoArray * array;
    size_t size;

    array = o;
    D.18674 = klass->sizes.element_size;
    D.18675 = (unsigned int) D.18674;
    D.18676 = array->max_length;
    D.18677 = D.18675 * D.18676;
    D.18678 = (long unsigned int) D.18677;
    size = D.18678 + 32;
    D.18679 = array->bounds;
    D.18680 = D.18679 != 0B;
    D.18681 = (long int) D.18680;
    D.18682 = __builtin_expect (D.18681, 0);
    if (D.18682 != 0) goto <D.18683>; else goto <D.18684>;
    <D.18683>:
    size = size + 3;
    size = size & 18446744073709551612;
    D.18671 = klass->rank;
    D.18685 = (long unsigned int) D.18671;
    D.18686 = D.18685 * 8;
    size = D.18686 + size;
    <D.18684>:
    D.18667 = (guint) size;
    return D.18667;
  }
  <D.18673>:
  D.18687 = klass->instance_size;
  D.18667 = (guint) D.18687;
  return D.18667;
}


par_copy_object_no_checks (char * destination, struct MonoVTable * vt, void * obj, mword objsize, struct SgenGrayQueue * queue)
{
  struct MonoClass * D.18691;
  const char * D.18692;
  const char * D.18693;
  struct MonoVTable * D.18696;
  struct MonoClass * D.18697;
  const char * D.18698;
  struct FILE * gc_debug_file.11;
  long unsigned int D.18702;
  const void * D.18703;
  mword * D.18704;
  long unsigned int D.18705;
  mword * D.18706;
  long unsigned int D.18707;
  mword * D.18708;
  long unsigned int D.18709;
  mword * D.18710;
  long unsigned int D.18711;
  mword * D.18712;
  long unsigned int D.18713;
  mword * D.18714;
  long unsigned int D.18715;
  mword * D.18716;
  long unsigned int D.18717;
  long unsigned int D.18719;
  const void * D.18720;
  void * D.18721;
  int iftmp.12;
  unsigned char D.18727;
  struct MonoArrayBounds * D.18729;
  _Bool D.18731;
  long int D.18732;
  long int D.18733;
  long int D.18736;
  long int obj.13;
  long int D.18738;
  sizetype D.18739;
  struct MonoArrayBounds * D.18740;
  long unsigned int D.18743;
  int D.18744;
  <unnamed type> mono_profiler_events.14;
  unsigned int D.18746;
  _Bool D.18747;
  long int D.18748;
  long int D.18749;
  const char * D.18756;
  int iftmp.15;
  struct GrayQueueSection * D.18761;
  int D.18763;
  _Bool D.18764;
  long int D.18765;
  long int D.18766;
  int D.18770;
  int D.18771;
  static const void * copy_labels[9] = {(const void *) &LAB_0, (const void *) &LAB_1, (const void *) &LAB_2, (const void *) &LAB_3, (const void *) &LAB_4, (const void *) &LAB_5, (const void *) &LAB_6, (const void *) &LAB_7, (const void *) &LAB_8};
  void LAB_0 = <<< error >>>;
  void LAB_1 = <<< error >>>;
  void LAB_2 = <<< error >>>;
  void LAB_3 = <<< error >>>;
  void LAB_4 = <<< error >>>;
  void LAB_5 = <<< error >>>;
  void LAB_6 = <<< error >>>;
  void LAB_7 = <<< error >>>;
  void LAB_8 = <<< error >>>;

  if (0 != 0) goto <D.18689>; else goto <D.18690>;
  <D.18689>:
  D.18691 = vt->klass;
  D.18692 = D.18691->name;
  D.18691 = vt->klass;
  D.18693 = D.18691->name_space;
  monoeg_g_log (0B, 4, "vtable %p for class %s:%s was not initialized", vt, D.18693, D.18692);
  <D.18001>:
  goto <D.18001>;
  <D.18690>:
  if (0 != 0) goto <D.18694>; else goto <D.18695>;
  <D.18694>:
  D.18696 = MEM[(struct MonoObject *)obj].vtable;
  D.18697 = D.18696->klass;
  D.18698 = D.18697->name;
  gc_debug_file.11 = gc_debug_file;
  fprintf (gc_debug_file.11, " (to %p, %s size: %lu)\n", destination, D.18698, objsize);
  gc_debug_file.11 = gc_debug_file;
  fflush (gc_debug_file.11);
  <D.18695>:
  if (objsize <= 64) goto <D.18700>; else goto <D.18701>;
  <D.18700>:
  {
    mword * dest;

    dest = destination;
    D.18702 = objsize / 8;
    D.18703 = copy_labels[D.18702];
    goto D.18703;
    LAB_8:
    D.18704 = dest + 56;
    D.18705 = MEM[(mword *)obj + 56B];
    *D.18704 = D.18705;
    LAB_7:
    D.18706 = dest + 48;
    D.18707 = MEM[(mword *)obj + 48B];
    *D.18706 = D.18707;
    LAB_6:
    D.18708 = dest + 40;
    D.18709 = MEM[(mword *)obj + 40B];
    *D.18708 = D.18709;
    LAB_5:
    D.18710 = dest + 32;
    D.18711 = MEM[(mword *)obj + 32B];
    *D.18710 = D.18711;
    LAB_4:
    D.18712 = dest + 24;
    D.18713 = MEM[(mword *)obj + 24B];
    *D.18712 = D.18713;
    LAB_3:
    D.18714 = dest + 16;
    D.18715 = MEM[(mword *)obj + 16B];
    *D.18714 = D.18715;
    LAB_2:
    D.18716 = dest + 8;
    D.18717 = MEM[(mword *)obj + 8B];
    *D.18716 = D.18717;
    LAB_1:
    LAB_0:
  }
  goto <D.18718>;
  <D.18701>:
  D.18719 = objsize + 18446744073709551608;
  D.18720 = obj + 8;
  D.18721 = destination + 8;
  mono_gc_memmove_aligned (D.18721, D.18720, D.18719);
  <D.18718>:
  if (0 != 0) goto <D.18722>; else goto <D.18723>;
  <D.18722>:
  D.18691 = vt->klass;
  D.18692 = D.18691->name;
  D.18691 = vt->klass;
  D.18693 = D.18691->name_space;
  monoeg_g_log (0B, 4, "vtable %p for class %s:%s has no gc descriptor", vt, D.18693, D.18692);
  <D.18003>:
  goto <D.18003>;
  <D.18723>:
  D.18727 = vt->rank;
  if (D.18727 != 0) goto <D.18728>; else goto <D.18725>;
  <D.18728>:
  D.18729 = MEM[(struct MonoArray *)obj].bounds;
  if (D.18729 != 0B) goto <D.18730>; else goto <D.18725>;
  <D.18730>:
  iftmp.12 = 1;
  goto <D.18726>;
  <D.18725>:
  iftmp.12 = 0;
  <D.18726>:
  D.18731 = iftmp.12 != 0;
  D.18732 = (long int) D.18731;
  D.18733 = __builtin_expect (D.18732, 0);
  if (D.18733 != 0) goto <D.18734>; else goto <D.18735>;
  <D.18734>:
  {
    struct MonoArray * array;

    array = destination;
    D.18729 = MEM[(struct MonoArray *)obj].bounds;
    D.18736 = (long int) D.18729;
    obj.13 = (long int) obj;
    D.18738 = D.18736 - obj.13;
    D.18739 = (sizetype) D.18738;
    D.18740 = destination + D.18739;
    array->bounds = D.18740;
    if (0 != 0) goto <D.18741>; else goto <D.18742>;
    <D.18741>:
    D.18743 = mono_array_length (array);
    D.18727 = vt->rank;
    D.18744 = (int) D.18727;
    gc_debug_file.11 = gc_debug_file;
    fprintf (gc_debug_file.11, "Array instance %p: size: %lu, rank: %d, length: %lu\n", array, objsize, D.18744, D.18743);
    gc_debug_file.11 = gc_debug_file;
    fflush (gc_debug_file.11);
    <D.18742>:
  }
  <D.18735>:
  mono_profiler_events.14 = mono_profiler_events;
  D.18746 = mono_profiler_events.14 & 524288;
  D.18747 = D.18746 != 0;
  D.18748 = (long int) D.18747;
  D.18749 = __builtin_expect (D.18748, 0);
  if (D.18749 != 0) goto <D.18750>; else goto <D.18751>;
  <D.18750>:
  sgen_register_moved_object (obj, destination);
  <D.18751>:
  obj = destination;
  if (queue != 0B) goto <D.18752>; else goto <D.18753>;
  <D.18752>:
  if (0 != 0) goto <D.18754>; else goto <D.18755>;
  <D.18754>:
  D.18756 = sgen_safe_name (obj);
  gc_debug_file.11 = gc_debug_file;
  fprintf (gc_debug_file.11, "Enqueuing gray object %p (%s)\n", obj, D.18756);
  gc_debug_file.11 = gc_debug_file;
  fflush (gc_debug_file.11);
  <D.18755>:
  D.18761 = queue->first;
  if (D.18761 == 0B) goto <D.18758>; else goto <D.18762>;
  <D.18762>:
  D.18761 = queue->first;
  D.18763 = D.18761->end;
  if (D.18763 == 125) goto <D.18758>; else goto <D.18759>;
  <D.18758>:
  iftmp.15 = 1;
  goto <D.18760>;
  <D.18759>:
  iftmp.15 = 0;
  <D.18760>:
  D.18764 = iftmp.15 != 0;
  D.18765 = (long int) D.18764;
  D.18766 = __builtin_expect (D.18765, 0);
  if (D.18766 != 0) goto <D.18767>; else goto <D.18768>;
  <D.18767>:
  sgen_gray_object_enqueue (queue, obj);
  goto <D.18769>;
  <D.18768>:
  D.18761 = queue->first;
  D.18761 = queue->first;
  D.18763 = D.18761->end;
  D.18770 = D.18763;
  D.18771 = D.18770 + 1;
  D.18761->end = D.18771;
  D.18761->objects[D.18770] = obj;
  <D.18769>:
  __builtin_prefetch (obj);
  <D.18753>:
}


sgen_ptr_in_nursery (void * p)
{
  gboolean D.18774;
  int sgen_nursery_bits.17;
  int D.18776;
  int D.18777;
  long unsigned int D.18778;
  long unsigned int p.18;
  long unsigned int D.18780;
  char * sgen_nursery_start.19;
  long unsigned int sgen_nursery_start.20;
  _Bool D.18783;

  sgen_nursery_bits.17 = sgen_nursery_bits;
  D.18776 = 1 << sgen_nursery_bits.17;
  D.18777 = -D.18776;
  D.18778 = (long unsigned int) D.18777;
  p.18 = (long unsigned int) p;
  D.18780 = D.18778 & p.18;
  sgen_nursery_start.19 = sgen_nursery_start;
  sgen_nursery_start.20 = (long unsigned int) sgen_nursery_start.19;
  D.18783 = D.18780 == sgen_nursery_start.20;
  D.18774 = (gboolean) D.18783;
  return D.18774;
}


simple_nursery_serial_scan_object (char * start, struct SgenGrayQueue * queue)
{
  long unsigned int D.18785;
  long unsigned int D.18786;
  long unsigned int D.18787;
  long unsigned int D.18788;
  long unsigned int D.18791;
  long unsigned int D.18792;
  long unsigned int D.18793;
  long unsigned int D.18794;
  long unsigned int D.18795;
  long unsigned int D.18796;
  void * D.18801;
  struct FILE * gc_debug_file.21;
  long unsigned int D.18811;
  long unsigned int D.18812;
  int D.18813;
  void * D.18818;
  long unsigned int D.18821;
  long unsigned int D.18822;
  int D.18823;
  long unsigned int D.18830;
  long unsigned int D.18833;
  int D.18834;
  int D.18835;
  unsigned int D.18838;
  unsigned int el_size.22;
  unsigned int D.18840;
  sizetype D.18841;
  void * D.18846;
  int D.18852;
  int D.18853;
  long unsigned int D.18854;
  long unsigned int D.18855;
  long unsigned int D.18856;
  long unsigned int D.18857;
  void * * D.18858;
  void * D.18863;
  sizetype D.18866;
  long unsigned int D.18870;
  void * D.18877;
  long unsigned int D.18880;
  void * D.18887;
  long unsigned int D.18890;
  unsigned int D.18891;
  unsigned int D.18892;
  struct MonoVTable * D.18895;
  struct MonoClass * D.18896;
  const char * D.18897;
  const char * D.18898;
  gsize * bitmap_data.23;
  long unsigned int D.18900;
  void * D.18907;
  int bwords.24;
  long unsigned int D.18911;
  gsize * mbitmap_data.25;
  long unsigned int D.18913;
  unsigned int D.18914;
  unsigned int D.18915;
  struct MonoClass * D.18916;
  unsigned int el_size.26;
  unsigned int D.18918;
  sizetype D.18919;
  const char * D.18922;
  const char * D.18923;
  gsize * bitmap_data.27;
  long unsigned int D.18925;
  void * D.18932;
  unsigned int bwords.28;
  sizetype D.18936;

  {
    struct GCVTable * vt;
    mword desc;

    D.18785 = MEM[(mword *)start];
    D.18786 = D.18785 & 18446744073709551612;
    vt = (struct GCVTable *) D.18786;
    desc = vt->desc;
    D.18787 = desc & 7;
    switch (D.18787) <default: <D.18346>, case 1: <D.18251>, case 2: <D.18260>, case 3: <D.18310>, case 4: <D.18270>, case 5: <D.18303>, case 6: <D.18324>, case 7: <D.18345>>
    <D.18251>:
    D.18788 = desc & 4294901760;
    if (D.18788 != 0) goto <D.18789>; else goto <D.18790>;
    <D.18789>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.18791 = desc >> 16;
      D.18792 = D.18791 & 255;
      D.18793 = D.18792 * 8;
      _objptr = _objptr + D.18793;
      D.18794 = desc >> 24;
      D.18795 = D.18794 & 255;
      D.18796 = D.18795 * 8;
      _objptr_end = _objptr + D.18796;
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18797>; else goto <D.18798>;
        <D.18797>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18799>; else goto <D.18800>;
        <D.18799>:
        D.18801 = *_objptr;
        if (D.18801 != __old) goto <D.18802>; else goto <D.18803>;
        <D.18802>:
        D.18801 = *_objptr;
        gc_debug_file.21 = gc_debug_file;
        fprintf (gc_debug_file.21, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18801, __old);
        gc_debug_file.21 = gc_debug_file;
        fflush (gc_debug_file.21);
        <D.18803>:
        <D.18800>:
        <D.18798>:
      }
      _objptr = _objptr + 8;
      goto <D.18257>;
      <D.18256>:
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18805>; else goto <D.18806>;
        <D.18805>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18807>; else goto <D.18808>;
        <D.18807>:
        D.18801 = *_objptr;
        if (D.18801 != __old) goto <D.18809>; else goto <D.18810>;
        <D.18809>:
        D.18801 = *_objptr;
        gc_debug_file.21 = gc_debug_file;
        fprintf (gc_debug_file.21, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18801, __old);
        gc_debug_file.21 = gc_debug_file;
        fflush (gc_debug_file.21);
        <D.18810>:
        <D.18808>:
        <D.18806>:
      }
      _objptr = _objptr + 8;
      <D.18257>:
      if (_objptr < _objptr_end) goto <D.18256>; else goto <D.18258>;
      <D.18258>:
    }
    <D.18790>:
    goto <D.18259>;
    <D.18260>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 16;
      _objptr = _objptr + 16;
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.18811 = (long unsigned int) _index;
        D.18812 = D.18811 * 8;
        _objptr = _objptr + D.18812;
        D.18813 = _index + 1;
        _bmap = _bmap >> D.18813;
        {
          void * __old;

          __old = *_objptr;
          if (__old != 0B) goto <D.18814>; else goto <D.18815>;
          <D.18814>:
          simple_nursery_serial_copy_object_from_obj (_objptr, queue);
          if (0 != 0) goto <D.18816>; else goto <D.18817>;
          <D.18816>:
          D.18818 = *_objptr;
          if (D.18818 != __old) goto <D.18819>; else goto <D.18820>;
          <D.18819>:
          D.18818 = *_objptr;
          gc_debug_file.21 = gc_debug_file;
          fprintf (gc_debug_file.21, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18818, __old);
          gc_debug_file.21 = gc_debug_file;
          fflush (gc_debug_file.21);
          <D.18820>:
          <D.18817>:
          <D.18815>:
        }
        _objptr = _objptr + 8;
      }
      goto <D.18268>;
      <D.18267>:
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.18821 = (long unsigned int) _index;
        D.18822 = D.18821 * 8;
        _objptr = _objptr + D.18822;
        D.18823 = _index + 1;
        _bmap = _bmap >> D.18823;
        {
          void * __old;

          __old = *_objptr;
          if (__old != 0B) goto <D.18824>; else goto <D.18825>;
          <D.18824>:
          simple_nursery_serial_copy_object_from_obj (_objptr, queue);
          if (0 != 0) goto <D.18826>; else goto <D.18827>;
          <D.18826>:
          D.18818 = *_objptr;
          if (D.18818 != __old) goto <D.18828>; else goto <D.18829>;
          <D.18828>:
          D.18818 = *_objptr;
          gc_debug_file.21 = gc_debug_file;
          fprintf (gc_debug_file.21, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18818, __old);
          gc_debug_file.21 = gc_debug_file;
          fflush (gc_debug_file.21);
          <D.18829>:
          <D.18827>:
          <D.18825>:
        }
        _objptr = _objptr + 8;
      }
      <D.18268>:
      if (_bmap != 0) goto <D.18267>; else goto <D.18269>;
      <D.18269>:
    }
    goto <D.18259>;
    <D.18270>:
    D.18830 = desc & 4294950912;
    if (D.18830 != 0) goto <D.18831>; else goto <D.18832>;
    <D.18831>:
    {
      int el_size;
      int etype;

      D.18833 = desc >> 3;
      D.18834 = (int) D.18833;
      el_size = D.18834 & 1023;
      D.18835 = (int) desc;
      etype = D.18835 & 49152;
      if (etype == 16384) goto <D.18836>; else goto <D.18837>;
      <D.18836>:
      {
        void * * p;
        void * * end_refs;

        p = start + 32;
        D.18838 = MEM[(struct MonoArray *)start].max_length;
        el_size.22 = (unsigned int) el_size;
        D.18840 = D.18838 * el_size.22;
        D.18841 = (sizetype) D.18840;
        end_refs = p + D.18841;
        goto <D.18277>;
        <D.18276>:
        {
          void * __old;

          __old = *p;
          if (__old != 0B) goto <D.18842>; else goto <D.18843>;
          <D.18842>:
          simple_nursery_serial_copy_object_from_obj (p, queue);
          if (0 != 0) goto <D.18844>; else goto <D.18845>;
          <D.18844>:
          D.18846 = *p;
          if (D.18846 != __old) goto <D.18847>; else goto <D.18848>;
          <D.18847>:
          D.18846 = *p;
          gc_debug_file.21 = gc_debug_file;
          fprintf (gc_debug_file.21, "Overwrote field at %p with %p (was: %p)\n", p, D.18846, __old);
          gc_debug_file.21 = gc_debug_file;
          fflush (gc_debug_file.21);
          <D.18848>:
          <D.18845>:
          <D.18843>:
        }
        p = p + 8;
        <D.18277>:
        if (p < end_refs) goto <D.18276>; else goto <D.18278>;
        <D.18278>:
      }
      goto <D.18849>;
      <D.18837>:
      if (etype == 32768) goto <D.18850>; else goto <D.18851>;
      <D.18850>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.18791 = desc >> 16;
        D.18852 = (int) D.18791;
        offset = D.18852 & 255;
        D.18794 = desc >> 24;
        D.18853 = (int) D.18794;
        num_refs = D.18853 & 255;
        e_start = start + 32;
        D.18838 = MEM[(struct MonoArray *)start].max_length;
        el_size.22 = (unsigned int) el_size;
        D.18840 = D.18838 * el_size.22;
        D.18841 = (sizetype) D.18840;
        e_end = e_start + D.18841;
        goto <D.18290>;
        <D.18289>:
        {
          void * * p;
          int i;

          p = e_start;
          D.18854 = (long unsigned int) offset;
          D.18855 = D.18854 * 8;
          p = p + D.18855;
          i = 0;
          goto <D.18287>;
          <D.18286>:
          {
            void * __old;

            D.18856 = (long unsigned int) i;
            D.18857 = D.18856 * 8;
            D.18858 = p + D.18857;
            __old = *D.18858;
            if (__old != 0B) goto <D.18859>; else goto <D.18860>;
            <D.18859>:
            D.18856 = (long unsigned int) i;
            D.18857 = D.18856 * 8;
            D.18858 = p + D.18857;
            simple_nursery_serial_copy_object_from_obj (D.18858, queue);
            if (0 != 0) goto <D.18861>; else goto <D.18862>;
            <D.18861>:
            D.18856 = (long unsigned int) i;
            D.18857 = D.18856 * 8;
            D.18858 = p + D.18857;
            D.18863 = *D.18858;
            if (D.18863 != __old) goto <D.18864>; else goto <D.18865>;
            <D.18864>:
            D.18856 = (long unsigned int) i;
            D.18857 = D.18856 * 8;
            D.18858 = p + D.18857;
            D.18863 = *D.18858;
            D.18856 = (long unsigned int) i;
            D.18857 = D.18856 * 8;
            D.18858 = p + D.18857;
            gc_debug_file.21 = gc_debug_file;
            fprintf (gc_debug_file.21, "Overwrote field at %p with %p (was: %p)\n", D.18858, D.18863, __old);
            gc_debug_file.21 = gc_debug_file;
            fflush (gc_debug_file.21);
            <D.18865>:
            <D.18862>:
            <D.18860>:
          }
          i = i + 1;
          <D.18287>:
          if (i < num_refs) goto <D.18286>; else goto <D.18288>;
          <D.18288>:
          D.18866 = (sizetype) el_size;
          e_start = e_start + D.18866;
        }
        <D.18290>:
        if (e_start < e_end) goto <D.18289>; else goto <D.18291>;
        <D.18291>:
      }
      goto <D.18867>;
      <D.18851>:
      if (etype == 49152) goto <D.18868>; else goto <D.18869>;
      <D.18868>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 32;
        D.18838 = MEM[(struct MonoArray *)start].max_length;
        el_size.22 = (unsigned int) el_size;
        D.18840 = D.18838 * el_size.22;
        D.18841 = (sizetype) D.18840;
        e_end = e_start + D.18841;
        goto <D.18301>;
        <D.18300>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.18298>;
          <D.18297>:
          D.18870 = _bmap & 1;
          if (D.18870 != 0) goto <D.18871>; else goto <D.18872>;
          <D.18871>:
          {
            void * __old;

            __old = *p;
            if (__old != 0B) goto <D.18873>; else goto <D.18874>;
            <D.18873>:
            simple_nursery_serial_copy_object_from_obj (p, queue);
            if (0 != 0) goto <D.18875>; else goto <D.18876>;
            <D.18875>:
            D.18877 = *p;
            if (D.18877 != __old) goto <D.18878>; else goto <D.18879>;
            <D.18878>:
            D.18877 = *p;
            gc_debug_file.21 = gc_debug_file;
            fprintf (gc_debug_file.21, "Overwrote field at %p with %p (was: %p)\n", p, D.18877, __old);
            gc_debug_file.21 = gc_debug_file;
            fflush (gc_debug_file.21);
            <D.18879>:
            <D.18876>:
            <D.18874>:
          }
          <D.18872>:
          _bmap = _bmap >> 1;
          p = p + 8;
          <D.18298>:
          if (_bmap != 0) goto <D.18297>; else goto <D.18299>;
          <D.18299>:
          D.18866 = (sizetype) el_size;
          e_start = e_start + D.18866;
        }
        <D.18301>:
        if (e_start < e_end) goto <D.18300>; else goto <D.18302>;
        <D.18302>:
      }
      <D.18869>:
      <D.18867>:
      <D.18849>:
    }
    <D.18832>:
    goto <D.18259>;
    <D.18303>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 16;
      goto <D.18308>;
      <D.18307>:
      D.18880 = _bmap & 1;
      if (D.18880 != 0) goto <D.18881>; else goto <D.18882>;
      <D.18881>:
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18883>; else goto <D.18884>;
        <D.18883>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18885>; else goto <D.18886>;
        <D.18885>:
        D.18887 = *_objptr;
        if (D.18887 != __old) goto <D.18888>; else goto <D.18889>;
        <D.18888>:
        D.18887 = *_objptr;
        gc_debug_file.21 = gc_debug_file;
        fprintf (gc_debug_file.21, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18887, __old);
        gc_debug_file.21 = gc_debug_file;
        fflush (gc_debug_file.21);
        <D.18889>:
        <D.18886>:
        <D.18884>:
      }
      <D.18882>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.18308>:
      if (_bmap != 0) goto <D.18307>; else goto <D.18309>;
      <D.18309>:
    }
    goto <D.18259>;
    <D.18310>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.18890 = *bitmap_data;
      D.18891 = (unsigned int) D.18890;
      D.18892 = D.18891 + 4294967295;
      bwords = (int) D.18892;
      start_run = _objptr;
      bitmap_data = bitmap_data + 8;
      if (0 != 0) goto <D.18893>; else goto <D.18894>;
      <D.18893>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.18895 = myobj->vtable;
        D.18896 = D.18895->klass;
        D.18897 = D.18896->name;
        D.18895 = myobj->vtable;
        D.18896 = D.18895->klass;
        D.18898 = D.18896->name_space;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.18898, D.18897);
      }
      <D.18894>:
      goto <D.18322>;
      <D.18321>:
      {
        gsize _bmap;

        bitmap_data.23 = bitmap_data;
        bitmap_data = bitmap_data.23 + 8;
        _bmap = *bitmap_data.23;
        _objptr = start_run;
        goto <D.18319>;
        <D.18318>:
        D.18900 = _bmap & 1;
        if (D.18900 != 0) goto <D.18901>; else goto <D.18902>;
        <D.18901>:
        {
          void * __old;

          __old = *_objptr;
          if (__old != 0B) goto <D.18903>; else goto <D.18904>;
          <D.18903>:
          simple_nursery_serial_copy_object_from_obj (_objptr, queue);
          if (0 != 0) goto <D.18905>; else goto <D.18906>;
          <D.18905>:
          D.18907 = *_objptr;
          if (D.18907 != __old) goto <D.18908>; else goto <D.18909>;
          <D.18908>:
          D.18907 = *_objptr;
          gc_debug_file.21 = gc_debug_file;
          fprintf (gc_debug_file.21, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18907, __old);
          gc_debug_file.21 = gc_debug_file;
          fflush (gc_debug_file.21);
          <D.18909>:
          <D.18906>:
          <D.18904>:
        }
        <D.18902>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 8;
        <D.18319>:
        if (_bmap != 0) goto <D.18318>; else goto <D.18320>;
        <D.18320>:
        start_run = start_run + 512;
      }
      <D.18322>:
      bwords.24 = bwords;
      bwords = bwords.24 + -1;
      if (bwords.24 > 0) goto <D.18321>; else goto <D.18323>;
      <D.18323>:
    }
    goto <D.18259>;
    <D.18324>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.18911 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.18911);
      mbitmap_data.25 = mbitmap_data;
      mbitmap_data = mbitmap_data.25 + 8;
      D.18913 = *mbitmap_data.25;
      D.18914 = (unsigned int) D.18913;
      D.18915 = D.18914 + 4294967295;
      mbwords = (int) D.18915;
      D.18916 = vt->klass;
      el_size = mono_array_element_size (D.18916);
      e_start = start + 32;
      D.18838 = MEM[(struct MonoArray *)start].max_length;
      el_size.26 = (unsigned int) el_size;
      D.18918 = D.18838 * el_size.26;
      D.18919 = (sizetype) D.18918;
      e_end = e_start + D.18919;
      if (0 != 0) goto <D.18920>; else goto <D.18921>;
      <D.18920>:
      D.18916 = vt->klass;
      D.18922 = D.18916->name;
      D.18916 = vt->klass;
      D.18923 = D.18916->name_space;
      D.18911 = vt->desc;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.18911, D.18923, D.18922);
      <D.18921>:
      goto <D.18343>;
      <D.18342>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.18340>;
        <D.18339>:
        {
          gsize _bmap;
          void * * start_run;

          bitmap_data.27 = bitmap_data;
          bitmap_data = bitmap_data.27 + 8;
          _bmap = *bitmap_data.27;
          start_run = _objptr;
          goto <D.18337>;
          <D.18336>:
          D.18925 = _bmap & 1;
          if (D.18925 != 0) goto <D.18926>; else goto <D.18927>;
          <D.18926>:
          {
            void * __old;

            __old = *_objptr;
            if (__old != 0B) goto <D.18928>; else goto <D.18929>;
            <D.18928>:
            simple_nursery_serial_copy_object_from_obj (_objptr, queue);
            if (0 != 0) goto <D.18930>; else goto <D.18931>;
            <D.18930>:
            D.18932 = *_objptr;
            if (D.18932 != __old) goto <D.18933>; else goto <D.18934>;
            <D.18933>:
            D.18932 = *_objptr;
            gc_debug_file.21 = gc_debug_file;
            fprintf (gc_debug_file.21, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18932, __old);
            gc_debug_file.21 = gc_debug_file;
            fflush (gc_debug_file.21);
            <D.18934>:
            <D.18931>:
            <D.18929>:
          }
          <D.18927>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 8;
          <D.18337>:
          if (_bmap != 0) goto <D.18336>; else goto <D.18338>;
          <D.18338>:
          _objptr = start_run + 512;
        }
        <D.18340>:
        bwords.28 = bwords;
        bwords = bwords.28 + 4294967295;
        if (bwords.28 != 0) goto <D.18339>; else goto <D.18341>;
        <D.18341>:
        D.18936 = (sizetype) el_size;
        e_start = e_start + D.18936;
      }
      <D.18343>:
      if (e_start < e_end) goto <D.18342>; else goto <D.18344>;
      <D.18344>:
    }
    goto <D.18259>;
    <D.18345>:
    goto <D.18259>;
    <D.18346>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.18259>:
  }
}


simple_nursery_parallel_scan_vtype (char * start, mword desc, struct SgenGrayQueue * queue)
{
  long unsigned int D.18938;
  long unsigned int D.18939;
  long unsigned int D.18942;
  long unsigned int D.18943;
  long unsigned int D.18944;
  long unsigned int D.18945;
  long unsigned int D.18946;
  long unsigned int D.18947;
  void * D.18954;
  struct FILE * gc_debug_file.29;
  int iftmp.30;
  int D.18959;
  int D.18961;
  _Bool D.18963;
  long int D.18964;
  long int D.18965;
  int iftmp.31;
  int D.18977;
  int D.18979;
  _Bool D.18981;
  long int D.18982;
  long int D.18983;
  long unsigned int D.18986;
  long unsigned int D.18987;
  int D.18988;
  void * D.18995;
  int iftmp.32;
  int D.18999;
  int D.19001;
  _Bool D.19003;
  long int D.19004;
  long int D.19005;
  long unsigned int D.19008;
  long unsigned int D.19009;
  int D.19010;
  int iftmp.33;
  int D.19020;
  int D.19022;
  _Bool D.19024;
  long int D.19025;
  long int D.19026;
  long unsigned int D.19029;
  long unsigned int D.19032;
  int D.19033;
  int D.19034;
  unsigned int D.19037;
  unsigned int el_size.34;
  unsigned int D.19039;
  sizetype D.19040;
  void * D.19047;
  int iftmp.35;
  int D.19051;
  int D.19053;
  _Bool D.19055;
  long int D.19056;
  long int D.19057;
  int D.19063;
  int D.19064;
  long unsigned int D.19065;
  long unsigned int D.19066;
  long unsigned int D.19067;
  long unsigned int D.19068;
  void * * D.19069;
  void * D.19076;
  int iftmp.36;
  int D.19080;
  void * D.19082;
  int D.19083;
  _Bool D.19085;
  long int D.19086;
  long int D.19087;
  void * D.19090;
  sizetype D.19091;
  long unsigned int D.19095;
  void * D.19104;
  int iftmp.37;
  int D.19108;
  int D.19110;
  _Bool D.19112;
  long int D.19113;
  long int D.19114;
  long unsigned int D.19117;
  void * D.19126;
  int iftmp.38;
  int D.19130;
  int D.19132;
  _Bool D.19134;
  long int D.19135;
  long int D.19136;
  long unsigned int D.19139;
  unsigned int D.19140;
  unsigned int D.19141;
  struct MonoVTable * D.19144;
  struct MonoClass * D.19145;
  const char * D.19146;
  const char * D.19147;
  gsize * bitmap_data.39;
  long unsigned int D.19149;
  void * D.19158;
  int iftmp.40;
  int D.19162;
  int D.19164;
  _Bool D.19166;
  long int D.19167;
  long int D.19168;
  int bwords.41;

  start = start + 18446744073709551600;
  D.18938 = desc & 7;
  switch (D.18938) <default: <D.18244>, case 1: <D.18161>, case 2: <D.18172>, case 3: <D.18228>, case 4: <D.18184>, case 5: <D.18220>, case 7: <D.18243>>
  <D.18161>:
  D.18939 = desc & 4294901760;
  if (D.18939 != 0) goto <D.18940>; else goto <D.18941>;
  <D.18940>:
  {
    void * * _objptr_end;
    void * * _objptr;

    _objptr = start;
    D.18942 = desc >> 16;
    D.18943 = D.18942 & 255;
    D.18944 = D.18943 * 8;
    _objptr = _objptr + D.18944;
    D.18945 = desc >> 24;
    D.18946 = D.18945 & 255;
    D.18947 = D.18946 * 8;
    _objptr_end = _objptr + D.18947;
    {
      void * __old;
      void * __copy;

      __old = *_objptr;
      if (__old != 0B) goto <D.18948>; else goto <D.18949>;
      <D.18948>:
      simple_nursery_parallel_copy_object (_objptr, queue);
      __copy = *_objptr;
      if (0 != 0) goto <D.18950>; else goto <D.18951>;
      <D.18950>:
      if (__old != __copy) goto <D.18952>; else goto <D.18953>;
      <D.18952>:
      D.18954 = *_objptr;
      gc_debug_file.29 = gc_debug_file;
      fprintf (gc_debug_file.29, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18954, __old);
      gc_debug_file.29 = gc_debug_file;
      fflush (gc_debug_file.29);
      <D.18953>:
      <D.18951>:
      D.18959 = sgen_ptr_in_nursery (__copy);
      if (D.18959 != 0) goto <D.18960>; else goto <D.18957>;
      <D.18960>:
      D.18961 = sgen_ptr_in_nursery (_objptr);
      if (D.18961 == 0) goto <D.18962>; else goto <D.18957>;
      <D.18962>:
      iftmp.30 = 1;
      goto <D.18958>;
      <D.18957>:
      iftmp.30 = 0;
      <D.18958>:
      D.18963 = iftmp.30 != 0;
      D.18964 = (long int) D.18963;
      D.18965 = __builtin_expect (D.18964, 0);
      if (D.18965 != 0) goto <D.18966>; else goto <D.18967>;
      <D.18966>:
      sgen_add_to_global_remset (_objptr, __copy);
      <D.18967>:
      <D.18949>:
    }
    _objptr = _objptr + 8;
    goto <D.18169>;
    <D.18168>:
    {
      void * __old;
      void * __copy;

      __old = *_objptr;
      if (__old != 0B) goto <D.18968>; else goto <D.18969>;
      <D.18968>:
      simple_nursery_parallel_copy_object (_objptr, queue);
      __copy = *_objptr;
      if (0 != 0) goto <D.18970>; else goto <D.18971>;
      <D.18970>:
      if (__old != __copy) goto <D.18972>; else goto <D.18973>;
      <D.18972>:
      D.18954 = *_objptr;
      gc_debug_file.29 = gc_debug_file;
      fprintf (gc_debug_file.29, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18954, __old);
      gc_debug_file.29 = gc_debug_file;
      fflush (gc_debug_file.29);
      <D.18973>:
      <D.18971>:
      D.18977 = sgen_ptr_in_nursery (__copy);
      if (D.18977 != 0) goto <D.18978>; else goto <D.18975>;
      <D.18978>:
      D.18979 = sgen_ptr_in_nursery (_objptr);
      if (D.18979 == 0) goto <D.18980>; else goto <D.18975>;
      <D.18980>:
      iftmp.31 = 1;
      goto <D.18976>;
      <D.18975>:
      iftmp.31 = 0;
      <D.18976>:
      D.18981 = iftmp.31 != 0;
      D.18982 = (long int) D.18981;
      D.18983 = __builtin_expect (D.18982, 0);
      if (D.18983 != 0) goto <D.18984>; else goto <D.18985>;
      <D.18984>:
      sgen_add_to_global_remset (_objptr, __copy);
      <D.18985>:
      <D.18969>:
    }
    _objptr = _objptr + 8;
    <D.18169>:
    if (_objptr < _objptr_end) goto <D.18168>; else goto <D.18170>;
    <D.18170>:
  }
  <D.18941>:
  goto <D.18171>;
  <D.18172>:
  {
    void * * _objptr;
    gsize _bmap;

    _objptr = start;
    _bmap = desc >> 16;
    _objptr = _objptr + 16;
    {
      int _index;

      _index = __builtin_ctzl (_bmap);
      D.18986 = (long unsigned int) _index;
      D.18987 = D.18986 * 8;
      _objptr = _objptr + D.18987;
      D.18988 = _index + 1;
      _bmap = _bmap >> D.18988;
      {
        void * __old;
        void * __copy;

        __old = *_objptr;
        if (__old != 0B) goto <D.18989>; else goto <D.18990>;
        <D.18989>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.18991>; else goto <D.18992>;
        <D.18991>:
        if (__old != __copy) goto <D.18993>; else goto <D.18994>;
        <D.18993>:
        D.18995 = *_objptr;
        gc_debug_file.29 = gc_debug_file;
        fprintf (gc_debug_file.29, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18995, __old);
        gc_debug_file.29 = gc_debug_file;
        fflush (gc_debug_file.29);
        <D.18994>:
        <D.18992>:
        D.18999 = sgen_ptr_in_nursery (__copy);
        if (D.18999 != 0) goto <D.19000>; else goto <D.18997>;
        <D.19000>:
        D.19001 = sgen_ptr_in_nursery (_objptr);
        if (D.19001 == 0) goto <D.19002>; else goto <D.18997>;
        <D.19002>:
        iftmp.32 = 1;
        goto <D.18998>;
        <D.18997>:
        iftmp.32 = 0;
        <D.18998>:
        D.19003 = iftmp.32 != 0;
        D.19004 = (long int) D.19003;
        D.19005 = __builtin_expect (D.19004, 0);
        if (D.19005 != 0) goto <D.19006>; else goto <D.19007>;
        <D.19006>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.19007>:
        <D.18990>:
      }
      _objptr = _objptr + 8;
    }
    goto <D.18182>;
    <D.18181>:
    {
      int _index;

      _index = __builtin_ctzl (_bmap);
      D.19008 = (long unsigned int) _index;
      D.19009 = D.19008 * 8;
      _objptr = _objptr + D.19009;
      D.19010 = _index + 1;
      _bmap = _bmap >> D.19010;
      {
        void * __old;
        void * __copy;

        __old = *_objptr;
        if (__old != 0B) goto <D.19011>; else goto <D.19012>;
        <D.19011>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.19013>; else goto <D.19014>;
        <D.19013>:
        if (__old != __copy) goto <D.19015>; else goto <D.19016>;
        <D.19015>:
        D.18995 = *_objptr;
        gc_debug_file.29 = gc_debug_file;
        fprintf (gc_debug_file.29, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18995, __old);
        gc_debug_file.29 = gc_debug_file;
        fflush (gc_debug_file.29);
        <D.19016>:
        <D.19014>:
        D.19020 = sgen_ptr_in_nursery (__copy);
        if (D.19020 != 0) goto <D.19021>; else goto <D.19018>;
        <D.19021>:
        D.19022 = sgen_ptr_in_nursery (_objptr);
        if (D.19022 == 0) goto <D.19023>; else goto <D.19018>;
        <D.19023>:
        iftmp.33 = 1;
        goto <D.19019>;
        <D.19018>:
        iftmp.33 = 0;
        <D.19019>:
        D.19024 = iftmp.33 != 0;
        D.19025 = (long int) D.19024;
        D.19026 = __builtin_expect (D.19025, 0);
        if (D.19026 != 0) goto <D.19027>; else goto <D.19028>;
        <D.19027>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.19028>:
        <D.19012>:
      }
      _objptr = _objptr + 8;
    }
    <D.18182>:
    if (_bmap != 0) goto <D.18181>; else goto <D.18183>;
    <D.18183>:
  }
  goto <D.18171>;
  <D.18184>:
  D.19029 = desc & 4294950912;
  if (D.19029 != 0) goto <D.19030>; else goto <D.19031>;
  <D.19030>:
  {
    int el_size;
    int etype;

    D.19032 = desc >> 3;
    D.19033 = (int) D.19032;
    el_size = D.19033 & 1023;
    D.19034 = (int) desc;
    etype = D.19034 & 49152;
    if (etype == 16384) goto <D.19035>; else goto <D.19036>;
    <D.19035>:
    {
      void * * p;
      void * * end_refs;

      p = start + 32;
      D.19037 = MEM[(struct MonoArray *)start].max_length;
      el_size.34 = (unsigned int) el_size;
      D.19039 = D.19037 * el_size.34;
      D.19040 = (sizetype) D.19039;
      end_refs = p + D.19040;
      goto <D.18192>;
      <D.18191>:
      {
        void * __old;
        void * __copy;

        __old = *p;
        if (__old != 0B) goto <D.19041>; else goto <D.19042>;
        <D.19041>:
        simple_nursery_parallel_copy_object (p, queue);
        __copy = *p;
        if (0 != 0) goto <D.19043>; else goto <D.19044>;
        <D.19043>:
        if (__old != __copy) goto <D.19045>; else goto <D.19046>;
        <D.19045>:
        D.19047 = *p;
        gc_debug_file.29 = gc_debug_file;
        fprintf (gc_debug_file.29, "Overwrote field at %p with %p (was: %p)\n", p, D.19047, __old);
        gc_debug_file.29 = gc_debug_file;
        fflush (gc_debug_file.29);
        <D.19046>:
        <D.19044>:
        D.19051 = sgen_ptr_in_nursery (__copy);
        if (D.19051 != 0) goto <D.19052>; else goto <D.19049>;
        <D.19052>:
        D.19053 = sgen_ptr_in_nursery (p);
        if (D.19053 == 0) goto <D.19054>; else goto <D.19049>;
        <D.19054>:
        iftmp.35 = 1;
        goto <D.19050>;
        <D.19049>:
        iftmp.35 = 0;
        <D.19050>:
        D.19055 = iftmp.35 != 0;
        D.19056 = (long int) D.19055;
        D.19057 = __builtin_expect (D.19056, 0);
        if (D.19057 != 0) goto <D.19058>; else goto <D.19059>;
        <D.19058>:
        sgen_add_to_global_remset (p, __copy);
        <D.19059>:
        <D.19042>:
      }
      p = p + 8;
      <D.18192>:
      if (p < end_refs) goto <D.18191>; else goto <D.18193>;
      <D.18193>:
    }
    goto <D.19060>;
    <D.19036>:
    if (etype == 32768) goto <D.19061>; else goto <D.19062>;
    <D.19061>:
    {
      int offset;
      int num_refs;
      char * e_start;
      char * e_end;

      D.18942 = desc >> 16;
      D.19063 = (int) D.18942;
      offset = D.19063 & 255;
      D.18945 = desc >> 24;
      D.19064 = (int) D.18945;
      num_refs = D.19064 & 255;
      e_start = start + 32;
      D.19037 = MEM[(struct MonoArray *)start].max_length;
      el_size.34 = (unsigned int) el_size;
      D.19039 = D.19037 * el_size.34;
      D.19040 = (sizetype) D.19039;
      e_end = e_start + D.19040;
      goto <D.18206>;
      <D.18205>:
      {
        void * * p;
        int i;

        p = e_start;
        D.19065 = (long unsigned int) offset;
        D.19066 = D.19065 * 8;
        p = p + D.19066;
        i = 0;
        goto <D.18203>;
        <D.18202>:
        {
          void * __old;
          void * __copy;

          D.19067 = (long unsigned int) i;
          D.19068 = D.19067 * 8;
          D.19069 = p + D.19068;
          __old = *D.19069;
          if (__old != 0B) goto <D.19070>; else goto <D.19071>;
          <D.19070>:
          D.19067 = (long unsigned int) i;
          D.19068 = D.19067 * 8;
          D.19069 = p + D.19068;
          simple_nursery_parallel_copy_object (D.19069, queue);
          D.19067 = (long unsigned int) i;
          D.19068 = D.19067 * 8;
          D.19069 = p + D.19068;
          __copy = *D.19069;
          if (0 != 0) goto <D.19072>; else goto <D.19073>;
          <D.19072>:
          if (__old != __copy) goto <D.19074>; else goto <D.19075>;
          <D.19074>:
          D.19067 = (long unsigned int) i;
          D.19068 = D.19067 * 8;
          D.19069 = p + D.19068;
          D.19076 = *D.19069;
          D.19067 = (long unsigned int) i;
          D.19068 = D.19067 * 8;
          D.19069 = p + D.19068;
          gc_debug_file.29 = gc_debug_file;
          fprintf (gc_debug_file.29, "Overwrote field at %p with %p (was: %p)\n", D.19069, D.19076, __old);
          gc_debug_file.29 = gc_debug_file;
          fflush (gc_debug_file.29);
          <D.19075>:
          <D.19073>:
          D.19080 = sgen_ptr_in_nursery (__copy);
          if (D.19080 != 0) goto <D.19081>; else goto <D.19078>;
          <D.19081>:
          D.19067 = (long unsigned int) i;
          D.19068 = D.19067 * 8;
          D.19082 = p + D.19068;
          D.19083 = sgen_ptr_in_nursery (D.19082);
          if (D.19083 == 0) goto <D.19084>; else goto <D.19078>;
          <D.19084>:
          iftmp.36 = 1;
          goto <D.19079>;
          <D.19078>:
          iftmp.36 = 0;
          <D.19079>:
          D.19085 = iftmp.36 != 0;
          D.19086 = (long int) D.19085;
          D.19087 = __builtin_expect (D.19086, 0);
          if (D.19087 != 0) goto <D.19088>; else goto <D.19089>;
          <D.19088>:
          D.19067 = (long unsigned int) i;
          D.19068 = D.19067 * 8;
          D.19090 = p + D.19068;
          sgen_add_to_global_remset (D.19090, __copy);
          <D.19089>:
          <D.19071>:
        }
        i = i + 1;
        <D.18203>:
        if (i < num_refs) goto <D.18202>; else goto <D.18204>;
        <D.18204>:
        D.19091 = (sizetype) el_size;
        e_start = e_start + D.19091;
      }
      <D.18206>:
      if (e_start < e_end) goto <D.18205>; else goto <D.18207>;
      <D.18207>:
    }
    goto <D.19092>;
    <D.19062>:
    if (etype == 49152) goto <D.19093>; else goto <D.19094>;
    <D.19093>:
    {
      char * e_start;
      char * e_end;

      e_start = start + 32;
      D.19037 = MEM[(struct MonoArray *)start].max_length;
      el_size.34 = (unsigned int) el_size;
      D.19039 = D.19037 * el_size.34;
      D.19040 = (sizetype) D.19039;
      e_end = e_start + D.19040;
      goto <D.18218>;
      <D.18217>:
      {
        void * * p;
        gsize _bmap;

        p = e_start;
        _bmap = desc >> 16;
        goto <D.18215>;
        <D.18214>:
        D.19095 = _bmap & 1;
        if (D.19095 != 0) goto <D.19096>; else goto <D.19097>;
        <D.19096>:
        {
          void * __old;
          void * __copy;

          __old = *p;
          if (__old != 0B) goto <D.19098>; else goto <D.19099>;
          <D.19098>:
          simple_nursery_parallel_copy_object (p, queue);
          __copy = *p;
          if (0 != 0) goto <D.19100>; else goto <D.19101>;
          <D.19100>:
          if (__old != __copy) goto <D.19102>; else goto <D.19103>;
          <D.19102>:
          D.19104 = *p;
          gc_debug_file.29 = gc_debug_file;
          fprintf (gc_debug_file.29, "Overwrote field at %p with %p (was: %p)\n", p, D.19104, __old);
          gc_debug_file.29 = gc_debug_file;
          fflush (gc_debug_file.29);
          <D.19103>:
          <D.19101>:
          D.19108 = sgen_ptr_in_nursery (__copy);
          if (D.19108 != 0) goto <D.19109>; else goto <D.19106>;
          <D.19109>:
          D.19110 = sgen_ptr_in_nursery (p);
          if (D.19110 == 0) goto <D.19111>; else goto <D.19106>;
          <D.19111>:
          iftmp.37 = 1;
          goto <D.19107>;
          <D.19106>:
          iftmp.37 = 0;
          <D.19107>:
          D.19112 = iftmp.37 != 0;
          D.19113 = (long int) D.19112;
          D.19114 = __builtin_expect (D.19113, 0);
          if (D.19114 != 0) goto <D.19115>; else goto <D.19116>;
          <D.19115>:
          sgen_add_to_global_remset (p, __copy);
          <D.19116>:
          <D.19099>:
        }
        <D.19097>:
        _bmap = _bmap >> 1;
        p = p + 8;
        <D.18215>:
        if (_bmap != 0) goto <D.18214>; else goto <D.18216>;
        <D.18216>:
        D.19091 = (sizetype) el_size;
        e_start = e_start + D.19091;
      }
      <D.18218>:
      if (e_start < e_end) goto <D.18217>; else goto <D.18219>;
      <D.18219>:
    }
    <D.19094>:
    <D.19092>:
    <D.19060>:
  }
  <D.19031>:
  goto <D.18171>;
  <D.18220>:
  {
    void * * _objptr;
    gsize _bmap;

    _objptr = start;
    _bmap = desc >> 3;
    _objptr = _objptr + 16;
    goto <D.18226>;
    <D.18225>:
    D.19117 = _bmap & 1;
    if (D.19117 != 0) goto <D.19118>; else goto <D.19119>;
    <D.19118>:
    {
      void * __old;
      void * __copy;

      __old = *_objptr;
      if (__old != 0B) goto <D.19120>; else goto <D.19121>;
      <D.19120>:
      simple_nursery_parallel_copy_object (_objptr, queue);
      __copy = *_objptr;
      if (0 != 0) goto <D.19122>; else goto <D.19123>;
      <D.19122>:
      if (__old != __copy) goto <D.19124>; else goto <D.19125>;
      <D.19124>:
      D.19126 = *_objptr;
      gc_debug_file.29 = gc_debug_file;
      fprintf (gc_debug_file.29, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.19126, __old);
      gc_debug_file.29 = gc_debug_file;
      fflush (gc_debug_file.29);
      <D.19125>:
      <D.19123>:
      D.19130 = sgen_ptr_in_nursery (__copy);
      if (D.19130 != 0) goto <D.19131>; else goto <D.19128>;
      <D.19131>:
      D.19132 = sgen_ptr_in_nursery (_objptr);
      if (D.19132 == 0) goto <D.19133>; else goto <D.19128>;
      <D.19133>:
      iftmp.38 = 1;
      goto <D.19129>;
      <D.19128>:
      iftmp.38 = 0;
      <D.19129>:
      D.19134 = iftmp.38 != 0;
      D.19135 = (long int) D.19134;
      D.19136 = __builtin_expect (D.19135, 0);
      if (D.19136 != 0) goto <D.19137>; else goto <D.19138>;
      <D.19137>:
      sgen_add_to_global_remset (_objptr, __copy);
      <D.19138>:
      <D.19121>:
    }
    <D.19119>:
    _bmap = _bmap >> 1;
    _objptr = _objptr + 8;
    <D.18226>:
    if (_bmap != 0) goto <D.18225>; else goto <D.18227>;
    <D.18227>:
  }
  goto <D.18171>;
  <D.18228>:
  {
    void * * _objptr;
    gsize * bitmap_data;
    int bwords;
    void * * start_run;

    _objptr = start;
    bitmap_data = sgen_get_complex_descriptor (desc);
    D.19139 = *bitmap_data;
    D.19140 = (unsigned int) D.19139;
    D.19141 = D.19140 + 4294967295;
    bwords = (int) D.19141;
    start_run = _objptr;
    bitmap_data = bitmap_data + 8;
    if (0 != 0) goto <D.19142>; else goto <D.19143>;
    <D.19142>:
    {
      struct MonoObject * myobj;

      myobj = start;
      D.19144 = myobj->vtable;
      D.19145 = D.19144->klass;
      D.19146 = D.19145->name;
      D.19144 = myobj->vtable;
      D.19145 = D.19144->klass;
      D.19147 = D.19145->name_space;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.19147, D.19146);
    }
    <D.19143>:
    goto <D.18241>;
    <D.18240>:
    {
      gsize _bmap;

      bitmap_data.39 = bitmap_data;
      bitmap_data = bitmap_data.39 + 8;
      _bmap = *bitmap_data.39;
      _objptr = start_run;
      goto <D.18238>;
      <D.18237>:
      D.19149 = _bmap & 1;
      if (D.19149 != 0) goto <D.19150>; else goto <D.19151>;
      <D.19150>:
      {
        void * __old;
        void * __copy;

        __old = *_objptr;
        if (__old != 0B) goto <D.19152>; else goto <D.19153>;
        <D.19152>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.19154>; else goto <D.19155>;
        <D.19154>:
        if (__old != __copy) goto <D.19156>; else goto <D.19157>;
        <D.19156>:
        D.19158 = *_objptr;
        gc_debug_file.29 = gc_debug_file;
        fprintf (gc_debug_file.29, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.19158, __old);
        gc_debug_file.29 = gc_debug_file;
        fflush (gc_debug_file.29);
        <D.19157>:
        <D.19155>:
        D.19162 = sgen_ptr_in_nursery (__copy);
        if (D.19162 != 0) goto <D.19163>; else goto <D.19160>;
        <D.19163>:
        D.19164 = sgen_ptr_in_nursery (_objptr);
        if (D.19164 == 0) goto <D.19165>; else goto <D.19160>;
        <D.19165>:
        iftmp.40 = 1;
        goto <D.19161>;
        <D.19160>:
        iftmp.40 = 0;
        <D.19161>:
        D.19166 = iftmp.40 != 0;
        D.19167 = (long int) D.19166;
        D.19168 = __builtin_expect (D.19167, 0);
        if (D.19168 != 0) goto <D.19169>; else goto <D.19170>;
        <D.19169>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.19170>:
        <D.19153>:
      }
      <D.19151>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.18238>:
      if (_bmap != 0) goto <D.18237>; else goto <D.18239>;
      <D.18239>:
      start_run = start_run + 512;
    }
    <D.18241>:
    bwords.41 = bwords;
    bwords = bwords.41 + -1;
    if (bwords.41 > 0) goto <D.18240>; else goto <D.18242>;
    <D.18242>:
  }
  goto <D.18171>;
  <D.18243>:
  goto <D.18171>;
  <D.18244>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
  <D.18171>:
}


simple_nursery_parallel_scan_object (char * start, struct SgenGrayQueue * queue)
{
  long unsigned int D.19173;
  long unsigned int D.19174;
  long unsigned int D.19175;
  long unsigned int D.19176;
  long unsigned int D.19179;
  long unsigned int D.19180;
  long unsigned int D.19181;
  long unsigned int D.19182;
  long unsigned int D.19183;
  long unsigned int D.19184;
  void * D.19191;
  struct FILE * gc_debug_file.42;
  int iftmp.43;
  int D.19196;
  int D.19198;
  _Bool D.19200;
  long int D.19201;
  long int D.19202;
  int iftmp.44;
  int D.19214;
  int D.19216;
  _Bool D.19218;
  long int D.19219;
  long int D.19220;
  long unsigned int D.19223;
  long unsigned int D.19224;
  int D.19225;
  void * D.19232;
  int iftmp.45;
  int D.19236;
  int D.19238;
  _Bool D.19240;
  long int D.19241;
  long int D.19242;
  long unsigned int D.19245;
  long unsigned int D.19246;
  int D.19247;
  int iftmp.46;
  int D.19257;
  int D.19259;
  _Bool D.19261;
  long int D.19262;
  long int D.19263;
  long unsigned int D.19266;
  long unsigned int D.19269;
  int D.19270;
  int D.19271;
  unsigned int D.19274;
  unsigned int el_size.47;
  unsigned int D.19276;
  sizetype D.19277;
  void * D.19284;
  int iftmp.48;
  int D.19288;
  int D.19290;
  _Bool D.19292;
  long int D.19293;
  long int D.19294;
  int D.19300;
  int D.19301;
  long unsigned int D.19302;
  long unsigned int D.19303;
  long unsigned int D.19304;
  long unsigned int D.19305;
  void * * D.19306;
  void * D.19313;
  int iftmp.49;
  int D.19317;
  void * D.19319;
  int D.19320;
  _Bool D.19322;
  long int D.19323;
  long int D.19324;
  void * D.19327;
  sizetype D.19328;
  long unsigned int D.19332;
  void * D.19341;
  int iftmp.50;
  int D.19345;
  int D.19347;
  _Bool D.19349;
  long int D.19350;
  long int D.19351;
  long unsigned int D.19354;
  void * D.19363;
  int iftmp.51;
  int D.19367;
  int D.19369;
  _Bool D.19371;
  long int D.19372;
  long int D.19373;
  long unsigned int D.19376;
  unsigned int D.19377;
  unsigned int D.19378;
  struct MonoVTable * D.19381;
  struct MonoClass * D.19382;
  const char * D.19383;
  const char * D.19384;
  gsize * bitmap_data.52;
  long unsigned int D.19386;
  void * D.19395;
  int iftmp.53;
  int D.19399;
  int D.19401;
  _Bool D.19403;
  long int D.19404;
  long int D.19405;
  int bwords.54;
  long unsigned int D.19409;
  gsize * mbitmap_data.55;
  long unsigned int D.19411;
  unsigned int D.19412;
  unsigned int D.19413;
  struct MonoClass * D.19414;
  unsigned int el_size.56;
  unsigned int D.19416;
  sizetype D.19417;
  const char * D.19420;
  const char * D.19421;
  gsize * bitmap_data.57;
  long unsigned int D.19423;
  void * D.19432;
  int iftmp.58;
  int D.19436;
  int D.19438;
  _Bool D.19440;
  long int D.19441;
  long int D.19442;
  unsigned int bwords.59;
  sizetype D.19446;

  {
    struct GCVTable * vt;
    mword desc;

    D.19173 = MEM[(mword *)start];
    D.19174 = D.19173 & 18446744073709551612;
    vt = (struct GCVTable *) D.19174;
    desc = vt->desc;
    D.19175 = desc & 7;
    switch (D.19175) <default: <D.18155>, case 1: <D.18050>, case 2: <D.18061>, case 3: <D.18117>, case 4: <D.18073>, case 5: <D.18109>, case 6: <D.18132>, case 7: <D.18154>>
    <D.18050>:
    D.19176 = desc & 4294901760;
    if (D.19176 != 0) goto <D.19177>; else goto <D.19178>;
    <D.19177>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.19179 = desc >> 16;
      D.19180 = D.19179 & 255;
      D.19181 = D.19180 * 8;
      _objptr = _objptr + D.19181;
      D.19182 = desc >> 24;
      D.19183 = D.19182 & 255;
      D.19184 = D.19183 * 8;
      _objptr_end = _objptr + D.19184;
      {
        void * __old;
        void * __copy;

        __old = *_objptr;
        if (__old != 0B) goto <D.19185>; else goto <D.19186>;
        <D.19185>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.19187>; else goto <D.19188>;
        <D.19187>:
        if (__old != __copy) goto <D.19189>; else goto <D.19190>;
        <D.19189>:
        D.19191 = *_objptr;
        gc_debug_file.42 = gc_debug_file;
        fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.19191, __old);
        gc_debug_file.42 = gc_debug_file;
        fflush (gc_debug_file.42);
        <D.19190>:
        <D.19188>:
        D.19196 = sgen_ptr_in_nursery (__copy);
        if (D.19196 != 0) goto <D.19197>; else goto <D.19194>;
        <D.19197>:
        D.19198 = sgen_ptr_in_nursery (_objptr);
        if (D.19198 == 0) goto <D.19199>; else goto <D.19194>;
        <D.19199>:
        iftmp.43 = 1;
        goto <D.19195>;
        <D.19194>:
        iftmp.43 = 0;
        <D.19195>:
        D.19200 = iftmp.43 != 0;
        D.19201 = (long int) D.19200;
        D.19202 = __builtin_expect (D.19201, 0);
        if (D.19202 != 0) goto <D.19203>; else goto <D.19204>;
        <D.19203>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.19204>:
        <D.19186>:
      }
      _objptr = _objptr + 8;
      goto <D.18058>;
      <D.18057>:
      {
        void * __old;
        void * __copy;

        __old = *_objptr;
        if (__old != 0B) goto <D.19205>; else goto <D.19206>;
        <D.19205>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.19207>; else goto <D.19208>;
        <D.19207>:
        if (__old != __copy) goto <D.19209>; else goto <D.19210>;
        <D.19209>:
        D.19191 = *_objptr;
        gc_debug_file.42 = gc_debug_file;
        fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.19191, __old);
        gc_debug_file.42 = gc_debug_file;
        fflush (gc_debug_file.42);
        <D.19210>:
        <D.19208>:
        D.19214 = sgen_ptr_in_nursery (__copy);
        if (D.19214 != 0) goto <D.19215>; else goto <D.19212>;
        <D.19215>:
        D.19216 = sgen_ptr_in_nursery (_objptr);
        if (D.19216 == 0) goto <D.19217>; else goto <D.19212>;
        <D.19217>:
        iftmp.44 = 1;
        goto <D.19213>;
        <D.19212>:
        iftmp.44 = 0;
        <D.19213>:
        D.19218 = iftmp.44 != 0;
        D.19219 = (long int) D.19218;
        D.19220 = __builtin_expect (D.19219, 0);
        if (D.19220 != 0) goto <D.19221>; else goto <D.19222>;
        <D.19221>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.19222>:
        <D.19206>:
      }
      _objptr = _objptr + 8;
      <D.18058>:
      if (_objptr < _objptr_end) goto <D.18057>; else goto <D.18059>;
      <D.18059>:
    }
    <D.19178>:
    goto <D.18060>;
    <D.18061>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 16;
      _objptr = _objptr + 16;
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.19223 = (long unsigned int) _index;
        D.19224 = D.19223 * 8;
        _objptr = _objptr + D.19224;
        D.19225 = _index + 1;
        _bmap = _bmap >> D.19225;
        {
          void * __old;
          void * __copy;

          __old = *_objptr;
          if (__old != 0B) goto <D.19226>; else goto <D.19227>;
          <D.19226>:
          simple_nursery_parallel_copy_object (_objptr, queue);
          __copy = *_objptr;
          if (0 != 0) goto <D.19228>; else goto <D.19229>;
          <D.19228>:
          if (__old != __copy) goto <D.19230>; else goto <D.19231>;
          <D.19230>:
          D.19232 = *_objptr;
          gc_debug_file.42 = gc_debug_file;
          fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.19232, __old);
          gc_debug_file.42 = gc_debug_file;
          fflush (gc_debug_file.42);
          <D.19231>:
          <D.19229>:
          D.19236 = sgen_ptr_in_nursery (__copy);
          if (D.19236 != 0) goto <D.19237>; else goto <D.19234>;
          <D.19237>:
          D.19238 = sgen_ptr_in_nursery (_objptr);
          if (D.19238 == 0) goto <D.19239>; else goto <D.19234>;
          <D.19239>:
          iftmp.45 = 1;
          goto <D.19235>;
          <D.19234>:
          iftmp.45 = 0;
          <D.19235>:
          D.19240 = iftmp.45 != 0;
          D.19241 = (long int) D.19240;
          D.19242 = __builtin_expect (D.19241, 0);
          if (D.19242 != 0) goto <D.19243>; else goto <D.19244>;
          <D.19243>:
          sgen_add_to_global_remset (_objptr, __copy);
          <D.19244>:
          <D.19227>:
        }
        _objptr = _objptr + 8;
      }
      goto <D.18071>;
      <D.18070>:
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.19245 = (long unsigned int) _index;
        D.19246 = D.19245 * 8;
        _objptr = _objptr + D.19246;
        D.19247 = _index + 1;
        _bmap = _bmap >> D.19247;
        {
          void * __old;
          void * __copy;

          __old = *_objptr;
          if (__old != 0B) goto <D.19248>; else goto <D.19249>;
          <D.19248>:
          simple_nursery_parallel_copy_object (_objptr, queue);
          __copy = *_objptr;
          if (0 != 0) goto <D.19250>; else goto <D.19251>;
          <D.19250>:
          if (__old != __copy) goto <D.19252>; else goto <D.19253>;
          <D.19252>:
          D.19232 = *_objptr;
          gc_debug_file.42 = gc_debug_file;
          fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.19232, __old);
          gc_debug_file.42 = gc_debug_file;
          fflush (gc_debug_file.42);
          <D.19253>:
          <D.19251>:
          D.19257 = sgen_ptr_in_nursery (__copy);
          if (D.19257 != 0) goto <D.19258>; else goto <D.19255>;
          <D.19258>:
          D.19259 = sgen_ptr_in_nursery (_objptr);
          if (D.19259 == 0) goto <D.19260>; else goto <D.19255>;
          <D.19260>:
          iftmp.46 = 1;
          goto <D.19256>;
          <D.19255>:
          iftmp.46 = 0;
          <D.19256>:
          D.19261 = iftmp.46 != 0;
          D.19262 = (long int) D.19261;
          D.19263 = __builtin_expect (D.19262, 0);
          if (D.19263 != 0) goto <D.19264>; else goto <D.19265>;
          <D.19264>:
          sgen_add_to_global_remset (_objptr, __copy);
          <D.19265>:
          <D.19249>:
        }
        _objptr = _objptr + 8;
      }
      <D.18071>:
      if (_bmap != 0) goto <D.18070>; else goto <D.18072>;
      <D.18072>:
    }
    goto <D.18060>;
    <D.18073>:
    D.19266 = desc & 4294950912;
    if (D.19266 != 0) goto <D.19267>; else goto <D.19268>;
    <D.19267>:
    {
      int el_size;
      int etype;

      D.19269 = desc >> 3;
      D.19270 = (int) D.19269;
      el_size = D.19270 & 1023;
      D.19271 = (int) desc;
      etype = D.19271 & 49152;
      if (etype == 16384) goto <D.19272>; else goto <D.19273>;
      <D.19272>:
      {
        void * * p;
        void * * end_refs;

        p = start + 32;
        D.19274 = MEM[(struct MonoArray *)start].max_length;
        el_size.47 = (unsigned int) el_size;
        D.19276 = D.19274 * el_size.47;
        D.19277 = (sizetype) D.19276;
        end_refs = p + D.19277;
        goto <D.18081>;
        <D.18080>:
        {
          void * __old;
          void * __copy;

          __old = *p;
          if (__old != 0B) goto <D.19278>; else goto <D.19279>;
          <D.19278>:
          simple_nursery_parallel_copy_object (p, queue);
          __copy = *p;
          if (0 != 0) goto <D.19280>; else goto <D.19281>;
          <D.19280>:
          if (__old != __copy) goto <D.19282>; else goto <D.19283>;
          <D.19282>:
          D.19284 = *p;
          gc_debug_file.42 = gc_debug_file;
          fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", p, D.19284, __old);
          gc_debug_file.42 = gc_debug_file;
          fflush (gc_debug_file.42);
          <D.19283>:
          <D.19281>:
          D.19288 = sgen_ptr_in_nursery (__copy);
          if (D.19288 != 0) goto <D.19289>; else goto <D.19286>;
          <D.19289>:
          D.19290 = sgen_ptr_in_nursery (p);
          if (D.19290 == 0) goto <D.19291>; else goto <D.19286>;
          <D.19291>:
          iftmp.48 = 1;
          goto <D.19287>;
          <D.19286>:
          iftmp.48 = 0;
          <D.19287>:
          D.19292 = iftmp.48 != 0;
          D.19293 = (long int) D.19292;
          D.19294 = __builtin_expect (D.19293, 0);
          if (D.19294 != 0) goto <D.19295>; else goto <D.19296>;
          <D.19295>:
          sgen_add_to_global_remset (p, __copy);
          <D.19296>:
          <D.19279>:
        }
        p = p + 8;
        <D.18081>:
        if (p < end_refs) goto <D.18080>; else goto <D.18082>;
        <D.18082>:
      }
      goto <D.19297>;
      <D.19273>:
      if (etype == 32768) goto <D.19298>; else goto <D.19299>;
      <D.19298>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.19179 = desc >> 16;
        D.19300 = (int) D.19179;
        offset = D.19300 & 255;
        D.19182 = desc >> 24;
        D.19301 = (int) D.19182;
        num_refs = D.19301 & 255;
        e_start = start + 32;
        D.19274 = MEM[(struct MonoArray *)start].max_length;
        el_size.47 = (unsigned int) el_size;
        D.19276 = D.19274 * el_size.47;
        D.19277 = (sizetype) D.19276;
        e_end = e_start + D.19277;
        goto <D.18095>;
        <D.18094>:
        {
          void * * p;
          int i;

          p = e_start;
          D.19302 = (long unsigned int) offset;
          D.19303 = D.19302 * 8;
          p = p + D.19303;
          i = 0;
          goto <D.18092>;
          <D.18091>:
          {
            void * __old;
            void * __copy;

            D.19304 = (long unsigned int) i;
            D.19305 = D.19304 * 8;
            D.19306 = p + D.19305;
            __old = *D.19306;
            if (__old != 0B) goto <D.19307>; else goto <D.19308>;
            <D.19307>:
            D.19304 = (long unsigned int) i;
            D.19305 = D.19304 * 8;
            D.19306 = p + D.19305;
            simple_nursery_parallel_copy_object (D.19306, queue);
            D.19304 = (long unsigned int) i;
            D.19305 = D.19304 * 8;
            D.19306 = p + D.19305;
            __copy = *D.19306;
            if (0 != 0) goto <D.19309>; else goto <D.19310>;
            <D.19309>:
            if (__old != __copy) goto <D.19311>; else goto <D.19312>;
            <D.19311>:
            D.19304 = (long unsigned int) i;
            D.19305 = D.19304 * 8;
            D.19306 = p + D.19305;
            D.19313 = *D.19306;
            D.19304 = (long unsigned int) i;
            D.19305 = D.19304 * 8;
            D.19306 = p + D.19305;
            gc_debug_file.42 = gc_debug_file;
            fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", D.19306, D.19313, __old);
            gc_debug_file.42 = gc_debug_file;
            fflush (gc_debug_file.42);
            <D.19312>:
            <D.19310>:
            D.19317 = sgen_ptr_in_nursery (__copy);
            if (D.19317 != 0) goto <D.19318>; else goto <D.19315>;
            <D.19318>:
            D.19304 = (long unsigned int) i;
            D.19305 = D.19304 * 8;
            D.19319 = p + D.19305;
            D.19320 = sgen_ptr_in_nursery (D.19319);
            if (D.19320 == 0) goto <D.19321>; else goto <D.19315>;
            <D.19321>:
            iftmp.49 = 1;
            goto <D.19316>;
            <D.19315>:
            iftmp.49 = 0;
            <D.19316>:
            D.19322 = iftmp.49 != 0;
            D.19323 = (long int) D.19322;
            D.19324 = __builtin_expect (D.19323, 0);
            if (D.19324 != 0) goto <D.19325>; else goto <D.19326>;
            <D.19325>:
            D.19304 = (long unsigned int) i;
            D.19305 = D.19304 * 8;
            D.19327 = p + D.19305;
            sgen_add_to_global_remset (D.19327, __copy);
            <D.19326>:
            <D.19308>:
          }
          i = i + 1;
          <D.18092>:
          if (i < num_refs) goto <D.18091>; else goto <D.18093>;
          <D.18093>:
          D.19328 = (sizetype) el_size;
          e_start = e_start + D.19328;
        }
        <D.18095>:
        if (e_start < e_end) goto <D.18094>; else goto <D.18096>;
        <D.18096>:
      }
      goto <D.19329>;
      <D.19299>:
      if (etype == 49152) goto <D.19330>; else goto <D.19331>;
      <D.19330>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 32;
        D.19274 = MEM[(struct MonoArray *)start].max_length;
        el_size.47 = (unsigned int) el_size;
        D.19276 = D.19274 * el_size.47;
        D.19277 = (sizetype) D.19276;
        e_end = e_start + D.19277;
        goto <D.18107>;
        <D.18106>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.18104>;
          <D.18103>:
          D.19332 = _bmap & 1;
          if (D.19332 != 0) goto <D.19333>; else goto <D.19334>;
          <D.19333>:
          {
            void * __old;
            void * __copy;

            __old = *p;
            if (__old != 0B) goto <D.19335>; else goto <D.19336>;
            <D.19335>:
            simple_nursery_parallel_copy_object (p, queue);
            __copy = *p;
            if (0 != 0) goto <D.19337>; else goto <D.19338>;
            <D.19337>:
            if (__old != __copy) goto <D.19339>; else goto <D.19340>;
            <D.19339>:
            D.19341 = *p;
            gc_debug_file.42 = gc_debug_file;
            fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", p, D.19341, __old);
            gc_debug_file.42 = gc_debug_file;
            fflush (gc_debug_file.42);
            <D.19340>:
            <D.19338>:
            D.19345 = sgen_ptr_in_nursery (__copy);
            if (D.19345 != 0) goto <D.19346>; else goto <D.19343>;
            <D.19346>:
            D.19347 = sgen_ptr_in_nursery (p);
            if (D.19347 == 0) goto <D.19348>; else goto <D.19343>;
            <D.19348>:
            iftmp.50 = 1;
            goto <D.19344>;
            <D.19343>:
            iftmp.50 = 0;
            <D.19344>:
            D.19349 = iftmp.50 != 0;
            D.19350 = (long int) D.19349;
            D.19351 = __builtin_expect (D.19350, 0);
            if (D.19351 != 0) goto <D.19352>; else goto <D.19353>;
            <D.19352>:
            sgen_add_to_global_remset (p, __copy);
            <D.19353>:
            <D.19336>:
          }
          <D.19334>:
          _bmap = _bmap >> 1;
          p = p + 8;
          <D.18104>:
          if (_bmap != 0) goto <D.18103>; else goto <D.18105>;
          <D.18105>:
          D.19328 = (sizetype) el_size;
          e_start = e_start + D.19328;
        }
        <D.18107>:
        if (e_start < e_end) goto <D.18106>; else goto <D.18108>;
        <D.18108>:
      }
      <D.19331>:
      <D.19329>:
      <D.19297>:
    }
    <D.19268>:
    goto <D.18060>;
    <D.18109>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 16;
      goto <D.18115>;
      <D.18114>:
      D.19354 = _bmap & 1;
      if (D.19354 != 0) goto <D.19355>; else goto <D.19356>;
      <D.19355>:
      {
        void * __old;
        void * __copy;

        __old = *_objptr;
        if (__old != 0B) goto <D.19357>; else goto <D.19358>;
        <D.19357>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.19359>; else goto <D.19360>;
        <D.19359>:
        if (__old != __copy) goto <D.19361>; else goto <D.19362>;
        <D.19361>:
        D.19363 = *_objptr;
        gc_debug_file.42 = gc_debug_file;
        fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.19363, __old);
        gc_debug_file.42 = gc_debug_file;
        fflush (gc_debug_file.42);
        <D.19362>:
        <D.19360>:
        D.19367 = sgen_ptr_in_nursery (__copy);
        if (D.19367 != 0) goto <D.19368>; else goto <D.19365>;
        <D.19368>:
        D.19369 = sgen_ptr_in_nursery (_objptr);
        if (D.19369 == 0) goto <D.19370>; else goto <D.19365>;
        <D.19370>:
        iftmp.51 = 1;
        goto <D.19366>;
        <D.19365>:
        iftmp.51 = 0;
        <D.19366>:
        D.19371 = iftmp.51 != 0;
        D.19372 = (long int) D.19371;
        D.19373 = __builtin_expect (D.19372, 0);
        if (D.19373 != 0) goto <D.19374>; else goto <D.19375>;
        <D.19374>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.19375>:
        <D.19358>:
      }
      <D.19356>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.18115>:
      if (_bmap != 0) goto <D.18114>; else goto <D.18116>;
      <D.18116>:
    }
    goto <D.18060>;
    <D.18117>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.19376 = *bitmap_data;
      D.19377 = (unsigned int) D.19376;
      D.19378 = D.19377 + 4294967295;
      bwords = (int) D.19378;
      start_run = _objptr;
      bitmap_data = bitmap_data + 8;
      if (0 != 0) goto <D.19379>; else goto <D.19380>;
      <D.19379>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.19381 = myobj->vtable;
        D.19382 = D.19381->klass;
        D.19383 = D.19382->name;
        D.19381 = myobj->vtable;
        D.19382 = D.19381->klass;
        D.19384 = D.19382->name_space;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.19384, D.19383);
      }
      <D.19380>:
      goto <D.18130>;
      <D.18129>:
      {
        gsize _bmap;

        bitmap_data.52 = bitmap_data;
        bitmap_data = bitmap_data.52 + 8;
        _bmap = *bitmap_data.52;
        _objptr = start_run;
        goto <D.18127>;
        <D.18126>:
        D.19386 = _bmap & 1;
        if (D.19386 != 0) goto <D.19387>; else goto <D.19388>;
        <D.19387>:
        {
          void * __old;
          void * __copy;

          __old = *_objptr;
          if (__old != 0B) goto <D.19389>; else goto <D.19390>;
          <D.19389>:
          simple_nursery_parallel_copy_object (_objptr, queue);
          __copy = *_objptr;
          if (0 != 0) goto <D.19391>; else goto <D.19392>;
          <D.19391>:
          if (__old != __copy) goto <D.19393>; else goto <D.19394>;
          <D.19393>:
          D.19395 = *_objptr;
          gc_debug_file.42 = gc_debug_file;
          fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.19395, __old);
          gc_debug_file.42 = gc_debug_file;
          fflush (gc_debug_file.42);
          <D.19394>:
          <D.19392>:
          D.19399 = sgen_ptr_in_nursery (__copy);
          if (D.19399 != 0) goto <D.19400>; else goto <D.19397>;
          <D.19400>:
          D.19401 = sgen_ptr_in_nursery (_objptr);
          if (D.19401 == 0) goto <D.19402>; else goto <D.19397>;
          <D.19402>:
          iftmp.53 = 1;
          goto <D.19398>;
          <D.19397>:
          iftmp.53 = 0;
          <D.19398>:
          D.19403 = iftmp.53 != 0;
          D.19404 = (long int) D.19403;
          D.19405 = __builtin_expect (D.19404, 0);
          if (D.19405 != 0) goto <D.19406>; else goto <D.19407>;
          <D.19406>:
          sgen_add_to_global_remset (_objptr, __copy);
          <D.19407>:
          <D.19390>:
        }
        <D.19388>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 8;
        <D.18127>:
        if (_bmap != 0) goto <D.18126>; else goto <D.18128>;
        <D.18128>:
        start_run = start_run + 512;
      }
      <D.18130>:
      bwords.54 = bwords;
      bwords = bwords.54 + -1;
      if (bwords.54 > 0) goto <D.18129>; else goto <D.18131>;
      <D.18131>:
    }
    goto <D.18060>;
    <D.18132>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.19409 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.19409);
      mbitmap_data.55 = mbitmap_data;
      mbitmap_data = mbitmap_data.55 + 8;
      D.19411 = *mbitmap_data.55;
      D.19412 = (unsigned int) D.19411;
      D.19413 = D.19412 + 4294967295;
      mbwords = (int) D.19413;
      D.19414 = vt->klass;
      el_size = mono_array_element_size (D.19414);
      e_start = start + 32;
      D.19274 = MEM[(struct MonoArray *)start].max_length;
      el_size.56 = (unsigned int) el_size;
      D.19416 = D.19274 * el_size.56;
      D.19417 = (sizetype) D.19416;
      e_end = e_start + D.19417;
      if (0 != 0) goto <D.19418>; else goto <D.19419>;
      <D.19418>:
      D.19414 = vt->klass;
      D.19420 = D.19414->name;
      D.19414 = vt->klass;
      D.19421 = D.19414->name_space;
      D.19409 = vt->desc;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.19409, D.19421, D.19420);
      <D.19419>:
      goto <D.18152>;
      <D.18151>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.18149>;
        <D.18148>:
        {
          gsize _bmap;
          void * * start_run;

          bitmap_data.57 = bitmap_data;
          bitmap_data = bitmap_data.57 + 8;
          _bmap = *bitmap_data.57;
          start_run = _objptr;
          goto <D.18146>;
          <D.18145>:
          D.19423 = _bmap & 1;
          if (D.19423 != 0) goto <D.19424>; else goto <D.19425>;
          <D.19424>:
          {
            void * __old;
            void * __copy;

            __old = *_objptr;
            if (__old != 0B) goto <D.19426>; else goto <D.19427>;
            <D.19426>:
            simple_nursery_parallel_copy_object (_objptr, queue);
            __copy = *_objptr;
            if (0 != 0) goto <D.19428>; else goto <D.19429>;
            <D.19428>:
            if (__old != __copy) goto <D.19430>; else goto <D.19431>;
            <D.19430>:
            D.19432 = *_objptr;
            gc_debug_file.42 = gc_debug_file;
            fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.19432, __old);
            gc_debug_file.42 = gc_debug_file;
            fflush (gc_debug_file.42);
            <D.19431>:
            <D.19429>:
            D.19436 = sgen_ptr_in_nursery (__copy);
            if (D.19436 != 0) goto <D.19437>; else goto <D.19434>;
            <D.19437>:
            D.19438 = sgen_ptr_in_nursery (_objptr);
            if (D.19438 == 0) goto <D.19439>; else goto <D.19434>;
            <D.19439>:
            iftmp.58 = 1;
            goto <D.19435>;
            <D.19434>:
            iftmp.58 = 0;
            <D.19435>:
            D.19440 = iftmp.58 != 0;
            D.19441 = (long int) D.19440;
            D.19442 = __builtin_expect (D.19441, 0);
            if (D.19442 != 0) goto <D.19443>; else goto <D.19444>;
            <D.19443>:
            sgen_add_to_global_remset (_objptr, __copy);
            <D.19444>:
            <D.19427>:
          }
          <D.19425>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 8;
          <D.18146>:
          if (_bmap != 0) goto <D.18145>; else goto <D.18147>;
          <D.18147>:
          _objptr = start_run + 512;
        }
        <D.18149>:
        bwords.59 = bwords;
        bwords = bwords.59 + 4294967295;
        if (bwords.59 != 0) goto <D.18148>; else goto <D.18150>;
        <D.18150>:
        D.19446 = (sizetype) el_size;
        e_start = e_start + D.19446;
      }
      <D.18152>:
      if (e_start < e_end) goto <D.18151>; else goto <D.18153>;
      <D.18153>:
    }
    goto <D.18060>;
    <D.18154>:
    goto <D.18060>;
    <D.18155>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.18060>:
  }
}


simple_nursery_parallel_copy_object (void * * obj_slot, struct SgenGrayQueue * queue)
{
  int current_collection_generation.60;
  int D.19451;
  long unsigned int D.19454;
  long unsigned int D.19455;
  long unsigned int D.19458;
  int D.19461;
  unsigned int D.19464;
  unsigned int D.19465;
  long unsigned int D.19466;
  void * D.19467;
  long unsigned int D.19468;
  _Bool D.19469;
  long int D.19470;
  long int D.19471;
  long unsigned int destination.61;
  long unsigned int D.19475;
  void * D.19476;
  void * D.19477;
  struct SgenGrayQueue * iftmp.62;
  int D.19485;
  _Bool D.19489;
  long int D.19490;
  long int D.19491;
  char * obj;
  mword vtable_word;
  mword objsize;
  struct MonoVTable * vt;
  void * destination;
  gboolean has_references;

  obj = *obj_slot;
  if (0 != 0) goto <D.19448>; else goto <D.19449>;
  <D.19448>:
  current_collection_generation.60 = current_collection_generation;
  monoeg_g_log (0B, 4, "calling minor-par-copy from a %d generation collection", current_collection_generation.60);
  <D.18042>:
  goto <D.18042>;
  <D.19449>:
  D.19451 = sgen_ptr_in_nursery (obj);
  if (D.19451 == 0) goto <D.19452>; else goto <D.19453>;
  <D.19452>:
  return;
  <D.19453>:
  vtable_word = MEM[(mword *)obj];
  D.19454 = vtable_word & 18446744073709551612;
  vt = (struct MonoVTable *) D.19454;
  D.19455 = vtable_word & 1;
  if (D.19455 != 0) goto <D.19456>; else goto <D.19457>;
  <D.19456>:
  *obj_slot = vt;
  return;
  <D.19457>:
  D.19458 = vtable_word & 2;
  if (D.19458 != 0) goto <D.19459>; else goto <D.19460>;
  <D.19459>:
  return;
  <D.19460>:
  D.19461 = sgen_nursery_is_to_space (obj);
  if (D.19461 != 0) goto <D.19462>; else goto <D.19463>;
  <D.19462>:
  return;
  <D.19463>:
  D.19464 = sgen_par_object_get_size (vt, obj);
  D.19465 = D.19464 + 7;
  D.19466 = (long unsigned int) D.19465;
  objsize = D.19466 & 4294967288;
  D.19467 = vt->gc_descr;
  D.19468 = (long unsigned int) D.19467;
  has_references = sgen_gc_descr_has_references (D.19468);
  destination = par_alloc_for_promotion (vt, obj, objsize, has_references);
  D.19469 = destination == 0B;
  D.19470 = (long int) D.19469;
  D.19471 = __builtin_expect (D.19470, 0);
  if (D.19471 != 0) goto <D.19472>; else goto <D.19473>;
  <D.19472>:
  sgen_parallel_pin_or_update (obj_slot, obj, vt, queue);
  return;
  <D.19473>:
  MEM[(struct MonoVTable * *)destination] = vt;
  destination.61 = (long unsigned int) destination;
  D.19475 = destination.61 | 1;
  D.19476 = (void *) D.19475;
  D.19477 = InterlockedCompareExchangePointer (obj, D.19476, vt);
  if (D.19477 == vt) goto <D.19478>; else goto <D.19479>;
  <D.19478>:
  if (has_references != 0) goto <D.19481>; else goto <D.19482>;
  <D.19481>:
  iftmp.62 = queue;
  goto <D.19483>;
  <D.19482>:
  iftmp.62 = 0B;
  <D.19483>:
  par_copy_object_no_checks (destination, vt, obj, objsize, iftmp.62);
  obj = destination;
  *obj_slot = obj;
  goto <D.19484>;
  <D.19479>:
  D.19485 = sgen_ptr_in_nursery (destination);
  if (D.19485 == 0) goto <D.19486>; else goto <D.19487>;
  <D.19486>:
  MEM[(void * *)destination] = 0B;
  goto <D.19488>;
  <D.19487>:
  memset (destination, 0, objsize);
  <D.19488>:
  vtable_word = MEM[(mword *)obj];
  D.19455 = vtable_word & 1;
  D.19489 = D.19455 == 0;
  D.19490 = (long int) D.19489;
  D.19491 = __builtin_expect (D.19490, 0);
  if (D.19491 != 0) goto <D.19492>; else goto <D.19493>;
  <D.19492>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-minor-copy-object.h", 291, "vtable_word & SGEN_FORWARDED_BIT");
  <D.19493>:
  D.19454 = vtable_word & 18446744073709551612;
  obj = (char *) D.19454;
  *obj_slot = obj;
  <D.19484>:
}


sgen_nursery_is_to_space (char * object)
{
  long int object.63;
  char * sgen_nursery_start.64;
  long int sgen_nursery_start.65;
  long int D.19498;
  long int D.19499;
  int D.19500;
  _Bool D.19501;
  long int D.19502;
  long int D.19503;
  char * D.19506;
  char * D.19507;
  int sgen_space_bitmap_size.66;
  _Bool D.19509;
  long int D.19510;
  long int D.19511;
  gboolean D.19514;
  char * sgen_space_bitmap.67;
  sizetype D.19516;
  char * D.19517;
  char D.19518;
  int D.19519;
  int D.19520;
  int D.19521;
  _Bool D.19522;
  int idx;
  int byte;
  int bit;

  object.63 = (long int) object;
  sgen_nursery_start.64 = sgen_nursery_start;
  sgen_nursery_start.65 = (long int) sgen_nursery_start.64;
  D.19498 = object.63 - sgen_nursery_start.65;
  D.19499 = D.19498 >> 9;
  idx = (int) D.19499;
  byte = idx / 8;
  bit = idx & 7;
  D.19500 = sgen_ptr_in_nursery (object);
  D.19501 = D.19500 == 0;
  D.19502 = (long int) D.19501;
  D.19503 = __builtin_expect (D.19502, 0);
  if (D.19503 != 0) goto <D.19504>; else goto <D.19505>;
  <D.19504>:
  D.19506 = sgen_get_nursery_end ();
  D.19507 = sgen_get_nursery_start ();
  monoeg_g_log (0B, 4, "object %p is not in nursery [%p - %p]", object, D.19507, D.19506);
  <D.17432>:
  goto <D.17432>;
  <D.19505>:
  sgen_space_bitmap_size.66 = sgen_space_bitmap_size;
  D.19509 = byte >= sgen_space_bitmap_size.66;
  D.19510 = (long int) D.19509;
  D.19511 = __builtin_expect (D.19510, 0);
  if (D.19511 != 0) goto <D.19512>; else goto <D.19513>;
  <D.19512>:
  sgen_space_bitmap_size.66 = sgen_space_bitmap_size;
  monoeg_g_log (0B, 4, "byte index %d out of range", byte, sgen_space_bitmap_size.66);
  <D.17433>:
  goto <D.17433>;
  <D.19513>:
  sgen_space_bitmap.67 = sgen_space_bitmap;
  D.19516 = (sizetype) byte;
  D.19517 = sgen_space_bitmap.67 + D.19516;
  D.19518 = *D.19517;
  D.19519 = (int) D.19518;
  D.19520 = D.19519 >> bit;
  D.19521 = D.19520 & 1;
  D.19522 = D.19521 != 0;
  D.19514 = (gboolean) D.19522;
  return D.19514;
}


sgen_get_nursery_end ()
{
  char * D.19524;

  D.19524 = sgen_nursery_end;
  return D.19524;
}


sgen_get_nursery_start ()
{
  char * D.19526;

  D.19526 = sgen_nursery_start;
  return D.19526;
}


InterlockedCompareExchangePointer (void * volatile * dest, void * exch, void * comp)
{
  void * D.19528;
  long unsigned int exch.68;
  long unsigned int comp.69;
  long unsigned int D.19531;

  exch.68 = (long unsigned int) exch;
  comp.69 = (long unsigned int) comp;
  D.19531 = __sync_val_compare_and_swap_8 (dest, comp.69, exch.68);
  D.19528 = (void *) D.19531;
  return D.19528;
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.19535;
  int D.19540;
  void * D.19542;
  long unsigned int D.19543;

  D.19535 = __builtin_constant_p (__len);
  if (D.19535 != 0) goto <D.19536>; else goto <D.19537>;
  <D.19536>:
  if (__len == 0) goto <D.19538>; else goto <D.19539>;
  <D.19538>:
  D.19540 = __builtin_constant_p (__ch);
  if (D.19540 == 0) goto <D.19533>; else goto <D.19541>;
  <D.19541>:
  if (__ch != 0) goto <D.19533>; else goto <D.19534>;
  <D.19533>:
  __warn_memset_zero_len ();
  D.19542 = __dest;
  return D.19542;
  <D.19534>:
  <D.19539>:
  <D.19537>:
  D.19543 = __builtin_object_size (__dest, 0);
  D.19542 = __builtin___memset_chk (__dest, __ch, __len, D.19543);
  return D.19542;
}


simple_nursery_serial_copy_object (void * * obj_slot, struct SgenGrayQueue * queue)
{
  int current_collection_generation.70;
  int D.19548;
  struct FILE * gc_debug_file.71;
  char * iftmp.72;
  long unsigned int D.19555;
  long unsigned int D.19556;
  long unsigned int D.19559;
  long unsigned int D.19567;
  _Bool D.19568;
  long int D.19569;
  long int D.19570;
  void * D.19577;
  char * forwarded;
  char * obj;

  obj = *obj_slot;
  if (0 != 0) goto <D.19545>; else goto <D.19546>;
  <D.19545>:
  current_collection_generation.70 = current_collection_generation;
  monoeg_g_log (0B, 4, "calling minor-serial-copy from a %d generation collection", current_collection_generation.70);
  <D.18019>:
  goto <D.18019>;
  <D.19546>:
  D.19548 = sgen_ptr_in_nursery (obj);
  if (D.19548 == 0) goto <D.19549>; else goto <D.19550>;
  <D.19549>:
  return;
  <D.19550>:
  if (0 != 0) goto <D.19551>; else goto <D.19552>;
  <D.19551>:
  gc_debug_file.71 = gc_debug_file;
  fprintf (gc_debug_file.71, "Precise copy of %p from %p\n", obj, obj_slot);
  gc_debug_file.71 = gc_debug_file;
  fflush (gc_debug_file.71);
  <D.19552>:
  D.19555 = MEM[(mword *)obj];
  D.19556 = D.19555 & 1;
  if (D.19556 != 0) goto <D.19557>; else goto <D.19558>;
  <D.19557>:
  D.19555 = MEM[(mword *)obj];
  D.19559 = D.19555 & 18446744073709551612;
  iftmp.72 = (char *) D.19559;
  goto <D.19560>;
  <D.19558>:
  iftmp.72 = 0B;
  <D.19560>:
  forwarded = iftmp.72;
  if (forwarded != 0B) goto <D.19561>; else goto <D.19562>;
  <D.19561>:
  if (0 != 0) goto <D.19563>; else goto <D.19564>;
  <D.19563>:
  monoeg_g_log (0B, 4, "forwarded object %p has no gc descriptor", forwarded);
  <D.18020>:
  goto <D.18020>;
  <D.19564>:
  if (0 != 0) goto <D.19565>; else goto <D.19566>;
  <D.19565>:
  gc_debug_file.71 = gc_debug_file;
  fprintf (gc_debug_file.71, " (already forwarded to %p)\n", forwarded);
  gc_debug_file.71 = gc_debug_file;
  fflush (gc_debug_file.71);
  <D.19566>:
  *obj_slot = forwarded;
  return;
  <D.19562>:
  D.19555 = MEM[(mword *)obj];
  D.19567 = D.19555 & 2;
  D.19568 = D.19567 != 0;
  D.19569 = (long int) D.19568;
  D.19570 = __builtin_expect (D.19569, 0);
  if (D.19570 != 0) goto <D.19571>; else goto <D.19572>;
  <D.19571>:
  if (0 != 0) goto <D.19573>; else goto <D.19574>;
  <D.19573>:
  monoeg_g_log (0B, 4, "pinned object %p has no gc descriptor", obj);
  <D.18021>:
  goto <D.18021>;
  <D.19574>:
  if (0 != 0) goto <D.19575>; else goto <D.19576>;
  <D.19575>:
  gc_debug_file.71 = gc_debug_file;
  fprintf (gc_debug_file.71, " (pinned, no change)\n");
  gc_debug_file.71 = gc_debug_file;
  fflush (gc_debug_file.71);
  <D.19576>:
  return;
  <D.19572>:
  D.19577 = copy_object_no_checks (obj, queue);
  *obj_slot = D.19577;
}


init_nursery (struct SgenFragmentAllocator * allocator, char * start, char * end)
{
  sgen_fragment_allocator_add (allocator, start, end);
}


build_fragments_finish (struct SgenFragmentAllocator * allocator)
{

}


build_fragments_release_exclude_head ()
{

}


build_fragments_get_exclude_head ()
{
  struct SgenFragment * D.19579;

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


clear_fragments ()
{

}


prepare_to_space (char * to_space_bitmap, int space_bitmap_size)
{

}


par_alloc_for_promotion (struct MonoVTable * vtable, char * obj, size_t objsize, gboolean has_references)
{
  char * D.19581;
  void * (*<T2e87>) (struct MonoVTable *, int, gboolean) D.19582;
  int D.19583;

  D.19582 = major_collector.par_alloc_object;
  D.19583 = (int) objsize;
  D.19581 = D.19582 (vtable, D.19583, has_references);
  return D.19581;
}


alloc_for_promotion (struct MonoVTable * vtable, char * obj, size_t objsize, gboolean has_references)
{
  char * D.19585;
  void * (*<T2e87>) (struct MonoVTable *, int, gboolean) D.19586;
  int D.19587;

  D.19586 = major_collector.alloc_object;
  D.19587 = (int) objsize;
  D.19585 = D.19586 (vtable, D.19587, has_references);
  return D.19585;
}


