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)
{
  unsigned int D.18048;
  unsigned int D.18049;
  unsigned int D.18052;
  unsigned int D.18053;
  unsigned int D.18054;
  unsigned int D.18055;
  unsigned int D.18056;
  void * D.18061;
  struct FILE * gc_debug_file.0;
  unsigned int _index.1;
  unsigned int D.18072;
  int D.18073;
  void * D.18078;
  unsigned int _index.2;
  unsigned int D.18082;
  int D.18083;
  unsigned int D.18090;
  unsigned int D.18093;
  int D.18094;
  int desc.3;
  unsigned int D.18098;
  unsigned int el_size.4;
  unsigned int D.18100;
  void * D.18105;
  int D.18111;
  unsigned int offset.5;
  unsigned int D.18113;
  unsigned int i.6;
  unsigned int D.18115;
  void * * D.18116;
  void * D.18121;
  sizetype el_size.7;
  unsigned int D.18128;
  void * D.18135;
  unsigned int D.18138;
  void * D.18145;
  unsigned int D.18148;
  unsigned int D.18149;
  struct MonoVTable * D.18152;
  struct MonoClass * D.18153;
  const char * D.18154;
  const char * D.18155;
  gsize * bitmap_data.8;
  unsigned int D.18157;
  void * D.18164;
  int bwords.9;

  start = start + 4294967288;
  D.18048 = desc & 7;
  switch (D.18048) <default: <D.18043>, case 1: <D.17969>, case 2: <D.17978>, case 3: <D.18028>, case 4: <D.17988>, case 5: <D.18021>, case 7: <D.18042>>
  <D.17969>:
  D.18049 = desc & 4294901760;
  if (D.18049 != 0) goto <D.18050>; else goto <D.18051>;
  <D.18050>:
  {
    void * * _objptr_end;
    void * * _objptr;

    _objptr = start;
    D.18052 = desc >> 16;
    D.18053 = D.18052 & 255;
    D.18054 = D.18053 * 4;
    _objptr = _objptr + D.18054;
    D.18055 = desc >> 24;
    D.18056 = D.18055 * 4;
    _objptr_end = _objptr + D.18056;
    {
      void * __old;

      __old = *_objptr;
      if (__old != 0B) goto <D.18057>; else goto <D.18058>;
      <D.18057>:
      simple_nursery_serial_copy_object_from_obj (_objptr, queue);
      if (0 != 0) goto <D.18059>; else goto <D.18060>;
      <D.18059>:
      D.18061 = *_objptr;
      if (D.18061 != __old) goto <D.18062>; else goto <D.18063>;
      <D.18062>:
      gc_debug_file.0 = gc_debug_file;
      D.18061 = *_objptr;
      fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18061, __old);
      gc_debug_file.0 = gc_debug_file;
      fflush (gc_debug_file.0);
      <D.18063>:
      <D.18060>:
      <D.18058>:
    }
    _objptr = _objptr + 4;
    goto <D.17975>;
    <D.17974>:
    {
      void * __old;

      __old = *_objptr;
      if (__old != 0B) goto <D.18065>; else goto <D.18066>;
      <D.18065>:
      simple_nursery_serial_copy_object_from_obj (_objptr, queue);
      if (0 != 0) goto <D.18067>; else goto <D.18068>;
      <D.18067>:
      D.18061 = *_objptr;
      if (D.18061 != __old) goto <D.18069>; else goto <D.18070>;
      <D.18069>:
      gc_debug_file.0 = gc_debug_file;
      D.18061 = *_objptr;
      fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18061, __old);
      gc_debug_file.0 = gc_debug_file;
      fflush (gc_debug_file.0);
      <D.18070>:
      <D.18068>:
      <D.18066>:
    }
    _objptr = _objptr + 4;
    <D.17975>:
    if (_objptr < _objptr_end) goto <D.17974>; else goto <D.17976>;
    <D.17976>:
  }
  <D.18051>:
  goto <D.17977>;
  <D.17978>:
  {
    void * * _objptr;
    gsize _bmap;

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

      _index = __builtin_ctz (_bmap);
      _index.1 = (unsigned int) _index;
      D.18072 = _index.1 * 4;
      _objptr = _objptr + D.18072;
      D.18073 = _index + 1;
      _bmap = _bmap >> D.18073;
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18074>; else goto <D.18075>;
        <D.18074>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18076>; else goto <D.18077>;
        <D.18076>:
        D.18078 = *_objptr;
        if (D.18078 != __old) goto <D.18079>; else goto <D.18080>;
        <D.18079>:
        gc_debug_file.0 = gc_debug_file;
        D.18078 = *_objptr;
        fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18078, __old);
        gc_debug_file.0 = gc_debug_file;
        fflush (gc_debug_file.0);
        <D.18080>:
        <D.18077>:
        <D.18075>:
      }
      _objptr = _objptr + 4;
    }
    goto <D.17986>;
    <D.17985>:
    {
      int _index;

      _index = __builtin_ctz (_bmap);
      _index.2 = (unsigned int) _index;
      D.18082 = _index.2 * 4;
      _objptr = _objptr + D.18082;
      D.18083 = _index + 1;
      _bmap = _bmap >> D.18083;
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18084>; else goto <D.18085>;
        <D.18084>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18086>; else goto <D.18087>;
        <D.18086>:
        D.18078 = *_objptr;
        if (D.18078 != __old) goto <D.18088>; else goto <D.18089>;
        <D.18088>:
        gc_debug_file.0 = gc_debug_file;
        D.18078 = *_objptr;
        fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18078, __old);
        gc_debug_file.0 = gc_debug_file;
        fflush (gc_debug_file.0);
        <D.18089>:
        <D.18087>:
        <D.18085>:
      }
      _objptr = _objptr + 4;
    }
    <D.17986>:
    if (_bmap != 0) goto <D.17985>; else goto <D.17987>;
    <D.17987>:
  }
  goto <D.17977>;
  <D.17988>:
  D.18090 = desc & 4294950912;
  if (D.18090 != 0) goto <D.18091>; else goto <D.18092>;
  <D.18091>:
  {
    int el_size;
    int etype;

    D.18093 = desc >> 3;
    D.18094 = (int) D.18093;
    el_size = D.18094 & 1023;
    desc.3 = (int) desc;
    etype = desc.3 & 49152;
    if (etype == 16384) goto <D.18096>; else goto <D.18097>;
    <D.18096>:
    {
      void * * p;
      void * * end_refs;

      p = start + 16;
      D.18098 = MEM[(struct MonoArray *)start].max_length;
      el_size.4 = (unsigned int) el_size;
      D.18100 = D.18098 * el_size.4;
      end_refs = p + D.18100;
      goto <D.17995>;
      <D.17994>:
      {
        void * __old;

        __old = *p;
        if (__old != 0B) goto <D.18101>; else goto <D.18102>;
        <D.18101>:
        simple_nursery_serial_copy_object_from_obj (p, queue);
        if (0 != 0) goto <D.18103>; else goto <D.18104>;
        <D.18103>:
        D.18105 = *p;
        if (D.18105 != __old) goto <D.18106>; else goto <D.18107>;
        <D.18106>:
        gc_debug_file.0 = gc_debug_file;
        D.18105 = *p;
        fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", p, D.18105, __old);
        gc_debug_file.0 = gc_debug_file;
        fflush (gc_debug_file.0);
        <D.18107>:
        <D.18104>:
        <D.18102>:
      }
      p = p + 4;
      <D.17995>:
      if (p < end_refs) goto <D.17994>; else goto <D.17996>;
      <D.17996>:
    }
    goto <D.18108>;
    <D.18097>:
    if (etype == 32768) goto <D.18109>; else goto <D.18110>;
    <D.18109>:
    {
      int offset;
      int num_refs;
      char * e_start;
      char * e_end;

      D.18052 = desc >> 16;
      D.18111 = (int) D.18052;
      offset = D.18111 & 255;
      D.18055 = desc >> 24;
      num_refs = (int) D.18055;
      e_start = start + 16;
      D.18098 = MEM[(struct MonoArray *)start].max_length;
      el_size.4 = (unsigned int) el_size;
      D.18100 = D.18098 * el_size.4;
      e_end = e_start + D.18100;
      goto <D.18008>;
      <D.18007>:
      {
        void * * p;
        int i;

        p = e_start;
        offset.5 = (unsigned int) offset;
        D.18113 = offset.5 * 4;
        p = p + D.18113;
        i = 0;
        goto <D.18005>;
        <D.18004>:
        {
          void * __old;

          i.6 = (unsigned int) i;
          D.18115 = i.6 * 4;
          D.18116 = p + D.18115;
          __old = *D.18116;
          if (__old != 0B) goto <D.18117>; else goto <D.18118>;
          <D.18117>:
          i.6 = (unsigned int) i;
          D.18115 = i.6 * 4;
          D.18116 = p + D.18115;
          simple_nursery_serial_copy_object_from_obj (D.18116, queue);
          if (0 != 0) goto <D.18119>; else goto <D.18120>;
          <D.18119>:
          i.6 = (unsigned int) i;
          D.18115 = i.6 * 4;
          D.18116 = p + D.18115;
          D.18121 = *D.18116;
          if (D.18121 != __old) goto <D.18122>; else goto <D.18123>;
          <D.18122>:
          gc_debug_file.0 = gc_debug_file;
          i.6 = (unsigned int) i;
          D.18115 = i.6 * 4;
          D.18116 = p + D.18115;
          i.6 = (unsigned int) i;
          D.18115 = i.6 * 4;
          D.18116 = p + D.18115;
          D.18121 = *D.18116;
          fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", D.18116, D.18121, __old);
          gc_debug_file.0 = gc_debug_file;
          fflush (gc_debug_file.0);
          <D.18123>:
          <D.18120>:
          <D.18118>:
        }
        i = i + 1;
        <D.18005>:
        if (i < num_refs) goto <D.18004>; else goto <D.18006>;
        <D.18006>:
        el_size.7 = (sizetype) el_size;
        e_start = e_start + el_size.7;
      }
      <D.18008>:
      if (e_start < e_end) goto <D.18007>; else goto <D.18009>;
      <D.18009>:
    }
    goto <D.18125>;
    <D.18110>:
    if (etype == 49152) goto <D.18126>; else goto <D.18127>;
    <D.18126>:
    {
      char * e_start;
      char * e_end;

      e_start = start + 16;
      D.18098 = MEM[(struct MonoArray *)start].max_length;
      el_size.4 = (unsigned int) el_size;
      D.18100 = D.18098 * el_size.4;
      e_end = e_start + D.18100;
      goto <D.18019>;
      <D.18018>:
      {
        void * * p;
        gsize _bmap;

        p = e_start;
        _bmap = desc >> 16;
        goto <D.18016>;
        <D.18015>:
        D.18128 = _bmap & 1;
        if (D.18128 != 0) goto <D.18129>; else goto <D.18130>;
        <D.18129>:
        {
          void * __old;

          __old = *p;
          if (__old != 0B) goto <D.18131>; else goto <D.18132>;
          <D.18131>:
          simple_nursery_serial_copy_object_from_obj (p, queue);
          if (0 != 0) goto <D.18133>; else goto <D.18134>;
          <D.18133>:
          D.18135 = *p;
          if (D.18135 != __old) goto <D.18136>; else goto <D.18137>;
          <D.18136>:
          gc_debug_file.0 = gc_debug_file;
          D.18135 = *p;
          fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", p, D.18135, __old);
          gc_debug_file.0 = gc_debug_file;
          fflush (gc_debug_file.0);
          <D.18137>:
          <D.18134>:
          <D.18132>:
        }
        <D.18130>:
        _bmap = _bmap >> 1;
        p = p + 4;
        <D.18016>:
        if (_bmap != 0) goto <D.18015>; else goto <D.18017>;
        <D.18017>:
        el_size.7 = (sizetype) el_size;
        e_start = e_start + el_size.7;
      }
      <D.18019>:
      if (e_start < e_end) goto <D.18018>; else goto <D.18020>;
      <D.18020>:
    }
    <D.18127>:
    <D.18125>:
    <D.18108>:
  }
  <D.18092>:
  goto <D.17977>;
  <D.18021>:
  {
    void * * _objptr;
    gsize _bmap;

    _objptr = start;
    _bmap = desc >> 3;
    _objptr = _objptr + 8;
    goto <D.18026>;
    <D.18025>:
    D.18138 = _bmap & 1;
    if (D.18138 != 0) goto <D.18139>; else goto <D.18140>;
    <D.18139>:
    {
      void * __old;

      __old = *_objptr;
      if (__old != 0B) goto <D.18141>; else goto <D.18142>;
      <D.18141>:
      simple_nursery_serial_copy_object_from_obj (_objptr, queue);
      if (0 != 0) goto <D.18143>; else goto <D.18144>;
      <D.18143>:
      D.18145 = *_objptr;
      if (D.18145 != __old) goto <D.18146>; else goto <D.18147>;
      <D.18146>:
      gc_debug_file.0 = gc_debug_file;
      D.18145 = *_objptr;
      fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18145, __old);
      gc_debug_file.0 = gc_debug_file;
      fflush (gc_debug_file.0);
      <D.18147>:
      <D.18144>:
      <D.18142>:
    }
    <D.18140>:
    _bmap = _bmap >> 1;
    _objptr = _objptr + 4;
    <D.18026>:
    if (_bmap != 0) goto <D.18025>; else goto <D.18027>;
    <D.18027>:
  }
  goto <D.17977>;
  <D.18028>:
  {
    void * * _objptr;
    gsize * bitmap_data;
    int bwords;
    void * * start_run;

    _objptr = start;
    bitmap_data = sgen_get_complex_descriptor (desc);
    D.18148 = *bitmap_data;
    D.18149 = D.18148 + 4294967295;
    bwords = (int) D.18149;
    start_run = _objptr;
    bitmap_data = bitmap_data + 4;
    if (0 != 0) goto <D.18150>; else goto <D.18151>;
    <D.18150>:
    {
      struct MonoObject * myobj;

      myobj = start;
      D.18152 = myobj->vtable;
      D.18153 = D.18152->klass;
      D.18154 = D.18153->name_space;
      D.18152 = myobj->vtable;
      D.18153 = D.18152->klass;
      D.18155 = D.18153->name;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.18154, D.18155);
    }
    <D.18151>:
    goto <D.18040>;
    <D.18039>:
    {
      gsize _bmap;

      bitmap_data.8 = bitmap_data;
      bitmap_data = bitmap_data.8 + 4;
      _bmap = *bitmap_data.8;
      _objptr = start_run;
      goto <D.18037>;
      <D.18036>:
      D.18157 = _bmap & 1;
      if (D.18157 != 0) goto <D.18158>; else goto <D.18159>;
      <D.18158>:
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18160>; else goto <D.18161>;
        <D.18160>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18162>; else goto <D.18163>;
        <D.18162>:
        D.18164 = *_objptr;
        if (D.18164 != __old) goto <D.18165>; else goto <D.18166>;
        <D.18165>:
        gc_debug_file.0 = gc_debug_file;
        D.18164 = *_objptr;
        fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18164, __old);
        gc_debug_file.0 = gc_debug_file;
        fflush (gc_debug_file.0);
        <D.18166>:
        <D.18163>:
        <D.18161>:
      }
      <D.18159>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 4;
      <D.18037>:
      if (_bmap != 0) goto <D.18036>; else goto <D.18038>;
      <D.18038>:
      start_run = start_run + 128;
    }
    <D.18040>:
    bwords.9 = bwords;
    bwords = bwords.9 + -1;
    if (bwords.9 > 0) goto <D.18039>; else goto <D.18041>;
    <D.18041>:
  }
  goto <D.17977>;
  <D.18042>:
  goto <D.17977>;
  <D.18043>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
  <D.17977>:
}


simple_nursery_serial_copy_object_from_obj (void * * obj_slot, struct SgenGrayQueue * queue)
{
  int current_collection_generation.10;
  int D.18172;
  struct FILE * gc_debug_file.11;
  char * iftmp.12;
  unsigned int D.18179;
  unsigned int D.18180;
  unsigned int D.18183;
  unsigned int D.18191;
  _Bool D.18192;
  long int D.18193;
  long int D.18194;
  int D.18201;
  _Bool D.18204;
  long int D.18205;
  long int D.18206;
  int iftmp.13;
  int D.18212;
  int D.18214;
  _Bool D.18216;
  long int D.18217;
  long int D.18218;
  char * forwarded;
  char * obj;
  void * copy;

  obj = *obj_slot;
  if (0 != 0) goto <D.18169>; else goto <D.18170>;
  <D.18169>:
  current_collection_generation.10 = current_collection_generation;
  monoeg_g_log (0B, 4, "calling minor-serial-copy-from-obj from a %d generation collection", current_collection_generation.10);
  <D.17646>:
  goto <D.17646>;
  <D.18170>:
  D.18172 = sgen_ptr_in_nursery (obj);
  if (D.18172 == 0) goto <D.18173>; else goto <D.18174>;
  <D.18173>:
  return;
  <D.18174>:
  if (0 != 0) goto <D.18175>; else goto <D.18176>;
  <D.18175>:
  gc_debug_file.11 = gc_debug_file;
  fprintf (gc_debug_file.11, "Precise copy of %p from %p\n", obj, obj_slot);
  gc_debug_file.11 = gc_debug_file;
  fflush (gc_debug_file.11);
  <D.18176>:
  D.18179 = MEM[(mword *)obj];
  D.18180 = D.18179 & 1;
  if (D.18180 != 0) goto <D.18181>; else goto <D.18182>;
  <D.18181>:
  D.18179 = MEM[(mword *)obj];
  D.18183 = D.18179 & 4294967292;
  iftmp.12 = (char *) D.18183;
  goto <D.18184>;
  <D.18182>:
  iftmp.12 = 0B;
  <D.18184>:
  forwarded = iftmp.12;
  if (forwarded != 0B) goto <D.18185>; else goto <D.18186>;
  <D.18185>:
  if (0 != 0) goto <D.18187>; else goto <D.18188>;
  <D.18187>:
  monoeg_g_log (0B, 4, "forwarded object %p has no gc descriptor", forwarded);
  <D.17647>:
  goto <D.17647>;
  <D.18188>:
  if (0 != 0) goto <D.18189>; else goto <D.18190>;
  <D.18189>:
  gc_debug_file.11 = gc_debug_file;
  fprintf (gc_debug_file.11, " (already forwarded to %p)\n", forwarded);
  gc_debug_file.11 = gc_debug_file;
  fflush (gc_debug_file.11);
  <D.18190>:
  *obj_slot = forwarded;
  return;
  <D.18186>:
  D.18179 = MEM[(mword *)obj];
  D.18191 = D.18179 & 2;
  D.18192 = D.18191 != 0;
  D.18193 = (long int) D.18192;
  D.18194 = __builtin_expect (D.18193, 0);
  if (D.18194 != 0) goto <D.18195>; else goto <D.18196>;
  <D.18195>:
  if (0 != 0) goto <D.18197>; else goto <D.18198>;
  <D.18197>:
  monoeg_g_log (0B, 4, "pinned object %p has no gc descriptor", obj);
  <D.17648>:
  goto <D.17648>;
  <D.18198>:
  if (0 != 0) goto <D.18199>; else goto <D.18200>;
  <D.18199>:
  gc_debug_file.11 = gc_debug_file;
  fprintf (gc_debug_file.11, " (pinned, no change)\n");
  gc_debug_file.11 = gc_debug_file;
  fflush (gc_debug_file.11);
  <D.18200>:
  D.18201 = sgen_ptr_in_nursery (obj_slot);
  if (D.18201 == 0) goto <D.18202>; else goto <D.18203>;
  <D.18202>:
  sgen_add_to_global_remset (obj_slot, obj);
  <D.18203>:
  return;
  <D.18196>:
  copy = copy_object_no_checks (obj, queue);
  *obj_slot = copy;
  D.18204 = obj == copy;
  D.18205 = (long int) D.18204;
  D.18206 = __builtin_expect (D.18205, 0);
  if (D.18206 != 0) goto <D.18207>; else goto <D.18208>;
  <D.18207>:
  D.18212 = sgen_ptr_in_nursery (copy);
  if (D.18212 != 0) goto <D.18213>; else goto <D.18210>;
  <D.18213>:
  D.18214 = sgen_ptr_in_nursery (obj_slot);
  if (D.18214 == 0) goto <D.18215>; else goto <D.18210>;
  <D.18215>:
  iftmp.13 = 1;
  goto <D.18211>;
  <D.18210>:
  iftmp.13 = 0;
  <D.18211>:
  D.18216 = iftmp.13 != 0;
  D.18217 = (long int) D.18216;
  D.18218 = __builtin_expect (D.18217, 0);
  if (D.18218 != 0) goto <D.18219>; else goto <D.18220>;
  <D.18219>:
  sgen_add_to_global_remset (obj_slot, copy);
  <D.18220>:
  <D.18208>:
}


copy_object_no_checks (void * obj, struct SgenGrayQueue * queue)
{
  void * D.18222;
  unsigned int D.18223;
  unsigned int D.18224;
  unsigned int D.18225;
  _Bool D.18226;
  long int D.18227;
  long int D.18228;
  void * D.18231;
  struct SgenGrayQueue * iftmp.14;
  unsigned int destination.15;
  unsigned int D.18237;
  struct MonoVTable * vt;
  gboolean has_references;
  mword objsize;
  char * destination;

  vt = MEM[(struct MonoObject *)obj].vtable;
  D.18222 = vt->gc_descr;
  D.18223 = (unsigned int) D.18222;
  has_references = sgen_gc_descr_has_references (D.18223);
  D.18224 = sgen_par_object_get_size (vt, obj);
  D.18225 = D.18224 + 7;
  objsize = D.18225 & 4294967288;
  destination = alloc_for_promotion (vt, obj, objsize, has_references);
  D.18226 = destination == 0B;
  D.18227 = (long int) D.18226;
  D.18228 = __builtin_expect (D.18227, 0);
  if (D.18228 != 0) goto <D.18229>; else goto <D.18230>;
  <D.18229>:
  sgen_pin_object (obj, queue);
  sgen_set_pinned_from_failed_allocation (objsize);
  D.18231 = obj;
  return D.18231;
  <D.18230>:
  if (has_references != 0) goto <D.18233>; else goto <D.18234>;
  <D.18233>:
  iftmp.14 = queue;
  goto <D.18235>;
  <D.18234>:
  iftmp.14 = 0B;
  <D.18235>:
  par_copy_object_no_checks (destination, vt, obj, objsize, iftmp.14);
  destination.15 = (unsigned int) destination;
  D.18237 = destination.15 | 1;
  MEM[(mword *)obj] = D.18237;
  D.18231 = destination;
  return D.18231;
}


sgen_gc_descr_has_references (mword desc)
{
  unsigned int D.18239;
  gboolean D.18242;
  unsigned int D.18243;
  unsigned int D.18246;

  D.18239 = desc & 4294901767;
  if (D.18239 == 1) goto <D.18240>; else goto <D.18241>;
  <D.18240>:
  D.18242 = 0;
  return D.18242;
  <D.18241>:
  D.18243 = desc & 49159;
  if (D.18243 == 4) goto <D.18244>; else goto <D.18245>;
  <D.18244>:
  D.18242 = 0;
  return D.18242;
  <D.18245>:
  D.18246 = desc & 7;
  if (D.18246 == 7) goto <D.18247>; else goto <D.18248>;
  <D.18247>:
  D.18242 = 0;
  return D.18242;
  <D.18248>:
  D.18242 = 1;
  return D.18242;
}


sgen_par_object_get_size (struct MonoVTable * vtable, struct MonoObject * o)
{
  void * D.18250;
  unsigned int D.18251;
  guint D.18256;
  int D.18257;
  int D.18258;
  unsigned int D.18259;
  unsigned int D.18262;
  int D.18263;
  unsigned int D.18264;
  unsigned int element_size.16;
  unsigned int D.18266;
  unsigned int D.18267;
  struct MonoClass * D.18270;
  unsigned char D.18271;
  unsigned int D.18272;
  unsigned int D.18273;
  mword descr;
  mword type;

  D.18250 = vtable->gc_descr;
  descr = (mword) D.18250;
  type = descr & 7;
  D.18251 = type + 4294967295;
  if (D.18251 <= 1) goto <D.18252>; else goto <D.18253>;
  <D.18252>:
  {
    mword size;

    size = descr & 65528;
    if (size == 0) goto <D.18254>; else goto <D.18255>;
    <D.18254>:
    D.18257 = MEM[(struct MonoString *)o].length;
    D.18258 = D.18257 * 2;
    D.18259 = (unsigned int) D.18258;
    D.18256 = D.18259 + 14;
    return D.18256;
    <D.18255>:
    D.18256 = size;
    return D.18256;
  }
  <D.18253>:
  if (type == 4) goto <D.18260>; else goto <D.18261>;
  <D.18260>:
  {
    int element_size;
    struct MonoArray * array;
    size_t size;

    D.18262 = descr >> 3;
    D.18263 = (int) D.18262;
    element_size = D.18263 & 1023;
    array = o;
    D.18264 = array->max_length;
    element_size.16 = (unsigned int) element_size;
    D.18266 = D.18264 * element_size.16;
    size = D.18266 + 16;
    D.18267 = descr & 8192;
    if (D.18267 != 0) goto <D.18268>; else goto <D.18269>;
    <D.18268>:
    size = size + 3;
    size = size & 4294967292;
    D.18270 = vtable->klass;
    D.18271 = D.18270->rank;
    D.18272 = (unsigned int) D.18271;
    D.18273 = D.18272 * 8;
    size = D.18273 + size;
    <D.18269>:
    D.18256 = size;
    return D.18256;
  }
  <D.18261>:
  D.18256 = slow_object_get_size (vtable, o);
  return D.18256;
}


slow_object_get_size (struct MonoVTable * vtable, struct MonoObject * o)
{
  struct MonoClass * D.18275;
  guint D.18278;
  int D.18279;
  int D.18280;
  unsigned int D.18281;
  unsigned char D.18282;
  int D.18285;
  unsigned int D.18286;
  unsigned int D.18287;
  unsigned int D.18288;
  struct MonoArrayBounds * D.18289;
  _Bool D.18290;
  long int D.18291;
  long int D.18292;
  unsigned int D.18295;
  unsigned int D.18296;
  int D.18297;
  struct MonoClass * klass;

  klass = vtable->klass;
  D.18275 = mono_defaults.string_class;
  if (D.18275 == klass) goto <D.18276>; else goto <D.18277>;
  <D.18276>:
  D.18279 = MEM[(struct MonoString *)o].length;
  D.18280 = D.18279 * 2;
  D.18281 = (unsigned int) D.18280;
  D.18278 = D.18281 + 14;
  return D.18278;
  <D.18277>:
  D.18282 = klass->rank;
  if (D.18282 != 0) goto <D.18283>; else goto <D.18284>;
  <D.18283>:
  {
    struct MonoArray * array;
    size_t size;

    array = o;
    D.18285 = klass->sizes.element_size;
    D.18286 = (unsigned int) D.18285;
    D.18287 = array->max_length;
    D.18288 = D.18286 * D.18287;
    size = D.18288 + 16;
    D.18289 = array->bounds;
    D.18290 = D.18289 != 0B;
    D.18291 = (long int) D.18290;
    D.18292 = __builtin_expect (D.18291, 0);
    if (D.18292 != 0) goto <D.18293>; else goto <D.18294>;
    <D.18293>:
    size = size + 3;
    size = size & 4294967292;
    D.18282 = klass->rank;
    D.18295 = (unsigned int) D.18282;
    D.18296 = D.18295 * 8;
    size = D.18296 + size;
    <D.18294>:
    D.18278 = size;
    return D.18278;
  }
  <D.18284>:
  D.18297 = klass->instance_size;
  D.18278 = (guint) D.18297;
  return D.18278;
}


par_copy_object_no_checks (char * destination, struct MonoVTable * vt, void * obj, mword objsize, struct SgenGrayQueue * queue)
{
  struct MonoClass * D.18301;
  const char * D.18302;
  const char * D.18303;
  struct FILE * gc_debug_file.17;
  struct MonoVTable * D.18307;
  struct MonoClass * D.18308;
  const char * D.18309;
  unsigned int D.18312;
  const void * D.18313;
  mword * D.18314;
  unsigned int D.18315;
  mword * D.18316;
  unsigned int D.18317;
  mword * D.18318;
  unsigned int D.18319;
  mword * D.18320;
  unsigned int D.18321;
  mword * D.18322;
  unsigned int D.18323;
  mword * D.18324;
  unsigned int D.18325;
  mword * D.18326;
  unsigned int D.18327;
  void * D.18329;
  const void * D.18330;
  unsigned int D.18331;
  int iftmp.18;
  unsigned char D.18337;
  struct MonoArrayBounds * D.18339;
  _Bool D.18341;
  long int D.18342;
  long int D.18343;
  int D.18346;
  int obj.19;
  int D.18348;
  sizetype D.18349;
  struct MonoArrayBounds * D.18350;
  int D.18353;
  unsigned int D.18354;
  <unnamed type> mono_profiler_events.20;
  unsigned int D.18356;
  _Bool D.18357;
  long int D.18358;
  long int D.18359;
  const char * D.18366;
  int iftmp.21;
  struct GrayQueueSection * D.18371;
  int D.18373;
  _Bool D.18374;
  long int D.18375;
  long int D.18376;
  int D.18380;
  int D.18381;
  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.18299>; else goto <D.18300>;
  <D.18299>:
  D.18301 = vt->klass;
  D.18302 = D.18301->name_space;
  D.18301 = vt->klass;
  D.18303 = D.18301->name;
  monoeg_g_log (0B, 4, "vtable %p for class %s:%s was not initialized", vt, D.18302, D.18303);
  <D.17618>:
  goto <D.17618>;
  <D.18300>:
  if (0 != 0) goto <D.18304>; else goto <D.18305>;
  <D.18304>:
  gc_debug_file.17 = gc_debug_file;
  D.18307 = MEM[(struct MonoObject *)obj].vtable;
  D.18308 = D.18307->klass;
  D.18309 = D.18308->name;
  fprintf (gc_debug_file.17, " (to %p, %s size: %lu)\n", destination, D.18309, objsize);
  gc_debug_file.17 = gc_debug_file;
  fflush (gc_debug_file.17);
  <D.18305>:
  if (objsize <= 32) goto <D.18310>; else goto <D.18311>;
  <D.18310>:
  {
    mword * dest;

    dest = destination;
    D.18312 = objsize / 4;
    D.18313 = copy_labels[D.18312];
    goto D.18313;
    LAB_8:
    D.18314 = dest + 28;
    D.18315 = MEM[(mword *)obj + 28B];
    *D.18314 = D.18315;
    LAB_7:
    D.18316 = dest + 24;
    D.18317 = MEM[(mword *)obj + 24B];
    *D.18316 = D.18317;
    LAB_6:
    D.18318 = dest + 20;
    D.18319 = MEM[(mword *)obj + 20B];
    *D.18318 = D.18319;
    LAB_5:
    D.18320 = dest + 16;
    D.18321 = MEM[(mword *)obj + 16B];
    *D.18320 = D.18321;
    LAB_4:
    D.18322 = dest + 12;
    D.18323 = MEM[(mword *)obj + 12B];
    *D.18322 = D.18323;
    LAB_3:
    D.18324 = dest + 8;
    D.18325 = MEM[(mword *)obj + 8B];
    *D.18324 = D.18325;
    LAB_2:
    D.18326 = dest + 4;
    D.18327 = MEM[(mword *)obj + 4B];
    *D.18326 = D.18327;
    LAB_1:
    LAB_0:
  }
  goto <D.18328>;
  <D.18311>:
  D.18329 = destination + 4;
  D.18330 = obj + 4;
  D.18331 = objsize + 4294967292;
  mono_gc_memmove_aligned (D.18329, D.18330, D.18331);
  <D.18328>:
  if (0 != 0) goto <D.18332>; else goto <D.18333>;
  <D.18332>:
  D.18301 = vt->klass;
  D.18302 = D.18301->name_space;
  D.18301 = vt->klass;
  D.18303 = D.18301->name;
  monoeg_g_log (0B, 4, "vtable %p for class %s:%s has no gc descriptor", vt, D.18302, D.18303);
  <D.17620>:
  goto <D.17620>;
  <D.18333>:
  D.18337 = vt->rank;
  if (D.18337 != 0) goto <D.18338>; else goto <D.18335>;
  <D.18338>:
  D.18339 = MEM[(struct MonoArray *)obj].bounds;
  if (D.18339 != 0B) goto <D.18340>; else goto <D.18335>;
  <D.18340>:
  iftmp.18 = 1;
  goto <D.18336>;
  <D.18335>:
  iftmp.18 = 0;
  <D.18336>:
  D.18341 = iftmp.18 != 0;
  D.18342 = (long int) D.18341;
  D.18343 = __builtin_expect (D.18342, 0);
  if (D.18343 != 0) goto <D.18344>; else goto <D.18345>;
  <D.18344>:
  {
    struct MonoArray * array;

    array = destination;
    D.18339 = MEM[(struct MonoArray *)obj].bounds;
    D.18346 = (int) D.18339;
    obj.19 = (int) obj;
    D.18348 = D.18346 - obj.19;
    D.18349 = (sizetype) D.18348;
    D.18350 = destination + D.18349;
    array->bounds = D.18350;
    if (0 != 0) goto <D.18351>; else goto <D.18352>;
    <D.18351>:
    gc_debug_file.17 = gc_debug_file;
    D.18337 = vt->rank;
    D.18353 = (int) D.18337;
    D.18354 = mono_array_length (array);
    fprintf (gc_debug_file.17, "Array instance %p: size: %lu, rank: %d, length: %lu\n", array, objsize, D.18353, D.18354);
    gc_debug_file.17 = gc_debug_file;
    fflush (gc_debug_file.17);
    <D.18352>:
  }
  <D.18345>:
  mono_profiler_events.20 = mono_profiler_events;
  D.18356 = mono_profiler_events.20 & 524288;
  D.18357 = D.18356 != 0;
  D.18358 = (long int) D.18357;
  D.18359 = __builtin_expect (D.18358, 0);
  if (D.18359 != 0) goto <D.18360>; else goto <D.18361>;
  <D.18360>:
  sgen_register_moved_object (obj, destination);
  <D.18361>:
  obj = destination;
  if (queue != 0B) goto <D.18362>; else goto <D.18363>;
  <D.18362>:
  if (0 != 0) goto <D.18364>; else goto <D.18365>;
  <D.18364>:
  gc_debug_file.17 = gc_debug_file;
  D.18366 = sgen_safe_name (obj);
  fprintf (gc_debug_file.17, "Enqueuing gray object %p (%s)\n", obj, D.18366);
  gc_debug_file.17 = gc_debug_file;
  fflush (gc_debug_file.17);
  <D.18365>:
  D.18371 = queue->first;
  if (D.18371 == 0B) goto <D.18368>; else goto <D.18372>;
  <D.18372>:
  D.18371 = queue->first;
  D.18373 = D.18371->end;
  if (D.18373 == 125) goto <D.18368>; else goto <D.18369>;
  <D.18368>:
  iftmp.21 = 1;
  goto <D.18370>;
  <D.18369>:
  iftmp.21 = 0;
  <D.18370>:
  D.18374 = iftmp.21 != 0;
  D.18375 = (long int) D.18374;
  D.18376 = __builtin_expect (D.18375, 0);
  if (D.18376 != 0) goto <D.18377>; else goto <D.18378>;
  <D.18377>:
  sgen_gray_object_enqueue (queue, obj);
  goto <D.18379>;
  <D.18378>:
  D.18371 = queue->first;
  D.18371 = queue->first;
  D.18373 = D.18371->end;
  D.18380 = D.18373;
  D.18381 = D.18380 + 1;
  D.18371->end = D.18381;
  D.18371->objects[D.18380] = obj;
  <D.18379>:
  __builtin_prefetch (obj);
  <D.18363>:
}


sgen_ptr_in_nursery (void * p)
{
  gboolean D.18384;
  int sgen_nursery_bits.23;
  int D.18386;
  int D.18387;
  unsigned int D.18388;
  unsigned int p.24;
  unsigned int D.18390;
  char * sgen_nursery_start.25;
  unsigned int sgen_nursery_start.26;
  _Bool D.18393;

  sgen_nursery_bits.23 = sgen_nursery_bits;
  D.18386 = 1 << sgen_nursery_bits.23;
  D.18387 = -D.18386;
  D.18388 = (unsigned int) D.18387;
  p.24 = (unsigned int) p;
  D.18390 = D.18388 & p.24;
  sgen_nursery_start.25 = sgen_nursery_start;
  sgen_nursery_start.26 = (unsigned int) sgen_nursery_start.25;
  D.18393 = D.18390 == sgen_nursery_start.26;
  D.18384 = (gboolean) D.18393;
  return D.18384;
}


simple_nursery_serial_scan_object (char * start, struct SgenGrayQueue * queue)
{
  unsigned int D.18395;
  unsigned int D.18396;
  unsigned int D.18397;
  unsigned int D.18398;
  unsigned int D.18401;
  unsigned int D.18402;
  unsigned int D.18403;
  unsigned int D.18404;
  unsigned int D.18405;
  void * D.18410;
  struct FILE * gc_debug_file.27;
  unsigned int _index.28;
  unsigned int D.18421;
  int D.18422;
  void * D.18427;
  unsigned int _index.29;
  unsigned int D.18431;
  int D.18432;
  unsigned int D.18439;
  unsigned int D.18442;
  int D.18443;
  int desc.30;
  unsigned int D.18447;
  unsigned int el_size.31;
  unsigned int D.18449;
  void * D.18454;
  int D.18460;
  unsigned int offset.32;
  unsigned int D.18462;
  unsigned int i.33;
  unsigned int D.18464;
  void * * D.18465;
  void * D.18470;
  sizetype el_size.34;
  unsigned int D.18477;
  void * D.18484;
  unsigned int D.18487;
  void * D.18494;
  unsigned int D.18497;
  unsigned int D.18498;
  struct MonoVTable * D.18501;
  struct MonoClass * D.18502;
  const char * D.18503;
  const char * D.18504;
  gsize * bitmap_data.35;
  unsigned int D.18506;
  void * D.18513;
  int bwords.36;
  unsigned int D.18517;
  gsize * mbitmap_data.37;
  unsigned int D.18519;
  unsigned int D.18520;
  struct MonoClass * D.18521;
  unsigned int el_size.38;
  unsigned int D.18523;
  const char * D.18526;
  const char * D.18527;
  gsize * bitmap_data.39;
  unsigned int D.18529;
  void * D.18536;
  unsigned int bwords.40;
  sizetype el_size.41;

  {
    struct GCVTable * vt;
    mword desc;

    D.18395 = MEM[(mword *)start];
    D.18396 = D.18395 & 4294967292;
    vt = (struct GCVTable *) D.18396;
    desc = vt->desc;
    D.18397 = desc & 7;
    switch (D.18397) <default: <D.17963>, case 1: <D.17868>, case 2: <D.17877>, case 3: <D.17927>, case 4: <D.17887>, case 5: <D.17920>, case 6: <D.17941>, case 7: <D.17962>>
    <D.17868>:
    D.18398 = desc & 4294901760;
    if (D.18398 != 0) goto <D.18399>; else goto <D.18400>;
    <D.18399>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.18401 = desc >> 16;
      D.18402 = D.18401 & 255;
      D.18403 = D.18402 * 4;
      _objptr = _objptr + D.18403;
      D.18404 = desc >> 24;
      D.18405 = D.18404 * 4;
      _objptr_end = _objptr + D.18405;
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18406>; else goto <D.18407>;
        <D.18406>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18408>; else goto <D.18409>;
        <D.18408>:
        D.18410 = *_objptr;
        if (D.18410 != __old) goto <D.18411>; else goto <D.18412>;
        <D.18411>:
        gc_debug_file.27 = gc_debug_file;
        D.18410 = *_objptr;
        fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18410, __old);
        gc_debug_file.27 = gc_debug_file;
        fflush (gc_debug_file.27);
        <D.18412>:
        <D.18409>:
        <D.18407>:
      }
      _objptr = _objptr + 4;
      goto <D.17874>;
      <D.17873>:
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18414>; else goto <D.18415>;
        <D.18414>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18416>; else goto <D.18417>;
        <D.18416>:
        D.18410 = *_objptr;
        if (D.18410 != __old) goto <D.18418>; else goto <D.18419>;
        <D.18418>:
        gc_debug_file.27 = gc_debug_file;
        D.18410 = *_objptr;
        fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18410, __old);
        gc_debug_file.27 = gc_debug_file;
        fflush (gc_debug_file.27);
        <D.18419>:
        <D.18417>:
        <D.18415>:
      }
      _objptr = _objptr + 4;
      <D.17874>:
      if (_objptr < _objptr_end) goto <D.17873>; else goto <D.17875>;
      <D.17875>:
    }
    <D.18400>:
    goto <D.17876>;
    <D.17877>:
    {
      void * * _objptr;
      gsize _bmap;

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

        _index = __builtin_ctz (_bmap);
        _index.28 = (unsigned int) _index;
        D.18421 = _index.28 * 4;
        _objptr = _objptr + D.18421;
        D.18422 = _index + 1;
        _bmap = _bmap >> D.18422;
        {
          void * __old;

          __old = *_objptr;
          if (__old != 0B) goto <D.18423>; else goto <D.18424>;
          <D.18423>:
          simple_nursery_serial_copy_object_from_obj (_objptr, queue);
          if (0 != 0) goto <D.18425>; else goto <D.18426>;
          <D.18425>:
          D.18427 = *_objptr;
          if (D.18427 != __old) goto <D.18428>; else goto <D.18429>;
          <D.18428>:
          gc_debug_file.27 = gc_debug_file;
          D.18427 = *_objptr;
          fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18427, __old);
          gc_debug_file.27 = gc_debug_file;
          fflush (gc_debug_file.27);
          <D.18429>:
          <D.18426>:
          <D.18424>:
        }
        _objptr = _objptr + 4;
      }
      goto <D.17885>;
      <D.17884>:
      {
        int _index;

        _index = __builtin_ctz (_bmap);
        _index.29 = (unsigned int) _index;
        D.18431 = _index.29 * 4;
        _objptr = _objptr + D.18431;
        D.18432 = _index + 1;
        _bmap = _bmap >> D.18432;
        {
          void * __old;

          __old = *_objptr;
          if (__old != 0B) goto <D.18433>; else goto <D.18434>;
          <D.18433>:
          simple_nursery_serial_copy_object_from_obj (_objptr, queue);
          if (0 != 0) goto <D.18435>; else goto <D.18436>;
          <D.18435>:
          D.18427 = *_objptr;
          if (D.18427 != __old) goto <D.18437>; else goto <D.18438>;
          <D.18437>:
          gc_debug_file.27 = gc_debug_file;
          D.18427 = *_objptr;
          fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18427, __old);
          gc_debug_file.27 = gc_debug_file;
          fflush (gc_debug_file.27);
          <D.18438>:
          <D.18436>:
          <D.18434>:
        }
        _objptr = _objptr + 4;
      }
      <D.17885>:
      if (_bmap != 0) goto <D.17884>; else goto <D.17886>;
      <D.17886>:
    }
    goto <D.17876>;
    <D.17887>:
    D.18439 = desc & 4294950912;
    if (D.18439 != 0) goto <D.18440>; else goto <D.18441>;
    <D.18440>:
    {
      int el_size;
      int etype;

      D.18442 = desc >> 3;
      D.18443 = (int) D.18442;
      el_size = D.18443 & 1023;
      desc.30 = (int) desc;
      etype = desc.30 & 49152;
      if (etype == 16384) goto <D.18445>; else goto <D.18446>;
      <D.18445>:
      {
        void * * p;
        void * * end_refs;

        p = start + 16;
        D.18447 = MEM[(struct MonoArray *)start].max_length;
        el_size.31 = (unsigned int) el_size;
        D.18449 = D.18447 * el_size.31;
        end_refs = p + D.18449;
        goto <D.17894>;
        <D.17893>:
        {
          void * __old;

          __old = *p;
          if (__old != 0B) goto <D.18450>; else goto <D.18451>;
          <D.18450>:
          simple_nursery_serial_copy_object_from_obj (p, queue);
          if (0 != 0) goto <D.18452>; else goto <D.18453>;
          <D.18452>:
          D.18454 = *p;
          if (D.18454 != __old) goto <D.18455>; else goto <D.18456>;
          <D.18455>:
          gc_debug_file.27 = gc_debug_file;
          D.18454 = *p;
          fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", p, D.18454, __old);
          gc_debug_file.27 = gc_debug_file;
          fflush (gc_debug_file.27);
          <D.18456>:
          <D.18453>:
          <D.18451>:
        }
        p = p + 4;
        <D.17894>:
        if (p < end_refs) goto <D.17893>; else goto <D.17895>;
        <D.17895>:
      }
      goto <D.18457>;
      <D.18446>:
      if (etype == 32768) goto <D.18458>; else goto <D.18459>;
      <D.18458>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.18401 = desc >> 16;
        D.18460 = (int) D.18401;
        offset = D.18460 & 255;
        D.18404 = desc >> 24;
        num_refs = (int) D.18404;
        e_start = start + 16;
        D.18447 = MEM[(struct MonoArray *)start].max_length;
        el_size.31 = (unsigned int) el_size;
        D.18449 = D.18447 * el_size.31;
        e_end = e_start + D.18449;
        goto <D.17907>;
        <D.17906>:
        {
          void * * p;
          int i;

          p = e_start;
          offset.32 = (unsigned int) offset;
          D.18462 = offset.32 * 4;
          p = p + D.18462;
          i = 0;
          goto <D.17904>;
          <D.17903>:
          {
            void * __old;

            i.33 = (unsigned int) i;
            D.18464 = i.33 * 4;
            D.18465 = p + D.18464;
            __old = *D.18465;
            if (__old != 0B) goto <D.18466>; else goto <D.18467>;
            <D.18466>:
            i.33 = (unsigned int) i;
            D.18464 = i.33 * 4;
            D.18465 = p + D.18464;
            simple_nursery_serial_copy_object_from_obj (D.18465, queue);
            if (0 != 0) goto <D.18468>; else goto <D.18469>;
            <D.18468>:
            i.33 = (unsigned int) i;
            D.18464 = i.33 * 4;
            D.18465 = p + D.18464;
            D.18470 = *D.18465;
            if (D.18470 != __old) goto <D.18471>; else goto <D.18472>;
            <D.18471>:
            gc_debug_file.27 = gc_debug_file;
            i.33 = (unsigned int) i;
            D.18464 = i.33 * 4;
            D.18465 = p + D.18464;
            i.33 = (unsigned int) i;
            D.18464 = i.33 * 4;
            D.18465 = p + D.18464;
            D.18470 = *D.18465;
            fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", D.18465, D.18470, __old);
            gc_debug_file.27 = gc_debug_file;
            fflush (gc_debug_file.27);
            <D.18472>:
            <D.18469>:
            <D.18467>:
          }
          i = i + 1;
          <D.17904>:
          if (i < num_refs) goto <D.17903>; else goto <D.17905>;
          <D.17905>:
          el_size.34 = (sizetype) el_size;
          e_start = e_start + el_size.34;
        }
        <D.17907>:
        if (e_start < e_end) goto <D.17906>; else goto <D.17908>;
        <D.17908>:
      }
      goto <D.18474>;
      <D.18459>:
      if (etype == 49152) goto <D.18475>; else goto <D.18476>;
      <D.18475>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 16;
        D.18447 = MEM[(struct MonoArray *)start].max_length;
        el_size.31 = (unsigned int) el_size;
        D.18449 = D.18447 * el_size.31;
        e_end = e_start + D.18449;
        goto <D.17918>;
        <D.17917>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.17915>;
          <D.17914>:
          D.18477 = _bmap & 1;
          if (D.18477 != 0) goto <D.18478>; else goto <D.18479>;
          <D.18478>:
          {
            void * __old;

            __old = *p;
            if (__old != 0B) goto <D.18480>; else goto <D.18481>;
            <D.18480>:
            simple_nursery_serial_copy_object_from_obj (p, queue);
            if (0 != 0) goto <D.18482>; else goto <D.18483>;
            <D.18482>:
            D.18484 = *p;
            if (D.18484 != __old) goto <D.18485>; else goto <D.18486>;
            <D.18485>:
            gc_debug_file.27 = gc_debug_file;
            D.18484 = *p;
            fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", p, D.18484, __old);
            gc_debug_file.27 = gc_debug_file;
            fflush (gc_debug_file.27);
            <D.18486>:
            <D.18483>:
            <D.18481>:
          }
          <D.18479>:
          _bmap = _bmap >> 1;
          p = p + 4;
          <D.17915>:
          if (_bmap != 0) goto <D.17914>; else goto <D.17916>;
          <D.17916>:
          el_size.34 = (sizetype) el_size;
          e_start = e_start + el_size.34;
        }
        <D.17918>:
        if (e_start < e_end) goto <D.17917>; else goto <D.17919>;
        <D.17919>:
      }
      <D.18476>:
      <D.18474>:
      <D.18457>:
    }
    <D.18441>:
    goto <D.17876>;
    <D.17920>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 8;
      goto <D.17925>;
      <D.17924>:
      D.18487 = _bmap & 1;
      if (D.18487 != 0) goto <D.18488>; else goto <D.18489>;
      <D.18488>:
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18490>; else goto <D.18491>;
        <D.18490>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18492>; else goto <D.18493>;
        <D.18492>:
        D.18494 = *_objptr;
        if (D.18494 != __old) goto <D.18495>; else goto <D.18496>;
        <D.18495>:
        gc_debug_file.27 = gc_debug_file;
        D.18494 = *_objptr;
        fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18494, __old);
        gc_debug_file.27 = gc_debug_file;
        fflush (gc_debug_file.27);
        <D.18496>:
        <D.18493>:
        <D.18491>:
      }
      <D.18489>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 4;
      <D.17925>:
      if (_bmap != 0) goto <D.17924>; else goto <D.17926>;
      <D.17926>:
    }
    goto <D.17876>;
    <D.17927>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.18497 = *bitmap_data;
      D.18498 = D.18497 + 4294967295;
      bwords = (int) D.18498;
      start_run = _objptr;
      bitmap_data = bitmap_data + 4;
      if (0 != 0) goto <D.18499>; else goto <D.18500>;
      <D.18499>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.18501 = myobj->vtable;
        D.18502 = D.18501->klass;
        D.18503 = D.18502->name_space;
        D.18501 = myobj->vtable;
        D.18502 = D.18501->klass;
        D.18504 = D.18502->name;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.18503, D.18504);
      }
      <D.18500>:
      goto <D.17939>;
      <D.17938>:
      {
        gsize _bmap;

        bitmap_data.35 = bitmap_data;
        bitmap_data = bitmap_data.35 + 4;
        _bmap = *bitmap_data.35;
        _objptr = start_run;
        goto <D.17936>;
        <D.17935>:
        D.18506 = _bmap & 1;
        if (D.18506 != 0) goto <D.18507>; else goto <D.18508>;
        <D.18507>:
        {
          void * __old;

          __old = *_objptr;
          if (__old != 0B) goto <D.18509>; else goto <D.18510>;
          <D.18509>:
          simple_nursery_serial_copy_object_from_obj (_objptr, queue);
          if (0 != 0) goto <D.18511>; else goto <D.18512>;
          <D.18511>:
          D.18513 = *_objptr;
          if (D.18513 != __old) goto <D.18514>; else goto <D.18515>;
          <D.18514>:
          gc_debug_file.27 = gc_debug_file;
          D.18513 = *_objptr;
          fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18513, __old);
          gc_debug_file.27 = gc_debug_file;
          fflush (gc_debug_file.27);
          <D.18515>:
          <D.18512>:
          <D.18510>:
        }
        <D.18508>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 4;
        <D.17936>:
        if (_bmap != 0) goto <D.17935>; else goto <D.17937>;
        <D.17937>:
        start_run = start_run + 128;
      }
      <D.17939>:
      bwords.36 = bwords;
      bwords = bwords.36 + -1;
      if (bwords.36 > 0) goto <D.17938>; else goto <D.17940>;
      <D.17940>:
    }
    goto <D.17876>;
    <D.17941>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.18517 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.18517);
      mbitmap_data.37 = mbitmap_data;
      mbitmap_data = mbitmap_data.37 + 4;
      D.18519 = *mbitmap_data.37;
      D.18520 = D.18519 + 4294967295;
      mbwords = (int) D.18520;
      D.18521 = vt->klass;
      el_size = mono_array_element_size (D.18521);
      e_start = start + 16;
      D.18447 = MEM[(struct MonoArray *)start].max_length;
      el_size.38 = (unsigned int) el_size;
      D.18523 = D.18447 * el_size.38;
      e_end = e_start + D.18523;
      if (0 != 0) goto <D.18524>; else goto <D.18525>;
      <D.18524>:
      D.18517 = vt->desc;
      D.18521 = vt->klass;
      D.18526 = D.18521->name_space;
      D.18521 = vt->klass;
      D.18527 = D.18521->name;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.18517, D.18526, D.18527);
      <D.18525>:
      goto <D.17960>;
      <D.17959>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

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

          bitmap_data.39 = bitmap_data;
          bitmap_data = bitmap_data.39 + 4;
          _bmap = *bitmap_data.39;
          start_run = _objptr;
          goto <D.17954>;
          <D.17953>:
          D.18529 = _bmap & 1;
          if (D.18529 != 0) goto <D.18530>; else goto <D.18531>;
          <D.18530>:
          {
            void * __old;

            __old = *_objptr;
            if (__old != 0B) goto <D.18532>; else goto <D.18533>;
            <D.18532>:
            simple_nursery_serial_copy_object_from_obj (_objptr, queue);
            if (0 != 0) goto <D.18534>; else goto <D.18535>;
            <D.18534>:
            D.18536 = *_objptr;
            if (D.18536 != __old) goto <D.18537>; else goto <D.18538>;
            <D.18537>:
            gc_debug_file.27 = gc_debug_file;
            D.18536 = *_objptr;
            fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18536, __old);
            gc_debug_file.27 = gc_debug_file;
            fflush (gc_debug_file.27);
            <D.18538>:
            <D.18535>:
            <D.18533>:
          }
          <D.18531>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 4;
          <D.17954>:
          if (_bmap != 0) goto <D.17953>; else goto <D.17955>;
          <D.17955>:
          _objptr = start_run + 128;
        }
        <D.17957>:
        bwords.40 = bwords;
        bwords = bwords.40 + 4294967295;
        if (bwords.40 != 0) goto <D.17956>; else goto <D.17958>;
        <D.17958>:
        el_size.41 = (sizetype) el_size;
        e_start = e_start + el_size.41;
      }
      <D.17960>:
      if (e_start < e_end) goto <D.17959>; else goto <D.17961>;
      <D.17961>:
    }
    goto <D.17876>;
    <D.17962>:
    goto <D.17876>;
    <D.17963>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.17876>:
  }
}


simple_nursery_parallel_scan_vtype (char * start, mword desc, struct SgenGrayQueue * queue)
{
  unsigned int D.18542;
  unsigned int D.18543;
  unsigned int D.18546;
  unsigned int D.18547;
  unsigned int D.18548;
  unsigned int D.18549;
  unsigned int D.18550;
  struct FILE * gc_debug_file.42;
  void * D.18558;
  int iftmp.43;
  int D.18562;
  int D.18564;
  _Bool D.18566;
  long int D.18567;
  long int D.18568;
  int iftmp.44;
  int D.18580;
  int D.18582;
  _Bool D.18584;
  long int D.18585;
  long int D.18586;
  unsigned int _index.45;
  unsigned int D.18590;
  int D.18591;
  void * D.18598;
  int iftmp.46;
  int D.18602;
  int D.18604;
  _Bool D.18606;
  long int D.18607;
  long int D.18608;
  unsigned int _index.47;
  unsigned int D.18612;
  int D.18613;
  int iftmp.48;
  int D.18623;
  int D.18625;
  _Bool D.18627;
  long int D.18628;
  long int D.18629;
  unsigned int D.18632;
  unsigned int D.18635;
  int D.18636;
  int desc.49;
  unsigned int D.18640;
  unsigned int el_size.50;
  unsigned int D.18642;
  void * D.18649;
  int iftmp.51;
  int D.18653;
  int D.18655;
  _Bool D.18657;
  long int D.18658;
  long int D.18659;
  int D.18665;
  unsigned int offset.52;
  unsigned int D.18667;
  unsigned int i.53;
  unsigned int D.18669;
  void * * D.18670;
  void * D.18677;
  int iftmp.54;
  int D.18681;
  void * D.18683;
  int D.18684;
  _Bool D.18686;
  long int D.18687;
  long int D.18688;
  void * D.18691;
  sizetype el_size.55;
  unsigned int D.18696;
  void * D.18705;
  int iftmp.56;
  int D.18709;
  int D.18711;
  _Bool D.18713;
  long int D.18714;
  long int D.18715;
  unsigned int D.18718;
  void * D.18727;
  int iftmp.57;
  int D.18731;
  int D.18733;
  _Bool D.18735;
  long int D.18736;
  long int D.18737;
  unsigned int D.18740;
  unsigned int D.18741;
  struct MonoVTable * D.18744;
  struct MonoClass * D.18745;
  const char * D.18746;
  const char * D.18747;
  gsize * bitmap_data.58;
  unsigned int D.18749;
  void * D.18758;
  int iftmp.59;
  int D.18762;
  int D.18764;
  _Bool D.18766;
  long int D.18767;
  long int D.18768;
  int bwords.60;

  start = start + 4294967288;
  D.18542 = desc & 7;
  switch (D.18542) <default: <D.17861>, case 1: <D.17778>, case 2: <D.17789>, case 3: <D.17845>, case 4: <D.17801>, case 5: <D.17837>, case 7: <D.17860>>
  <D.17778>:
  D.18543 = desc & 4294901760;
  if (D.18543 != 0) goto <D.18544>; else goto <D.18545>;
  <D.18544>:
  {
    void * * _objptr_end;
    void * * _objptr;

    _objptr = start;
    D.18546 = desc >> 16;
    D.18547 = D.18546 & 255;
    D.18548 = D.18547 * 4;
    _objptr = _objptr + D.18548;
    D.18549 = desc >> 24;
    D.18550 = D.18549 * 4;
    _objptr_end = _objptr + D.18550;
    {
      void * __old;
      void * __copy;

      __old = *_objptr;
      if (__old != 0B) goto <D.18551>; else goto <D.18552>;
      <D.18551>:
      simple_nursery_parallel_copy_object (_objptr, queue);
      __copy = *_objptr;
      if (0 != 0) goto <D.18553>; else goto <D.18554>;
      <D.18553>:
      if (__old != __copy) goto <D.18555>; else goto <D.18556>;
      <D.18555>:
      gc_debug_file.42 = gc_debug_file;
      D.18558 = *_objptr;
      fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18558, __old);
      gc_debug_file.42 = gc_debug_file;
      fflush (gc_debug_file.42);
      <D.18556>:
      <D.18554>:
      D.18562 = sgen_ptr_in_nursery (__copy);
      if (D.18562 != 0) goto <D.18563>; else goto <D.18560>;
      <D.18563>:
      D.18564 = sgen_ptr_in_nursery (_objptr);
      if (D.18564 == 0) goto <D.18565>; else goto <D.18560>;
      <D.18565>:
      iftmp.43 = 1;
      goto <D.18561>;
      <D.18560>:
      iftmp.43 = 0;
      <D.18561>:
      D.18566 = iftmp.43 != 0;
      D.18567 = (long int) D.18566;
      D.18568 = __builtin_expect (D.18567, 0);
      if (D.18568 != 0) goto <D.18569>; else goto <D.18570>;
      <D.18569>:
      sgen_add_to_global_remset (_objptr, __copy);
      <D.18570>:
      <D.18552>:
    }
    _objptr = _objptr + 4;
    goto <D.17786>;
    <D.17785>:
    {
      void * __old;
      void * __copy;

      __old = *_objptr;
      if (__old != 0B) goto <D.18571>; else goto <D.18572>;
      <D.18571>:
      simple_nursery_parallel_copy_object (_objptr, queue);
      __copy = *_objptr;
      if (0 != 0) goto <D.18573>; else goto <D.18574>;
      <D.18573>:
      if (__old != __copy) goto <D.18575>; else goto <D.18576>;
      <D.18575>:
      gc_debug_file.42 = gc_debug_file;
      D.18558 = *_objptr;
      fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18558, __old);
      gc_debug_file.42 = gc_debug_file;
      fflush (gc_debug_file.42);
      <D.18576>:
      <D.18574>:
      D.18580 = sgen_ptr_in_nursery (__copy);
      if (D.18580 != 0) goto <D.18581>; else goto <D.18578>;
      <D.18581>:
      D.18582 = sgen_ptr_in_nursery (_objptr);
      if (D.18582 == 0) goto <D.18583>; else goto <D.18578>;
      <D.18583>:
      iftmp.44 = 1;
      goto <D.18579>;
      <D.18578>:
      iftmp.44 = 0;
      <D.18579>:
      D.18584 = iftmp.44 != 0;
      D.18585 = (long int) D.18584;
      D.18586 = __builtin_expect (D.18585, 0);
      if (D.18586 != 0) goto <D.18587>; else goto <D.18588>;
      <D.18587>:
      sgen_add_to_global_remset (_objptr, __copy);
      <D.18588>:
      <D.18572>:
    }
    _objptr = _objptr + 4;
    <D.17786>:
    if (_objptr < _objptr_end) goto <D.17785>; else goto <D.17787>;
    <D.17787>:
  }
  <D.18545>:
  goto <D.17788>;
  <D.17789>:
  {
    void * * _objptr;
    gsize _bmap;

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

      _index = __builtin_ctz (_bmap);
      _index.45 = (unsigned int) _index;
      D.18590 = _index.45 * 4;
      _objptr = _objptr + D.18590;
      D.18591 = _index + 1;
      _bmap = _bmap >> D.18591;
      {
        void * __old;
        void * __copy;

        __old = *_objptr;
        if (__old != 0B) goto <D.18592>; else goto <D.18593>;
        <D.18592>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.18594>; else goto <D.18595>;
        <D.18594>:
        if (__old != __copy) goto <D.18596>; else goto <D.18597>;
        <D.18596>:
        gc_debug_file.42 = gc_debug_file;
        D.18598 = *_objptr;
        fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18598, __old);
        gc_debug_file.42 = gc_debug_file;
        fflush (gc_debug_file.42);
        <D.18597>:
        <D.18595>:
        D.18602 = sgen_ptr_in_nursery (__copy);
        if (D.18602 != 0) goto <D.18603>; else goto <D.18600>;
        <D.18603>:
        D.18604 = sgen_ptr_in_nursery (_objptr);
        if (D.18604 == 0) goto <D.18605>; else goto <D.18600>;
        <D.18605>:
        iftmp.46 = 1;
        goto <D.18601>;
        <D.18600>:
        iftmp.46 = 0;
        <D.18601>:
        D.18606 = iftmp.46 != 0;
        D.18607 = (long int) D.18606;
        D.18608 = __builtin_expect (D.18607, 0);
        if (D.18608 != 0) goto <D.18609>; else goto <D.18610>;
        <D.18609>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.18610>:
        <D.18593>:
      }
      _objptr = _objptr + 4;
    }
    goto <D.17799>;
    <D.17798>:
    {
      int _index;

      _index = __builtin_ctz (_bmap);
      _index.47 = (unsigned int) _index;
      D.18612 = _index.47 * 4;
      _objptr = _objptr + D.18612;
      D.18613 = _index + 1;
      _bmap = _bmap >> D.18613;
      {
        void * __old;
        void * __copy;

        __old = *_objptr;
        if (__old != 0B) goto <D.18614>; else goto <D.18615>;
        <D.18614>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.18616>; else goto <D.18617>;
        <D.18616>:
        if (__old != __copy) goto <D.18618>; else goto <D.18619>;
        <D.18618>:
        gc_debug_file.42 = gc_debug_file;
        D.18598 = *_objptr;
        fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18598, __old);
        gc_debug_file.42 = gc_debug_file;
        fflush (gc_debug_file.42);
        <D.18619>:
        <D.18617>:
        D.18623 = sgen_ptr_in_nursery (__copy);
        if (D.18623 != 0) goto <D.18624>; else goto <D.18621>;
        <D.18624>:
        D.18625 = sgen_ptr_in_nursery (_objptr);
        if (D.18625 == 0) goto <D.18626>; else goto <D.18621>;
        <D.18626>:
        iftmp.48 = 1;
        goto <D.18622>;
        <D.18621>:
        iftmp.48 = 0;
        <D.18622>:
        D.18627 = iftmp.48 != 0;
        D.18628 = (long int) D.18627;
        D.18629 = __builtin_expect (D.18628, 0);
        if (D.18629 != 0) goto <D.18630>; else goto <D.18631>;
        <D.18630>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.18631>:
        <D.18615>:
      }
      _objptr = _objptr + 4;
    }
    <D.17799>:
    if (_bmap != 0) goto <D.17798>; else goto <D.17800>;
    <D.17800>:
  }
  goto <D.17788>;
  <D.17801>:
  D.18632 = desc & 4294950912;
  if (D.18632 != 0) goto <D.18633>; else goto <D.18634>;
  <D.18633>:
  {
    int el_size;
    int etype;

    D.18635 = desc >> 3;
    D.18636 = (int) D.18635;
    el_size = D.18636 & 1023;
    desc.49 = (int) desc;
    etype = desc.49 & 49152;
    if (etype == 16384) goto <D.18638>; else goto <D.18639>;
    <D.18638>:
    {
      void * * p;
      void * * end_refs;

      p = start + 16;
      D.18640 = MEM[(struct MonoArray *)start].max_length;
      el_size.50 = (unsigned int) el_size;
      D.18642 = D.18640 * el_size.50;
      end_refs = p + D.18642;
      goto <D.17809>;
      <D.17808>:
      {
        void * __old;
        void * __copy;

        __old = *p;
        if (__old != 0B) goto <D.18643>; else goto <D.18644>;
        <D.18643>:
        simple_nursery_parallel_copy_object (p, queue);
        __copy = *p;
        if (0 != 0) goto <D.18645>; else goto <D.18646>;
        <D.18645>:
        if (__old != __copy) goto <D.18647>; else goto <D.18648>;
        <D.18647>:
        gc_debug_file.42 = gc_debug_file;
        D.18649 = *p;
        fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", p, D.18649, __old);
        gc_debug_file.42 = gc_debug_file;
        fflush (gc_debug_file.42);
        <D.18648>:
        <D.18646>:
        D.18653 = sgen_ptr_in_nursery (__copy);
        if (D.18653 != 0) goto <D.18654>; else goto <D.18651>;
        <D.18654>:
        D.18655 = sgen_ptr_in_nursery (p);
        if (D.18655 == 0) goto <D.18656>; else goto <D.18651>;
        <D.18656>:
        iftmp.51 = 1;
        goto <D.18652>;
        <D.18651>:
        iftmp.51 = 0;
        <D.18652>:
        D.18657 = iftmp.51 != 0;
        D.18658 = (long int) D.18657;
        D.18659 = __builtin_expect (D.18658, 0);
        if (D.18659 != 0) goto <D.18660>; else goto <D.18661>;
        <D.18660>:
        sgen_add_to_global_remset (p, __copy);
        <D.18661>:
        <D.18644>:
      }
      p = p + 4;
      <D.17809>:
      if (p < end_refs) goto <D.17808>; else goto <D.17810>;
      <D.17810>:
    }
    goto <D.18662>;
    <D.18639>:
    if (etype == 32768) goto <D.18663>; else goto <D.18664>;
    <D.18663>:
    {
      int offset;
      int num_refs;
      char * e_start;
      char * e_end;

      D.18546 = desc >> 16;
      D.18665 = (int) D.18546;
      offset = D.18665 & 255;
      D.18549 = desc >> 24;
      num_refs = (int) D.18549;
      e_start = start + 16;
      D.18640 = MEM[(struct MonoArray *)start].max_length;
      el_size.50 = (unsigned int) el_size;
      D.18642 = D.18640 * el_size.50;
      e_end = e_start + D.18642;
      goto <D.17823>;
      <D.17822>:
      {
        void * * p;
        int i;

        p = e_start;
        offset.52 = (unsigned int) offset;
        D.18667 = offset.52 * 4;
        p = p + D.18667;
        i = 0;
        goto <D.17820>;
        <D.17819>:
        {
          void * __old;
          void * __copy;

          i.53 = (unsigned int) i;
          D.18669 = i.53 * 4;
          D.18670 = p + D.18669;
          __old = *D.18670;
          if (__old != 0B) goto <D.18671>; else goto <D.18672>;
          <D.18671>:
          i.53 = (unsigned int) i;
          D.18669 = i.53 * 4;
          D.18670 = p + D.18669;
          simple_nursery_parallel_copy_object (D.18670, queue);
          i.53 = (unsigned int) i;
          D.18669 = i.53 * 4;
          D.18670 = p + D.18669;
          __copy = *D.18670;
          if (0 != 0) goto <D.18673>; else goto <D.18674>;
          <D.18673>:
          if (__old != __copy) goto <D.18675>; else goto <D.18676>;
          <D.18675>:
          gc_debug_file.42 = gc_debug_file;
          i.53 = (unsigned int) i;
          D.18669 = i.53 * 4;
          D.18670 = p + D.18669;
          i.53 = (unsigned int) i;
          D.18669 = i.53 * 4;
          D.18670 = p + D.18669;
          D.18677 = *D.18670;
          fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", D.18670, D.18677, __old);
          gc_debug_file.42 = gc_debug_file;
          fflush (gc_debug_file.42);
          <D.18676>:
          <D.18674>:
          D.18681 = sgen_ptr_in_nursery (__copy);
          if (D.18681 != 0) goto <D.18682>; else goto <D.18679>;
          <D.18682>:
          i.53 = (unsigned int) i;
          D.18669 = i.53 * 4;
          D.18683 = p + D.18669;
          D.18684 = sgen_ptr_in_nursery (D.18683);
          if (D.18684 == 0) goto <D.18685>; else goto <D.18679>;
          <D.18685>:
          iftmp.54 = 1;
          goto <D.18680>;
          <D.18679>:
          iftmp.54 = 0;
          <D.18680>:
          D.18686 = iftmp.54 != 0;
          D.18687 = (long int) D.18686;
          D.18688 = __builtin_expect (D.18687, 0);
          if (D.18688 != 0) goto <D.18689>; else goto <D.18690>;
          <D.18689>:
          i.53 = (unsigned int) i;
          D.18669 = i.53 * 4;
          D.18691 = p + D.18669;
          sgen_add_to_global_remset (D.18691, __copy);
          <D.18690>:
          <D.18672>:
        }
        i = i + 1;
        <D.17820>:
        if (i < num_refs) goto <D.17819>; else goto <D.17821>;
        <D.17821>:
        el_size.55 = (sizetype) el_size;
        e_start = e_start + el_size.55;
      }
      <D.17823>:
      if (e_start < e_end) goto <D.17822>; else goto <D.17824>;
      <D.17824>:
    }
    goto <D.18693>;
    <D.18664>:
    if (etype == 49152) goto <D.18694>; else goto <D.18695>;
    <D.18694>:
    {
      char * e_start;
      char * e_end;

      e_start = start + 16;
      D.18640 = MEM[(struct MonoArray *)start].max_length;
      el_size.50 = (unsigned int) el_size;
      D.18642 = D.18640 * el_size.50;
      e_end = e_start + D.18642;
      goto <D.17835>;
      <D.17834>:
      {
        void * * p;
        gsize _bmap;

        p = e_start;
        _bmap = desc >> 16;
        goto <D.17832>;
        <D.17831>:
        D.18696 = _bmap & 1;
        if (D.18696 != 0) goto <D.18697>; else goto <D.18698>;
        <D.18697>:
        {
          void * __old;
          void * __copy;

          __old = *p;
          if (__old != 0B) goto <D.18699>; else goto <D.18700>;
          <D.18699>:
          simple_nursery_parallel_copy_object (p, queue);
          __copy = *p;
          if (0 != 0) goto <D.18701>; else goto <D.18702>;
          <D.18701>:
          if (__old != __copy) goto <D.18703>; else goto <D.18704>;
          <D.18703>:
          gc_debug_file.42 = gc_debug_file;
          D.18705 = *p;
          fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", p, D.18705, __old);
          gc_debug_file.42 = gc_debug_file;
          fflush (gc_debug_file.42);
          <D.18704>:
          <D.18702>:
          D.18709 = sgen_ptr_in_nursery (__copy);
          if (D.18709 != 0) goto <D.18710>; else goto <D.18707>;
          <D.18710>:
          D.18711 = sgen_ptr_in_nursery (p);
          if (D.18711 == 0) goto <D.18712>; else goto <D.18707>;
          <D.18712>:
          iftmp.56 = 1;
          goto <D.18708>;
          <D.18707>:
          iftmp.56 = 0;
          <D.18708>:
          D.18713 = iftmp.56 != 0;
          D.18714 = (long int) D.18713;
          D.18715 = __builtin_expect (D.18714, 0);
          if (D.18715 != 0) goto <D.18716>; else goto <D.18717>;
          <D.18716>:
          sgen_add_to_global_remset (p, __copy);
          <D.18717>:
          <D.18700>:
        }
        <D.18698>:
        _bmap = _bmap >> 1;
        p = p + 4;
        <D.17832>:
        if (_bmap != 0) goto <D.17831>; else goto <D.17833>;
        <D.17833>:
        el_size.55 = (sizetype) el_size;
        e_start = e_start + el_size.55;
      }
      <D.17835>:
      if (e_start < e_end) goto <D.17834>; else goto <D.17836>;
      <D.17836>:
    }
    <D.18695>:
    <D.18693>:
    <D.18662>:
  }
  <D.18634>:
  goto <D.17788>;
  <D.17837>:
  {
    void * * _objptr;
    gsize _bmap;

    _objptr = start;
    _bmap = desc >> 3;
    _objptr = _objptr + 8;
    goto <D.17843>;
    <D.17842>:
    D.18718 = _bmap & 1;
    if (D.18718 != 0) goto <D.18719>; else goto <D.18720>;
    <D.18719>:
    {
      void * __old;
      void * __copy;

      __old = *_objptr;
      if (__old != 0B) goto <D.18721>; else goto <D.18722>;
      <D.18721>:
      simple_nursery_parallel_copy_object (_objptr, queue);
      __copy = *_objptr;
      if (0 != 0) goto <D.18723>; else goto <D.18724>;
      <D.18723>:
      if (__old != __copy) goto <D.18725>; else goto <D.18726>;
      <D.18725>:
      gc_debug_file.42 = gc_debug_file;
      D.18727 = *_objptr;
      fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18727, __old);
      gc_debug_file.42 = gc_debug_file;
      fflush (gc_debug_file.42);
      <D.18726>:
      <D.18724>:
      D.18731 = sgen_ptr_in_nursery (__copy);
      if (D.18731 != 0) goto <D.18732>; else goto <D.18729>;
      <D.18732>:
      D.18733 = sgen_ptr_in_nursery (_objptr);
      if (D.18733 == 0) goto <D.18734>; else goto <D.18729>;
      <D.18734>:
      iftmp.57 = 1;
      goto <D.18730>;
      <D.18729>:
      iftmp.57 = 0;
      <D.18730>:
      D.18735 = iftmp.57 != 0;
      D.18736 = (long int) D.18735;
      D.18737 = __builtin_expect (D.18736, 0);
      if (D.18737 != 0) goto <D.18738>; else goto <D.18739>;
      <D.18738>:
      sgen_add_to_global_remset (_objptr, __copy);
      <D.18739>:
      <D.18722>:
    }
    <D.18720>:
    _bmap = _bmap >> 1;
    _objptr = _objptr + 4;
    <D.17843>:
    if (_bmap != 0) goto <D.17842>; else goto <D.17844>;
    <D.17844>:
  }
  goto <D.17788>;
  <D.17845>:
  {
    void * * _objptr;
    gsize * bitmap_data;
    int bwords;
    void * * start_run;

    _objptr = start;
    bitmap_data = sgen_get_complex_descriptor (desc);
    D.18740 = *bitmap_data;
    D.18741 = D.18740 + 4294967295;
    bwords = (int) D.18741;
    start_run = _objptr;
    bitmap_data = bitmap_data + 4;
    if (0 != 0) goto <D.18742>; else goto <D.18743>;
    <D.18742>:
    {
      struct MonoObject * myobj;

      myobj = start;
      D.18744 = myobj->vtable;
      D.18745 = D.18744->klass;
      D.18746 = D.18745->name_space;
      D.18744 = myobj->vtable;
      D.18745 = D.18744->klass;
      D.18747 = D.18745->name;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.18746, D.18747);
    }
    <D.18743>:
    goto <D.17858>;
    <D.17857>:
    {
      gsize _bmap;

      bitmap_data.58 = bitmap_data;
      bitmap_data = bitmap_data.58 + 4;
      _bmap = *bitmap_data.58;
      _objptr = start_run;
      goto <D.17855>;
      <D.17854>:
      D.18749 = _bmap & 1;
      if (D.18749 != 0) goto <D.18750>; else goto <D.18751>;
      <D.18750>:
      {
        void * __old;
        void * __copy;

        __old = *_objptr;
        if (__old != 0B) goto <D.18752>; else goto <D.18753>;
        <D.18752>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.18754>; else goto <D.18755>;
        <D.18754>:
        if (__old != __copy) goto <D.18756>; else goto <D.18757>;
        <D.18756>:
        gc_debug_file.42 = gc_debug_file;
        D.18758 = *_objptr;
        fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18758, __old);
        gc_debug_file.42 = gc_debug_file;
        fflush (gc_debug_file.42);
        <D.18757>:
        <D.18755>:
        D.18762 = sgen_ptr_in_nursery (__copy);
        if (D.18762 != 0) goto <D.18763>; else goto <D.18760>;
        <D.18763>:
        D.18764 = sgen_ptr_in_nursery (_objptr);
        if (D.18764 == 0) goto <D.18765>; else goto <D.18760>;
        <D.18765>:
        iftmp.59 = 1;
        goto <D.18761>;
        <D.18760>:
        iftmp.59 = 0;
        <D.18761>:
        D.18766 = iftmp.59 != 0;
        D.18767 = (long int) D.18766;
        D.18768 = __builtin_expect (D.18767, 0);
        if (D.18768 != 0) goto <D.18769>; else goto <D.18770>;
        <D.18769>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.18770>:
        <D.18753>:
      }
      <D.18751>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 4;
      <D.17855>:
      if (_bmap != 0) goto <D.17854>; else goto <D.17856>;
      <D.17856>:
      start_run = start_run + 128;
    }
    <D.17858>:
    bwords.60 = bwords;
    bwords = bwords.60 + -1;
    if (bwords.60 > 0) goto <D.17857>; else goto <D.17859>;
    <D.17859>:
  }
  goto <D.17788>;
  <D.17860>:
  goto <D.17788>;
  <D.17861>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
  <D.17788>:
}


simple_nursery_parallel_scan_object (char * start, struct SgenGrayQueue * queue)
{
  unsigned int D.18773;
  unsigned int D.18774;
  unsigned int D.18775;
  unsigned int D.18776;
  unsigned int D.18779;
  unsigned int D.18780;
  unsigned int D.18781;
  unsigned int D.18782;
  unsigned int D.18783;
  struct FILE * gc_debug_file.61;
  void * D.18791;
  int iftmp.62;
  int D.18795;
  int D.18797;
  _Bool D.18799;
  long int D.18800;
  long int D.18801;
  int iftmp.63;
  int D.18813;
  int D.18815;
  _Bool D.18817;
  long int D.18818;
  long int D.18819;
  unsigned int _index.64;
  unsigned int D.18823;
  int D.18824;
  void * D.18831;
  int iftmp.65;
  int D.18835;
  int D.18837;
  _Bool D.18839;
  long int D.18840;
  long int D.18841;
  unsigned int _index.66;
  unsigned int D.18845;
  int D.18846;
  int iftmp.67;
  int D.18856;
  int D.18858;
  _Bool D.18860;
  long int D.18861;
  long int D.18862;
  unsigned int D.18865;
  unsigned int D.18868;
  int D.18869;
  int desc.68;
  unsigned int D.18873;
  unsigned int el_size.69;
  unsigned int D.18875;
  void * D.18882;
  int iftmp.70;
  int D.18886;
  int D.18888;
  _Bool D.18890;
  long int D.18891;
  long int D.18892;
  int D.18898;
  unsigned int offset.71;
  unsigned int D.18900;
  unsigned int i.72;
  unsigned int D.18902;
  void * * D.18903;
  void * D.18910;
  int iftmp.73;
  int D.18914;
  void * D.18916;
  int D.18917;
  _Bool D.18919;
  long int D.18920;
  long int D.18921;
  void * D.18924;
  sizetype el_size.74;
  unsigned int D.18929;
  void * D.18938;
  int iftmp.75;
  int D.18942;
  int D.18944;
  _Bool D.18946;
  long int D.18947;
  long int D.18948;
  unsigned int D.18951;
  void * D.18960;
  int iftmp.76;
  int D.18964;
  int D.18966;
  _Bool D.18968;
  long int D.18969;
  long int D.18970;
  unsigned int D.18973;
  unsigned int D.18974;
  struct MonoVTable * D.18977;
  struct MonoClass * D.18978;
  const char * D.18979;
  const char * D.18980;
  gsize * bitmap_data.77;
  unsigned int D.18982;
  void * D.18991;
  int iftmp.78;
  int D.18995;
  int D.18997;
  _Bool D.18999;
  long int D.19000;
  long int D.19001;
  int bwords.79;
  unsigned int D.19005;
  gsize * mbitmap_data.80;
  unsigned int D.19007;
  unsigned int D.19008;
  struct MonoClass * D.19009;
  unsigned int el_size.81;
  unsigned int D.19011;
  const char * D.19014;
  const char * D.19015;
  gsize * bitmap_data.82;
  unsigned int D.19017;
  void * D.19026;
  int iftmp.83;
  int D.19030;
  int D.19032;
  _Bool D.19034;
  long int D.19035;
  long int D.19036;
  unsigned int bwords.84;
  sizetype el_size.85;

  {
    struct GCVTable * vt;
    mword desc;

    D.18773 = MEM[(mword *)start];
    D.18774 = D.18773 & 4294967292;
    vt = (struct GCVTable *) D.18774;
    desc = vt->desc;
    D.18775 = desc & 7;
    switch (D.18775) <default: <D.17772>, case 1: <D.17667>, case 2: <D.17678>, case 3: <D.17734>, case 4: <D.17690>, case 5: <D.17726>, case 6: <D.17749>, case 7: <D.17771>>
    <D.17667>:
    D.18776 = desc & 4294901760;
    if (D.18776 != 0) goto <D.18777>; else goto <D.18778>;
    <D.18777>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.18779 = desc >> 16;
      D.18780 = D.18779 & 255;
      D.18781 = D.18780 * 4;
      _objptr = _objptr + D.18781;
      D.18782 = desc >> 24;
      D.18783 = D.18782 * 4;
      _objptr_end = _objptr + D.18783;
      {
        void * __old;
        void * __copy;

        __old = *_objptr;
        if (__old != 0B) goto <D.18784>; else goto <D.18785>;
        <D.18784>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.18786>; else goto <D.18787>;
        <D.18786>:
        if (__old != __copy) goto <D.18788>; else goto <D.18789>;
        <D.18788>:
        gc_debug_file.61 = gc_debug_file;
        D.18791 = *_objptr;
        fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18791, __old);
        gc_debug_file.61 = gc_debug_file;
        fflush (gc_debug_file.61);
        <D.18789>:
        <D.18787>:
        D.18795 = sgen_ptr_in_nursery (__copy);
        if (D.18795 != 0) goto <D.18796>; else goto <D.18793>;
        <D.18796>:
        D.18797 = sgen_ptr_in_nursery (_objptr);
        if (D.18797 == 0) goto <D.18798>; else goto <D.18793>;
        <D.18798>:
        iftmp.62 = 1;
        goto <D.18794>;
        <D.18793>:
        iftmp.62 = 0;
        <D.18794>:
        D.18799 = iftmp.62 != 0;
        D.18800 = (long int) D.18799;
        D.18801 = __builtin_expect (D.18800, 0);
        if (D.18801 != 0) goto <D.18802>; else goto <D.18803>;
        <D.18802>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.18803>:
        <D.18785>:
      }
      _objptr = _objptr + 4;
      goto <D.17675>;
      <D.17674>:
      {
        void * __old;
        void * __copy;

        __old = *_objptr;
        if (__old != 0B) goto <D.18804>; else goto <D.18805>;
        <D.18804>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.18806>; else goto <D.18807>;
        <D.18806>:
        if (__old != __copy) goto <D.18808>; else goto <D.18809>;
        <D.18808>:
        gc_debug_file.61 = gc_debug_file;
        D.18791 = *_objptr;
        fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18791, __old);
        gc_debug_file.61 = gc_debug_file;
        fflush (gc_debug_file.61);
        <D.18809>:
        <D.18807>:
        D.18813 = sgen_ptr_in_nursery (__copy);
        if (D.18813 != 0) goto <D.18814>; else goto <D.18811>;
        <D.18814>:
        D.18815 = sgen_ptr_in_nursery (_objptr);
        if (D.18815 == 0) goto <D.18816>; else goto <D.18811>;
        <D.18816>:
        iftmp.63 = 1;
        goto <D.18812>;
        <D.18811>:
        iftmp.63 = 0;
        <D.18812>:
        D.18817 = iftmp.63 != 0;
        D.18818 = (long int) D.18817;
        D.18819 = __builtin_expect (D.18818, 0);
        if (D.18819 != 0) goto <D.18820>; else goto <D.18821>;
        <D.18820>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.18821>:
        <D.18805>:
      }
      _objptr = _objptr + 4;
      <D.17675>:
      if (_objptr < _objptr_end) goto <D.17674>; else goto <D.17676>;
      <D.17676>:
    }
    <D.18778>:
    goto <D.17677>;
    <D.17678>:
    {
      void * * _objptr;
      gsize _bmap;

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

        _index = __builtin_ctz (_bmap);
        _index.64 = (unsigned int) _index;
        D.18823 = _index.64 * 4;
        _objptr = _objptr + D.18823;
        D.18824 = _index + 1;
        _bmap = _bmap >> D.18824;
        {
          void * __old;
          void * __copy;

          __old = *_objptr;
          if (__old != 0B) goto <D.18825>; else goto <D.18826>;
          <D.18825>:
          simple_nursery_parallel_copy_object (_objptr, queue);
          __copy = *_objptr;
          if (0 != 0) goto <D.18827>; else goto <D.18828>;
          <D.18827>:
          if (__old != __copy) goto <D.18829>; else goto <D.18830>;
          <D.18829>:
          gc_debug_file.61 = gc_debug_file;
          D.18831 = *_objptr;
          fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18831, __old);
          gc_debug_file.61 = gc_debug_file;
          fflush (gc_debug_file.61);
          <D.18830>:
          <D.18828>:
          D.18835 = sgen_ptr_in_nursery (__copy);
          if (D.18835 != 0) goto <D.18836>; else goto <D.18833>;
          <D.18836>:
          D.18837 = sgen_ptr_in_nursery (_objptr);
          if (D.18837 == 0) goto <D.18838>; else goto <D.18833>;
          <D.18838>:
          iftmp.65 = 1;
          goto <D.18834>;
          <D.18833>:
          iftmp.65 = 0;
          <D.18834>:
          D.18839 = iftmp.65 != 0;
          D.18840 = (long int) D.18839;
          D.18841 = __builtin_expect (D.18840, 0);
          if (D.18841 != 0) goto <D.18842>; else goto <D.18843>;
          <D.18842>:
          sgen_add_to_global_remset (_objptr, __copy);
          <D.18843>:
          <D.18826>:
        }
        _objptr = _objptr + 4;
      }
      goto <D.17688>;
      <D.17687>:
      {
        int _index;

        _index = __builtin_ctz (_bmap);
        _index.66 = (unsigned int) _index;
        D.18845 = _index.66 * 4;
        _objptr = _objptr + D.18845;
        D.18846 = _index + 1;
        _bmap = _bmap >> D.18846;
        {
          void * __old;
          void * __copy;

          __old = *_objptr;
          if (__old != 0B) goto <D.18847>; else goto <D.18848>;
          <D.18847>:
          simple_nursery_parallel_copy_object (_objptr, queue);
          __copy = *_objptr;
          if (0 != 0) goto <D.18849>; else goto <D.18850>;
          <D.18849>:
          if (__old != __copy) goto <D.18851>; else goto <D.18852>;
          <D.18851>:
          gc_debug_file.61 = gc_debug_file;
          D.18831 = *_objptr;
          fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18831, __old);
          gc_debug_file.61 = gc_debug_file;
          fflush (gc_debug_file.61);
          <D.18852>:
          <D.18850>:
          D.18856 = sgen_ptr_in_nursery (__copy);
          if (D.18856 != 0) goto <D.18857>; else goto <D.18854>;
          <D.18857>:
          D.18858 = sgen_ptr_in_nursery (_objptr);
          if (D.18858 == 0) goto <D.18859>; else goto <D.18854>;
          <D.18859>:
          iftmp.67 = 1;
          goto <D.18855>;
          <D.18854>:
          iftmp.67 = 0;
          <D.18855>:
          D.18860 = iftmp.67 != 0;
          D.18861 = (long int) D.18860;
          D.18862 = __builtin_expect (D.18861, 0);
          if (D.18862 != 0) goto <D.18863>; else goto <D.18864>;
          <D.18863>:
          sgen_add_to_global_remset (_objptr, __copy);
          <D.18864>:
          <D.18848>:
        }
        _objptr = _objptr + 4;
      }
      <D.17688>:
      if (_bmap != 0) goto <D.17687>; else goto <D.17689>;
      <D.17689>:
    }
    goto <D.17677>;
    <D.17690>:
    D.18865 = desc & 4294950912;
    if (D.18865 != 0) goto <D.18866>; else goto <D.18867>;
    <D.18866>:
    {
      int el_size;
      int etype;

      D.18868 = desc >> 3;
      D.18869 = (int) D.18868;
      el_size = D.18869 & 1023;
      desc.68 = (int) desc;
      etype = desc.68 & 49152;
      if (etype == 16384) goto <D.18871>; else goto <D.18872>;
      <D.18871>:
      {
        void * * p;
        void * * end_refs;

        p = start + 16;
        D.18873 = MEM[(struct MonoArray *)start].max_length;
        el_size.69 = (unsigned int) el_size;
        D.18875 = D.18873 * el_size.69;
        end_refs = p + D.18875;
        goto <D.17698>;
        <D.17697>:
        {
          void * __old;
          void * __copy;

          __old = *p;
          if (__old != 0B) goto <D.18876>; else goto <D.18877>;
          <D.18876>:
          simple_nursery_parallel_copy_object (p, queue);
          __copy = *p;
          if (0 != 0) goto <D.18878>; else goto <D.18879>;
          <D.18878>:
          if (__old != __copy) goto <D.18880>; else goto <D.18881>;
          <D.18880>:
          gc_debug_file.61 = gc_debug_file;
          D.18882 = *p;
          fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", p, D.18882, __old);
          gc_debug_file.61 = gc_debug_file;
          fflush (gc_debug_file.61);
          <D.18881>:
          <D.18879>:
          D.18886 = sgen_ptr_in_nursery (__copy);
          if (D.18886 != 0) goto <D.18887>; else goto <D.18884>;
          <D.18887>:
          D.18888 = sgen_ptr_in_nursery (p);
          if (D.18888 == 0) goto <D.18889>; else goto <D.18884>;
          <D.18889>:
          iftmp.70 = 1;
          goto <D.18885>;
          <D.18884>:
          iftmp.70 = 0;
          <D.18885>:
          D.18890 = iftmp.70 != 0;
          D.18891 = (long int) D.18890;
          D.18892 = __builtin_expect (D.18891, 0);
          if (D.18892 != 0) goto <D.18893>; else goto <D.18894>;
          <D.18893>:
          sgen_add_to_global_remset (p, __copy);
          <D.18894>:
          <D.18877>:
        }
        p = p + 4;
        <D.17698>:
        if (p < end_refs) goto <D.17697>; else goto <D.17699>;
        <D.17699>:
      }
      goto <D.18895>;
      <D.18872>:
      if (etype == 32768) goto <D.18896>; else goto <D.18897>;
      <D.18896>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.18779 = desc >> 16;
        D.18898 = (int) D.18779;
        offset = D.18898 & 255;
        D.18782 = desc >> 24;
        num_refs = (int) D.18782;
        e_start = start + 16;
        D.18873 = MEM[(struct MonoArray *)start].max_length;
        el_size.69 = (unsigned int) el_size;
        D.18875 = D.18873 * el_size.69;
        e_end = e_start + D.18875;
        goto <D.17712>;
        <D.17711>:
        {
          void * * p;
          int i;

          p = e_start;
          offset.71 = (unsigned int) offset;
          D.18900 = offset.71 * 4;
          p = p + D.18900;
          i = 0;
          goto <D.17709>;
          <D.17708>:
          {
            void * __old;
            void * __copy;

            i.72 = (unsigned int) i;
            D.18902 = i.72 * 4;
            D.18903 = p + D.18902;
            __old = *D.18903;
            if (__old != 0B) goto <D.18904>; else goto <D.18905>;
            <D.18904>:
            i.72 = (unsigned int) i;
            D.18902 = i.72 * 4;
            D.18903 = p + D.18902;
            simple_nursery_parallel_copy_object (D.18903, queue);
            i.72 = (unsigned int) i;
            D.18902 = i.72 * 4;
            D.18903 = p + D.18902;
            __copy = *D.18903;
            if (0 != 0) goto <D.18906>; else goto <D.18907>;
            <D.18906>:
            if (__old != __copy) goto <D.18908>; else goto <D.18909>;
            <D.18908>:
            gc_debug_file.61 = gc_debug_file;
            i.72 = (unsigned int) i;
            D.18902 = i.72 * 4;
            D.18903 = p + D.18902;
            i.72 = (unsigned int) i;
            D.18902 = i.72 * 4;
            D.18903 = p + D.18902;
            D.18910 = *D.18903;
            fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", D.18903, D.18910, __old);
            gc_debug_file.61 = gc_debug_file;
            fflush (gc_debug_file.61);
            <D.18909>:
            <D.18907>:
            D.18914 = sgen_ptr_in_nursery (__copy);
            if (D.18914 != 0) goto <D.18915>; else goto <D.18912>;
            <D.18915>:
            i.72 = (unsigned int) i;
            D.18902 = i.72 * 4;
            D.18916 = p + D.18902;
            D.18917 = sgen_ptr_in_nursery (D.18916);
            if (D.18917 == 0) goto <D.18918>; else goto <D.18912>;
            <D.18918>:
            iftmp.73 = 1;
            goto <D.18913>;
            <D.18912>:
            iftmp.73 = 0;
            <D.18913>:
            D.18919 = iftmp.73 != 0;
            D.18920 = (long int) D.18919;
            D.18921 = __builtin_expect (D.18920, 0);
            if (D.18921 != 0) goto <D.18922>; else goto <D.18923>;
            <D.18922>:
            i.72 = (unsigned int) i;
            D.18902 = i.72 * 4;
            D.18924 = p + D.18902;
            sgen_add_to_global_remset (D.18924, __copy);
            <D.18923>:
            <D.18905>:
          }
          i = i + 1;
          <D.17709>:
          if (i < num_refs) goto <D.17708>; else goto <D.17710>;
          <D.17710>:
          el_size.74 = (sizetype) el_size;
          e_start = e_start + el_size.74;
        }
        <D.17712>:
        if (e_start < e_end) goto <D.17711>; else goto <D.17713>;
        <D.17713>:
      }
      goto <D.18926>;
      <D.18897>:
      if (etype == 49152) goto <D.18927>; else goto <D.18928>;
      <D.18927>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 16;
        D.18873 = MEM[(struct MonoArray *)start].max_length;
        el_size.69 = (unsigned int) el_size;
        D.18875 = D.18873 * el_size.69;
        e_end = e_start + D.18875;
        goto <D.17724>;
        <D.17723>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.17721>;
          <D.17720>:
          D.18929 = _bmap & 1;
          if (D.18929 != 0) goto <D.18930>; else goto <D.18931>;
          <D.18930>:
          {
            void * __old;
            void * __copy;

            __old = *p;
            if (__old != 0B) goto <D.18932>; else goto <D.18933>;
            <D.18932>:
            simple_nursery_parallel_copy_object (p, queue);
            __copy = *p;
            if (0 != 0) goto <D.18934>; else goto <D.18935>;
            <D.18934>:
            if (__old != __copy) goto <D.18936>; else goto <D.18937>;
            <D.18936>:
            gc_debug_file.61 = gc_debug_file;
            D.18938 = *p;
            fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", p, D.18938, __old);
            gc_debug_file.61 = gc_debug_file;
            fflush (gc_debug_file.61);
            <D.18937>:
            <D.18935>:
            D.18942 = sgen_ptr_in_nursery (__copy);
            if (D.18942 != 0) goto <D.18943>; else goto <D.18940>;
            <D.18943>:
            D.18944 = sgen_ptr_in_nursery (p);
            if (D.18944 == 0) goto <D.18945>; else goto <D.18940>;
            <D.18945>:
            iftmp.75 = 1;
            goto <D.18941>;
            <D.18940>:
            iftmp.75 = 0;
            <D.18941>:
            D.18946 = iftmp.75 != 0;
            D.18947 = (long int) D.18946;
            D.18948 = __builtin_expect (D.18947, 0);
            if (D.18948 != 0) goto <D.18949>; else goto <D.18950>;
            <D.18949>:
            sgen_add_to_global_remset (p, __copy);
            <D.18950>:
            <D.18933>:
          }
          <D.18931>:
          _bmap = _bmap >> 1;
          p = p + 4;
          <D.17721>:
          if (_bmap != 0) goto <D.17720>; else goto <D.17722>;
          <D.17722>:
          el_size.74 = (sizetype) el_size;
          e_start = e_start + el_size.74;
        }
        <D.17724>:
        if (e_start < e_end) goto <D.17723>; else goto <D.17725>;
        <D.17725>:
      }
      <D.18928>:
      <D.18926>:
      <D.18895>:
    }
    <D.18867>:
    goto <D.17677>;
    <D.17726>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 8;
      goto <D.17732>;
      <D.17731>:
      D.18951 = _bmap & 1;
      if (D.18951 != 0) goto <D.18952>; else goto <D.18953>;
      <D.18952>:
      {
        void * __old;
        void * __copy;

        __old = *_objptr;
        if (__old != 0B) goto <D.18954>; else goto <D.18955>;
        <D.18954>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.18956>; else goto <D.18957>;
        <D.18956>:
        if (__old != __copy) goto <D.18958>; else goto <D.18959>;
        <D.18958>:
        gc_debug_file.61 = gc_debug_file;
        D.18960 = *_objptr;
        fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18960, __old);
        gc_debug_file.61 = gc_debug_file;
        fflush (gc_debug_file.61);
        <D.18959>:
        <D.18957>:
        D.18964 = sgen_ptr_in_nursery (__copy);
        if (D.18964 != 0) goto <D.18965>; else goto <D.18962>;
        <D.18965>:
        D.18966 = sgen_ptr_in_nursery (_objptr);
        if (D.18966 == 0) goto <D.18967>; else goto <D.18962>;
        <D.18967>:
        iftmp.76 = 1;
        goto <D.18963>;
        <D.18962>:
        iftmp.76 = 0;
        <D.18963>:
        D.18968 = iftmp.76 != 0;
        D.18969 = (long int) D.18968;
        D.18970 = __builtin_expect (D.18969, 0);
        if (D.18970 != 0) goto <D.18971>; else goto <D.18972>;
        <D.18971>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.18972>:
        <D.18955>:
      }
      <D.18953>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 4;
      <D.17732>:
      if (_bmap != 0) goto <D.17731>; else goto <D.17733>;
      <D.17733>:
    }
    goto <D.17677>;
    <D.17734>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.18973 = *bitmap_data;
      D.18974 = D.18973 + 4294967295;
      bwords = (int) D.18974;
      start_run = _objptr;
      bitmap_data = bitmap_data + 4;
      if (0 != 0) goto <D.18975>; else goto <D.18976>;
      <D.18975>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.18977 = myobj->vtable;
        D.18978 = D.18977->klass;
        D.18979 = D.18978->name_space;
        D.18977 = myobj->vtable;
        D.18978 = D.18977->klass;
        D.18980 = D.18978->name;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.18979, D.18980);
      }
      <D.18976>:
      goto <D.17747>;
      <D.17746>:
      {
        gsize _bmap;

        bitmap_data.77 = bitmap_data;
        bitmap_data = bitmap_data.77 + 4;
        _bmap = *bitmap_data.77;
        _objptr = start_run;
        goto <D.17744>;
        <D.17743>:
        D.18982 = _bmap & 1;
        if (D.18982 != 0) goto <D.18983>; else goto <D.18984>;
        <D.18983>:
        {
          void * __old;
          void * __copy;

          __old = *_objptr;
          if (__old != 0B) goto <D.18985>; else goto <D.18986>;
          <D.18985>:
          simple_nursery_parallel_copy_object (_objptr, queue);
          __copy = *_objptr;
          if (0 != 0) goto <D.18987>; else goto <D.18988>;
          <D.18987>:
          if (__old != __copy) goto <D.18989>; else goto <D.18990>;
          <D.18989>:
          gc_debug_file.61 = gc_debug_file;
          D.18991 = *_objptr;
          fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18991, __old);
          gc_debug_file.61 = gc_debug_file;
          fflush (gc_debug_file.61);
          <D.18990>:
          <D.18988>:
          D.18995 = sgen_ptr_in_nursery (__copy);
          if (D.18995 != 0) goto <D.18996>; else goto <D.18993>;
          <D.18996>:
          D.18997 = sgen_ptr_in_nursery (_objptr);
          if (D.18997 == 0) goto <D.18998>; else goto <D.18993>;
          <D.18998>:
          iftmp.78 = 1;
          goto <D.18994>;
          <D.18993>:
          iftmp.78 = 0;
          <D.18994>:
          D.18999 = iftmp.78 != 0;
          D.19000 = (long int) D.18999;
          D.19001 = __builtin_expect (D.19000, 0);
          if (D.19001 != 0) goto <D.19002>; else goto <D.19003>;
          <D.19002>:
          sgen_add_to_global_remset (_objptr, __copy);
          <D.19003>:
          <D.18986>:
        }
        <D.18984>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 4;
        <D.17744>:
        if (_bmap != 0) goto <D.17743>; else goto <D.17745>;
        <D.17745>:
        start_run = start_run + 128;
      }
      <D.17747>:
      bwords.79 = bwords;
      bwords = bwords.79 + -1;
      if (bwords.79 > 0) goto <D.17746>; else goto <D.17748>;
      <D.17748>:
    }
    goto <D.17677>;
    <D.17749>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.19005 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.19005);
      mbitmap_data.80 = mbitmap_data;
      mbitmap_data = mbitmap_data.80 + 4;
      D.19007 = *mbitmap_data.80;
      D.19008 = D.19007 + 4294967295;
      mbwords = (int) D.19008;
      D.19009 = vt->klass;
      el_size = mono_array_element_size (D.19009);
      e_start = start + 16;
      D.18873 = MEM[(struct MonoArray *)start].max_length;
      el_size.81 = (unsigned int) el_size;
      D.19011 = D.18873 * el_size.81;
      e_end = e_start + D.19011;
      if (0 != 0) goto <D.19012>; else goto <D.19013>;
      <D.19012>:
      D.19005 = vt->desc;
      D.19009 = vt->klass;
      D.19014 = D.19009->name_space;
      D.19009 = vt->klass;
      D.19015 = D.19009->name;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.19005, D.19014, D.19015);
      <D.19013>:
      goto <D.17769>;
      <D.17768>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

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

          bitmap_data.82 = bitmap_data;
          bitmap_data = bitmap_data.82 + 4;
          _bmap = *bitmap_data.82;
          start_run = _objptr;
          goto <D.17763>;
          <D.17762>:
          D.19017 = _bmap & 1;
          if (D.19017 != 0) goto <D.19018>; else goto <D.19019>;
          <D.19018>:
          {
            void * __old;
            void * __copy;

            __old = *_objptr;
            if (__old != 0B) goto <D.19020>; else goto <D.19021>;
            <D.19020>:
            simple_nursery_parallel_copy_object (_objptr, queue);
            __copy = *_objptr;
            if (0 != 0) goto <D.19022>; else goto <D.19023>;
            <D.19022>:
            if (__old != __copy) goto <D.19024>; else goto <D.19025>;
            <D.19024>:
            gc_debug_file.61 = gc_debug_file;
            D.19026 = *_objptr;
            fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.19026, __old);
            gc_debug_file.61 = gc_debug_file;
            fflush (gc_debug_file.61);
            <D.19025>:
            <D.19023>:
            D.19030 = sgen_ptr_in_nursery (__copy);
            if (D.19030 != 0) goto <D.19031>; else goto <D.19028>;
            <D.19031>:
            D.19032 = sgen_ptr_in_nursery (_objptr);
            if (D.19032 == 0) goto <D.19033>; else goto <D.19028>;
            <D.19033>:
            iftmp.83 = 1;
            goto <D.19029>;
            <D.19028>:
            iftmp.83 = 0;
            <D.19029>:
            D.19034 = iftmp.83 != 0;
            D.19035 = (long int) D.19034;
            D.19036 = __builtin_expect (D.19035, 0);
            if (D.19036 != 0) goto <D.19037>; else goto <D.19038>;
            <D.19037>:
            sgen_add_to_global_remset (_objptr, __copy);
            <D.19038>:
            <D.19021>:
          }
          <D.19019>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 4;
          <D.17763>:
          if (_bmap != 0) goto <D.17762>; else goto <D.17764>;
          <D.17764>:
          _objptr = start_run + 128;
        }
        <D.17766>:
        bwords.84 = bwords;
        bwords = bwords.84 + 4294967295;
        if (bwords.84 != 0) goto <D.17765>; else goto <D.17767>;
        <D.17767>:
        el_size.85 = (sizetype) el_size;
        e_start = e_start + el_size.85;
      }
      <D.17769>:
      if (e_start < e_end) goto <D.17768>; else goto <D.17770>;
      <D.17770>:
    }
    goto <D.17677>;
    <D.17771>:
    goto <D.17677>;
    <D.17772>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.17677>:
  }
}


simple_nursery_parallel_copy_object (void * * obj_slot, struct SgenGrayQueue * queue)
{
  int current_collection_generation.86;
  int D.19045;
  unsigned int D.19048;
  unsigned int D.19049;
  unsigned int D.19052;
  int D.19055;
  unsigned int D.19058;
  unsigned int D.19059;
  void * D.19060;
  unsigned int D.19061;
  _Bool D.19062;
  long int D.19063;
  long int D.19064;
  unsigned int destination.87;
  unsigned int D.19068;
  void * D.19069;
  void * D.19070;
  struct SgenGrayQueue * iftmp.88;
  int D.19078;
  _Bool D.19082;
  long int D.19083;
  long int D.19084;
  char * obj;
  mword vtable_word;
  mword objsize;
  struct MonoVTable * vt;
  void * destination;
  gboolean has_references;

  obj = *obj_slot;
  if (0 != 0) goto <D.19042>; else goto <D.19043>;
  <D.19042>:
  current_collection_generation.86 = current_collection_generation;
  monoeg_g_log (0B, 4, "calling minor-par-copy from a %d generation collection", current_collection_generation.86);
  <D.17659>:
  goto <D.17659>;
  <D.19043>:
  D.19045 = sgen_ptr_in_nursery (obj);
  if (D.19045 == 0) goto <D.19046>; else goto <D.19047>;
  <D.19046>:
  return;
  <D.19047>:
  vtable_word = MEM[(mword *)obj];
  D.19048 = vtable_word & 4294967292;
  vt = (struct MonoVTable *) D.19048;
  D.19049 = vtable_word & 1;
  if (D.19049 != 0) goto <D.19050>; else goto <D.19051>;
  <D.19050>:
  *obj_slot = vt;
  return;
  <D.19051>:
  D.19052 = vtable_word & 2;
  if (D.19052 != 0) goto <D.19053>; else goto <D.19054>;
  <D.19053>:
  return;
  <D.19054>:
  D.19055 = sgen_nursery_is_to_space (obj);
  if (D.19055 != 0) goto <D.19056>; else goto <D.19057>;
  <D.19056>:
  return;
  <D.19057>:
  D.19058 = sgen_par_object_get_size (vt, obj);
  D.19059 = D.19058 + 7;
  objsize = D.19059 & 4294967288;
  D.19060 = vt->gc_descr;
  D.19061 = (unsigned int) D.19060;
  has_references = sgen_gc_descr_has_references (D.19061);
  destination = par_alloc_for_promotion (vt, obj, objsize, has_references);
  D.19062 = destination == 0B;
  D.19063 = (long int) D.19062;
  D.19064 = __builtin_expect (D.19063, 0);
  if (D.19064 != 0) goto <D.19065>; else goto <D.19066>;
  <D.19065>:
  sgen_parallel_pin_or_update (obj_slot, obj, vt, queue);
  return;
  <D.19066>:
  MEM[(struct MonoVTable * *)destination] = vt;
  destination.87 = (unsigned int) destination;
  D.19068 = destination.87 | 1;
  D.19069 = (void *) D.19068;
  D.19070 = InterlockedCompareExchangePointer (obj, D.19069, vt);
  if (D.19070 == vt) goto <D.19071>; else goto <D.19072>;
  <D.19071>:
  if (has_references != 0) goto <D.19074>; else goto <D.19075>;
  <D.19074>:
  iftmp.88 = queue;
  goto <D.19076>;
  <D.19075>:
  iftmp.88 = 0B;
  <D.19076>:
  par_copy_object_no_checks (destination, vt, obj, objsize, iftmp.88);
  obj = destination;
  *obj_slot = obj;
  goto <D.19077>;
  <D.19072>:
  D.19078 = sgen_ptr_in_nursery (destination);
  if (D.19078 == 0) goto <D.19079>; else goto <D.19080>;
  <D.19079>:
  MEM[(void * *)destination] = 0B;
  goto <D.19081>;
  <D.19080>:
  memset (destination, 0, objsize);
  <D.19081>:
  vtable_word = MEM[(mword *)obj];
  D.19049 = vtable_word & 1;
  D.19082 = D.19049 == 0;
  D.19083 = (long int) D.19082;
  D.19084 = __builtin_expect (D.19083, 0);
  if (D.19084 != 0) goto <D.19085>; else goto <D.19086>;
  <D.19085>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-minor-copy-object.h", 291, "vtable_word & SGEN_FORWARDED_BIT");
  <D.19086>:
  D.19048 = vtable_word & 4294967292;
  obj = (char *) D.19048;
  *obj_slot = obj;
  <D.19077>:
}


sgen_nursery_is_to_space (char * object)
{
  int object.89;
  char * sgen_nursery_start.90;
  int sgen_nursery_start.91;
  int D.19091;
  int D.19092;
  _Bool D.19093;
  long int D.19094;
  long int D.19095;
  char * D.19098;
  char * D.19099;
  int sgen_space_bitmap_size.92;
  _Bool D.19101;
  long int D.19102;
  long int D.19103;
  gboolean D.19106;
  char * sgen_space_bitmap.93;
  sizetype byte.94;
  char * D.19109;
  char D.19110;
  int D.19111;
  int D.19112;
  int D.19113;
  _Bool D.19114;
  int idx;
  int byte;
  int bit;

  object.89 = (int) object;
  sgen_nursery_start.90 = sgen_nursery_start;
  sgen_nursery_start.91 = (int) sgen_nursery_start.90;
  D.19091 = object.89 - sgen_nursery_start.91;
  idx = D.19091 >> 9;
  byte = idx / 8;
  bit = idx & 7;
  D.19092 = sgen_ptr_in_nursery (object);
  D.19093 = D.19092 == 0;
  D.19094 = (long int) D.19093;
  D.19095 = __builtin_expect (D.19094, 0);
  if (D.19095 != 0) goto <D.19096>; else goto <D.19097>;
  <D.19096>:
  D.19098 = sgen_get_nursery_start ();
  D.19099 = sgen_get_nursery_end ();
  monoeg_g_log (0B, 4, "object %p is not in nursery [%p - %p]", object, D.19098, D.19099);
  <D.17048>:
  goto <D.17048>;
  <D.19097>:
  sgen_space_bitmap_size.92 = sgen_space_bitmap_size;
  D.19101 = byte >= sgen_space_bitmap_size.92;
  D.19102 = (long int) D.19101;
  D.19103 = __builtin_expect (D.19102, 0);
  if (D.19103 != 0) goto <D.19104>; else goto <D.19105>;
  <D.19104>:
  sgen_space_bitmap_size.92 = sgen_space_bitmap_size;
  monoeg_g_log (0B, 4, "byte index %d out of range", byte, sgen_space_bitmap_size.92);
  <D.17049>:
  goto <D.17049>;
  <D.19105>:
  sgen_space_bitmap.93 = sgen_space_bitmap;
  byte.94 = (sizetype) byte;
  D.19109 = sgen_space_bitmap.93 + byte.94;
  D.19110 = *D.19109;
  D.19111 = (int) D.19110;
  D.19112 = D.19111 >> bit;
  D.19113 = D.19112 & 1;
  D.19114 = D.19113 != 0;
  D.19106 = (gboolean) D.19114;
  return D.19106;
}


sgen_get_nursery_start ()
{
  char * D.19116;

  D.19116 = sgen_nursery_start;
  return D.19116;
}


sgen_get_nursery_end ()
{
  char * D.19118;

  D.19118 = sgen_nursery_end;
  return D.19118;
}


InterlockedCompareExchangePointer (void * volatile * dest, void * exch, void * comp)
{
  void * D.19120;
  unsigned int comp.95;
  unsigned int exch.96;
  unsigned int D.19123;

  comp.95 = (unsigned int) comp;
  exch.96 = (unsigned int) exch;
  D.19123 = __sync_val_compare_and_swap_4 (dest, comp.95, exch.96);
  D.19120 = (void *) D.19123;
  return D.19120;
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.19127;
  int D.19132;
  void * D.19134;
  unsigned int D.19135;

  D.19127 = __builtin_constant_p (__len);
  if (D.19127 != 0) goto <D.19128>; else goto <D.19129>;
  <D.19128>:
  if (__len == 0) goto <D.19130>; else goto <D.19131>;
  <D.19130>:
  D.19132 = __builtin_constant_p (__ch);
  if (D.19132 == 0) goto <D.19125>; else goto <D.19133>;
  <D.19133>:
  if (__ch != 0) goto <D.19125>; else goto <D.19126>;
  <D.19125>:
  __warn_memset_zero_len ();
  D.19134 = __dest;
  return D.19134;
  <D.19126>:
  <D.19131>:
  <D.19129>:
  D.19135 = __builtin_object_size (__dest, 0);
  D.19134 = __builtin___memset_chk (__dest, __ch, __len, D.19135);
  return D.19134;
}


simple_nursery_serial_copy_object (void * * obj_slot, struct SgenGrayQueue * queue)
{
  int current_collection_generation.97;
  int D.19140;
  struct FILE * gc_debug_file.98;
  char * iftmp.99;
  unsigned int D.19147;
  unsigned int D.19148;
  unsigned int D.19151;
  unsigned int D.19159;
  _Bool D.19160;
  long int D.19161;
  long int D.19162;
  void * D.19169;
  char * forwarded;
  char * obj;

  obj = *obj_slot;
  if (0 != 0) goto <D.19137>; else goto <D.19138>;
  <D.19137>:
  current_collection_generation.97 = current_collection_generation;
  monoeg_g_log (0B, 4, "calling minor-serial-copy from a %d generation collection", current_collection_generation.97);
  <D.17636>:
  goto <D.17636>;
  <D.19138>:
  D.19140 = sgen_ptr_in_nursery (obj);
  if (D.19140 == 0) goto <D.19141>; else goto <D.19142>;
  <D.19141>:
  return;
  <D.19142>:
  if (0 != 0) goto <D.19143>; else goto <D.19144>;
  <D.19143>:
  gc_debug_file.98 = gc_debug_file;
  fprintf (gc_debug_file.98, "Precise copy of %p from %p\n", obj, obj_slot);
  gc_debug_file.98 = gc_debug_file;
  fflush (gc_debug_file.98);
  <D.19144>:
  D.19147 = MEM[(mword *)obj];
  D.19148 = D.19147 & 1;
  if (D.19148 != 0) goto <D.19149>; else goto <D.19150>;
  <D.19149>:
  D.19147 = MEM[(mword *)obj];
  D.19151 = D.19147 & 4294967292;
  iftmp.99 = (char *) D.19151;
  goto <D.19152>;
  <D.19150>:
  iftmp.99 = 0B;
  <D.19152>:
  forwarded = iftmp.99;
  if (forwarded != 0B) goto <D.19153>; else goto <D.19154>;
  <D.19153>:
  if (0 != 0) goto <D.19155>; else goto <D.19156>;
  <D.19155>:
  monoeg_g_log (0B, 4, "forwarded object %p has no gc descriptor", forwarded);
  <D.17637>:
  goto <D.17637>;
  <D.19156>:
  if (0 != 0) goto <D.19157>; else goto <D.19158>;
  <D.19157>:
  gc_debug_file.98 = gc_debug_file;
  fprintf (gc_debug_file.98, " (already forwarded to %p)\n", forwarded);
  gc_debug_file.98 = gc_debug_file;
  fflush (gc_debug_file.98);
  <D.19158>:
  *obj_slot = forwarded;
  return;
  <D.19154>:
  D.19147 = MEM[(mword *)obj];
  D.19159 = D.19147 & 2;
  D.19160 = D.19159 != 0;
  D.19161 = (long int) D.19160;
  D.19162 = __builtin_expect (D.19161, 0);
  if (D.19162 != 0) goto <D.19163>; else goto <D.19164>;
  <D.19163>:
  if (0 != 0) goto <D.19165>; else goto <D.19166>;
  <D.19165>:
  monoeg_g_log (0B, 4, "pinned object %p has no gc descriptor", obj);
  <D.17638>:
  goto <D.17638>;
  <D.19166>:
  if (0 != 0) goto <D.19167>; else goto <D.19168>;
  <D.19167>:
  gc_debug_file.98 = gc_debug_file;
  fprintf (gc_debug_file.98, " (pinned, no change)\n");
  gc_debug_file.98 = gc_debug_file;
  fflush (gc_debug_file.98);
  <D.19168>:
  return;
  <D.19164>:
  D.19169 = copy_object_no_checks (obj, queue);
  *obj_slot = D.19169;
}


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.19171;

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


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.19173;
  void * (*<T2dd5>) (struct MonoVTable *, int, gboolean) D.19174;
  int objsize.100;

  D.19174 = major_collector.par_alloc_object;
  objsize.100 = (int) objsize;
  D.19173 = D.19174 (vtable, objsize.100, has_references);
  return D.19173;
}


alloc_for_promotion (struct MonoVTable * vtable, char * obj, size_t objsize, gboolean has_references)
{
  char * D.19177;
  void * (*<T2dd5>) (struct MonoVTable *, int, gboolean) D.19178;
  int objsize.101;

  D.19178 = major_collector.alloc_object;
  objsize.101 = (int) objsize;
  D.19177 = D.19178 (vtable, objsize.101, has_references);
  return D.19177;
}


