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.18068;
  unsigned int D.18069;
  unsigned int D.18072;
  unsigned int D.18073;
  unsigned int D.18074;
  unsigned int D.18075;
  unsigned int D.18076;
  void * D.18081;
  struct FILE * gc_debug_file.0;
  unsigned int _index.1;
  unsigned int D.18092;
  int D.18093;
  void * D.18098;
  unsigned int _index.2;
  unsigned int D.18102;
  int D.18103;
  unsigned int D.18110;
  unsigned int D.18113;
  int D.18114;
  int desc.3;
  unsigned int D.18118;
  unsigned int el_size.4;
  unsigned int D.18120;
  void * D.18125;
  int D.18131;
  unsigned int offset.5;
  unsigned int D.18133;
  unsigned int i.6;
  unsigned int D.18135;
  void * * D.18136;
  void * D.18141;
  sizetype el_size.7;
  unsigned int D.18148;
  void * D.18155;
  unsigned int D.18158;
  void * D.18165;
  unsigned int D.18168;
  unsigned int D.18169;
  struct MonoVTable * D.18172;
  struct MonoClass * D.18173;
  const char * D.18174;
  const char * D.18175;
  gsize * bitmap_data.8;
  unsigned int D.18177;
  void * D.18184;
  int bwords.9;

  start = start + 4294967288;
  D.18068 = desc & 7;
  switch (D.18068) <default: <D.18063>, case 1: <D.17989>, case 2: <D.17998>, case 3: <D.18048>, case 4: <D.18008>, case 5: <D.18041>, case 7: <D.18062>>
  <D.17989>:
  D.18069 = desc & 4294901760;
  if (D.18069 != 0) goto <D.18070>; else goto <D.18071>;
  <D.18070>:
  {
    void * * _objptr_end;
    void * * _objptr;

    _objptr = start;
    D.18072 = desc >> 16;
    D.18073 = D.18072 & 255;
    D.18074 = D.18073 * 4;
    _objptr = _objptr + D.18074;
    D.18075 = desc >> 24;
    D.18076 = D.18075 * 4;
    _objptr_end = _objptr + D.18076;
    {
      void * __old;

      __old = *_objptr;
      if (__old != 0B) goto <D.18077>; else goto <D.18078>;
      <D.18077>:
      simple_nursery_serial_copy_object_from_obj (_objptr, queue);
      if (0 != 0) goto <D.18079>; else goto <D.18080>;
      <D.18079>:
      D.18081 = *_objptr;
      if (D.18081 != __old) goto <D.18082>; else goto <D.18083>;
      <D.18082>:
      D.18081 = *_objptr;
      gc_debug_file.0 = gc_debug_file;
      fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18081, __old);
      gc_debug_file.0 = gc_debug_file;
      fflush (gc_debug_file.0);
      <D.18083>:
      <D.18080>:
      <D.18078>:
    }
    _objptr = _objptr + 4;
    goto <D.17995>;
    <D.17994>:
    {
      void * __old;

      __old = *_objptr;
      if (__old != 0B) goto <D.18085>; else goto <D.18086>;
      <D.18085>:
      simple_nursery_serial_copy_object_from_obj (_objptr, queue);
      if (0 != 0) goto <D.18087>; else goto <D.18088>;
      <D.18087>:
      D.18081 = *_objptr;
      if (D.18081 != __old) goto <D.18089>; else goto <D.18090>;
      <D.18089>:
      D.18081 = *_objptr;
      gc_debug_file.0 = gc_debug_file;
      fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18081, __old);
      gc_debug_file.0 = gc_debug_file;
      fflush (gc_debug_file.0);
      <D.18090>:
      <D.18088>:
      <D.18086>:
    }
    _objptr = _objptr + 4;
    <D.17995>:
    if (_objptr < _objptr_end) goto <D.17994>; else goto <D.17996>;
    <D.17996>:
  }
  <D.18071>:
  goto <D.17997>;
  <D.17998>:
  {
    void * * _objptr;
    gsize _bmap;

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

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

        __old = *_objptr;
        if (__old != 0B) goto <D.18094>; else goto <D.18095>;
        <D.18094>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18096>; else goto <D.18097>;
        <D.18096>:
        D.18098 = *_objptr;
        if (D.18098 != __old) goto <D.18099>; else goto <D.18100>;
        <D.18099>:
        D.18098 = *_objptr;
        gc_debug_file.0 = gc_debug_file;
        fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18098, __old);
        gc_debug_file.0 = gc_debug_file;
        fflush (gc_debug_file.0);
        <D.18100>:
        <D.18097>:
        <D.18095>:
      }
      _objptr = _objptr + 4;
    }
    goto <D.18006>;
    <D.18005>:
    {
      int _index;

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

        __old = *_objptr;
        if (__old != 0B) goto <D.18104>; else goto <D.18105>;
        <D.18104>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18106>; else goto <D.18107>;
        <D.18106>:
        D.18098 = *_objptr;
        if (D.18098 != __old) goto <D.18108>; else goto <D.18109>;
        <D.18108>:
        D.18098 = *_objptr;
        gc_debug_file.0 = gc_debug_file;
        fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18098, __old);
        gc_debug_file.0 = gc_debug_file;
        fflush (gc_debug_file.0);
        <D.18109>:
        <D.18107>:
        <D.18105>:
      }
      _objptr = _objptr + 4;
    }
    <D.18006>:
    if (_bmap != 0) goto <D.18005>; else goto <D.18007>;
    <D.18007>:
  }
  goto <D.17997>;
  <D.18008>:
  D.18110 = desc & 4294950912;
  if (D.18110 != 0) goto <D.18111>; else goto <D.18112>;
  <D.18111>:
  {
    int el_size;
    int etype;

    D.18113 = desc >> 3;
    D.18114 = (int) D.18113;
    el_size = D.18114 & 1023;
    desc.3 = (int) desc;
    etype = desc.3 & 49152;
    if (etype == 16384) goto <D.18116>; else goto <D.18117>;
    <D.18116>:
    {
      void * * p;
      void * * end_refs;

      p = start + 16;
      D.18118 = MEM[(struct MonoArray *)start].max_length;
      el_size.4 = (unsigned int) el_size;
      D.18120 = D.18118 * el_size.4;
      end_refs = p + D.18120;
      goto <D.18015>;
      <D.18014>:
      {
        void * __old;

        __old = *p;
        if (__old != 0B) goto <D.18121>; else goto <D.18122>;
        <D.18121>:
        simple_nursery_serial_copy_object_from_obj (p, queue);
        if (0 != 0) goto <D.18123>; else goto <D.18124>;
        <D.18123>:
        D.18125 = *p;
        if (D.18125 != __old) goto <D.18126>; else goto <D.18127>;
        <D.18126>:
        D.18125 = *p;
        gc_debug_file.0 = gc_debug_file;
        fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", p, D.18125, __old);
        gc_debug_file.0 = gc_debug_file;
        fflush (gc_debug_file.0);
        <D.18127>:
        <D.18124>:
        <D.18122>:
      }
      p = p + 4;
      <D.18015>:
      if (p < end_refs) goto <D.18014>; else goto <D.18016>;
      <D.18016>:
    }
    goto <D.18128>;
    <D.18117>:
    if (etype == 32768) goto <D.18129>; else goto <D.18130>;
    <D.18129>:
    {
      int offset;
      int num_refs;
      char * e_start;
      char * e_end;

      D.18072 = desc >> 16;
      D.18131 = (int) D.18072;
      offset = D.18131 & 255;
      D.18075 = desc >> 24;
      num_refs = (int) D.18075;
      e_start = start + 16;
      D.18118 = MEM[(struct MonoArray *)start].max_length;
      el_size.4 = (unsigned int) el_size;
      D.18120 = D.18118 * el_size.4;
      e_end = e_start + D.18120;
      goto <D.18028>;
      <D.18027>:
      {
        void * * p;
        int i;

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

          i.6 = (unsigned int) i;
          D.18135 = i.6 * 4;
          D.18136 = p + D.18135;
          __old = *D.18136;
          if (__old != 0B) goto <D.18137>; else goto <D.18138>;
          <D.18137>:
          i.6 = (unsigned int) i;
          D.18135 = i.6 * 4;
          D.18136 = p + D.18135;
          simple_nursery_serial_copy_object_from_obj (D.18136, queue);
          if (0 != 0) goto <D.18139>; else goto <D.18140>;
          <D.18139>:
          i.6 = (unsigned int) i;
          D.18135 = i.6 * 4;
          D.18136 = p + D.18135;
          D.18141 = *D.18136;
          if (D.18141 != __old) goto <D.18142>; else goto <D.18143>;
          <D.18142>:
          i.6 = (unsigned int) i;
          D.18135 = i.6 * 4;
          D.18136 = p + D.18135;
          D.18141 = *D.18136;
          i.6 = (unsigned int) i;
          D.18135 = i.6 * 4;
          D.18136 = p + D.18135;
          gc_debug_file.0 = gc_debug_file;
          fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", D.18136, D.18141, __old);
          gc_debug_file.0 = gc_debug_file;
          fflush (gc_debug_file.0);
          <D.18143>:
          <D.18140>:
          <D.18138>:
        }
        i = i + 1;
        <D.18025>:
        if (i < num_refs) goto <D.18024>; else goto <D.18026>;
        <D.18026>:
        el_size.7 = (sizetype) el_size;
        e_start = e_start + el_size.7;
      }
      <D.18028>:
      if (e_start < e_end) goto <D.18027>; else goto <D.18029>;
      <D.18029>:
    }
    goto <D.18145>;
    <D.18130>:
    if (etype == 49152) goto <D.18146>; else goto <D.18147>;
    <D.18146>:
    {
      char * e_start;
      char * e_end;

      e_start = start + 16;
      D.18118 = MEM[(struct MonoArray *)start].max_length;
      el_size.4 = (unsigned int) el_size;
      D.18120 = D.18118 * el_size.4;
      e_end = e_start + D.18120;
      goto <D.18039>;
      <D.18038>:
      {
        void * * p;
        gsize _bmap;

        p = e_start;
        _bmap = desc >> 16;
        goto <D.18036>;
        <D.18035>:
        D.18148 = _bmap & 1;
        if (D.18148 != 0) goto <D.18149>; else goto <D.18150>;
        <D.18149>:
        {
          void * __old;

          __old = *p;
          if (__old != 0B) goto <D.18151>; else goto <D.18152>;
          <D.18151>:
          simple_nursery_serial_copy_object_from_obj (p, queue);
          if (0 != 0) goto <D.18153>; else goto <D.18154>;
          <D.18153>:
          D.18155 = *p;
          if (D.18155 != __old) goto <D.18156>; else goto <D.18157>;
          <D.18156>:
          D.18155 = *p;
          gc_debug_file.0 = gc_debug_file;
          fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", p, D.18155, __old);
          gc_debug_file.0 = gc_debug_file;
          fflush (gc_debug_file.0);
          <D.18157>:
          <D.18154>:
          <D.18152>:
        }
        <D.18150>:
        _bmap = _bmap >> 1;
        p = p + 4;
        <D.18036>:
        if (_bmap != 0) goto <D.18035>; else goto <D.18037>;
        <D.18037>:
        el_size.7 = (sizetype) el_size;
        e_start = e_start + el_size.7;
      }
      <D.18039>:
      if (e_start < e_end) goto <D.18038>; else goto <D.18040>;
      <D.18040>:
    }
    <D.18147>:
    <D.18145>:
    <D.18128>:
  }
  <D.18112>:
  goto <D.17997>;
  <D.18041>:
  {
    void * * _objptr;
    gsize _bmap;

    _objptr = start;
    _bmap = desc >> 3;
    _objptr = _objptr + 8;
    goto <D.18046>;
    <D.18045>:
    D.18158 = _bmap & 1;
    if (D.18158 != 0) goto <D.18159>; else goto <D.18160>;
    <D.18159>:
    {
      void * __old;

      __old = *_objptr;
      if (__old != 0B) goto <D.18161>; else goto <D.18162>;
      <D.18161>:
      simple_nursery_serial_copy_object_from_obj (_objptr, queue);
      if (0 != 0) goto <D.18163>; else goto <D.18164>;
      <D.18163>:
      D.18165 = *_objptr;
      if (D.18165 != __old) goto <D.18166>; else goto <D.18167>;
      <D.18166>:
      D.18165 = *_objptr;
      gc_debug_file.0 = gc_debug_file;
      fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18165, __old);
      gc_debug_file.0 = gc_debug_file;
      fflush (gc_debug_file.0);
      <D.18167>:
      <D.18164>:
      <D.18162>:
    }
    <D.18160>:
    _bmap = _bmap >> 1;
    _objptr = _objptr + 4;
    <D.18046>:
    if (_bmap != 0) goto <D.18045>; else goto <D.18047>;
    <D.18047>:
  }
  goto <D.17997>;
  <D.18048>:
  {
    void * * _objptr;
    gsize * bitmap_data;
    int bwords;
    void * * start_run;

    _objptr = start;
    bitmap_data = sgen_get_complex_descriptor (desc);
    D.18168 = *bitmap_data;
    D.18169 = D.18168 + 4294967295;
    bwords = (int) D.18169;
    start_run = _objptr;
    bitmap_data = bitmap_data + 4;
    if (0 != 0) goto <D.18170>; else goto <D.18171>;
    <D.18170>:
    {
      struct MonoObject * myobj;

      myobj = start;
      D.18172 = myobj->vtable;
      D.18173 = D.18172->klass;
      D.18174 = D.18173->name;
      D.18172 = myobj->vtable;
      D.18173 = D.18172->klass;
      D.18175 = D.18173->name_space;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.18175, D.18174);
    }
    <D.18171>:
    goto <D.18060>;
    <D.18059>:
    {
      gsize _bmap;

      bitmap_data.8 = bitmap_data;
      bitmap_data = bitmap_data.8 + 4;
      _bmap = *bitmap_data.8;
      _objptr = start_run;
      goto <D.18057>;
      <D.18056>:
      D.18177 = _bmap & 1;
      if (D.18177 != 0) goto <D.18178>; else goto <D.18179>;
      <D.18178>:
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18180>; else goto <D.18181>;
        <D.18180>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18182>; else goto <D.18183>;
        <D.18182>:
        D.18184 = *_objptr;
        if (D.18184 != __old) goto <D.18185>; else goto <D.18186>;
        <D.18185>:
        D.18184 = *_objptr;
        gc_debug_file.0 = gc_debug_file;
        fprintf (gc_debug_file.0, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18184, __old);
        gc_debug_file.0 = gc_debug_file;
        fflush (gc_debug_file.0);
        <D.18186>:
        <D.18183>:
        <D.18181>:
      }
      <D.18179>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 4;
      <D.18057>:
      if (_bmap != 0) goto <D.18056>; else goto <D.18058>;
      <D.18058>:
      start_run = start_run + 128;
    }
    <D.18060>:
    bwords.9 = bwords;
    bwords = bwords.9 + -1;
    if (bwords.9 > 0) goto <D.18059>; else goto <D.18061>;
    <D.18061>:
  }
  goto <D.17997>;
  <D.18062>:
  goto <D.17997>;
  <D.18063>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
  <D.17997>:
}


simple_nursery_serial_copy_object_from_obj (void * * obj_slot, struct SgenGrayQueue * queue)
{
  int current_collection_generation.10;
  int D.18192;
  struct FILE * gc_debug_file.11;
  char * iftmp.12;
  unsigned int D.18199;
  unsigned int D.18200;
  unsigned int D.18203;
  unsigned int D.18211;
  _Bool D.18212;
  long int D.18213;
  long int D.18214;
  int D.18221;
  _Bool D.18224;
  long int D.18225;
  long int D.18226;
  int iftmp.13;
  int D.18232;
  int D.18234;
  _Bool D.18236;
  long int D.18237;
  long int D.18238;
  char * forwarded;
  char * obj;
  void * copy;

  obj = *obj_slot;
  if (0 != 0) goto <D.18189>; else goto <D.18190>;
  <D.18189>:
  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.17666>:
  goto <D.17666>;
  <D.18190>:
  D.18192 = sgen_ptr_in_nursery (obj);
  if (D.18192 == 0) goto <D.18193>; else goto <D.18194>;
  <D.18193>:
  return;
  <D.18194>:
  if (0 != 0) goto <D.18195>; else goto <D.18196>;
  <D.18195>:
  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.18196>:
  D.18199 = MEM[(mword *)obj];
  D.18200 = D.18199 & 1;
  if (D.18200 != 0) goto <D.18201>; else goto <D.18202>;
  <D.18201>:
  D.18199 = MEM[(mword *)obj];
  D.18203 = D.18199 & 4294967292;
  iftmp.12 = (char *) D.18203;
  goto <D.18204>;
  <D.18202>:
  iftmp.12 = 0B;
  <D.18204>:
  forwarded = iftmp.12;
  if (forwarded != 0B) goto <D.18205>; else goto <D.18206>;
  <D.18205>:
  if (0 != 0) goto <D.18207>; else goto <D.18208>;
  <D.18207>:
  monoeg_g_log (0B, 4, "forwarded object %p has no gc descriptor", forwarded);
  <D.17667>:
  goto <D.17667>;
  <D.18208>:
  if (0 != 0) goto <D.18209>; else goto <D.18210>;
  <D.18209>:
  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.18210>:
  *obj_slot = forwarded;
  return;
  <D.18206>:
  D.18199 = MEM[(mword *)obj];
  D.18211 = D.18199 & 2;
  D.18212 = D.18211 != 0;
  D.18213 = (long int) D.18212;
  D.18214 = __builtin_expect (D.18213, 0);
  if (D.18214 != 0) goto <D.18215>; else goto <D.18216>;
  <D.18215>:
  if (0 != 0) goto <D.18217>; else goto <D.18218>;
  <D.18217>:
  monoeg_g_log (0B, 4, "pinned object %p has no gc descriptor", obj);
  <D.17668>:
  goto <D.17668>;
  <D.18218>:
  if (0 != 0) goto <D.18219>; else goto <D.18220>;
  <D.18219>:
  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.18220>:
  D.18221 = sgen_ptr_in_nursery (obj_slot);
  if (D.18221 == 0) goto <D.18222>; else goto <D.18223>;
  <D.18222>:
  sgen_add_to_global_remset (obj_slot, obj);
  <D.18223>:
  return;
  <D.18216>:
  copy = copy_object_no_checks (obj, queue);
  *obj_slot = copy;
  D.18224 = obj == copy;
  D.18225 = (long int) D.18224;
  D.18226 = __builtin_expect (D.18225, 0);
  if (D.18226 != 0) goto <D.18227>; else goto <D.18228>;
  <D.18227>:
  D.18232 = sgen_ptr_in_nursery (copy);
  if (D.18232 != 0) goto <D.18233>; else goto <D.18230>;
  <D.18233>:
  D.18234 = sgen_ptr_in_nursery (obj_slot);
  if (D.18234 == 0) goto <D.18235>; else goto <D.18230>;
  <D.18235>:
  iftmp.13 = 1;
  goto <D.18231>;
  <D.18230>:
  iftmp.13 = 0;
  <D.18231>:
  D.18236 = iftmp.13 != 0;
  D.18237 = (long int) D.18236;
  D.18238 = __builtin_expect (D.18237, 0);
  if (D.18238 != 0) goto <D.18239>; else goto <D.18240>;
  <D.18239>:
  sgen_add_to_global_remset (obj_slot, copy);
  <D.18240>:
  <D.18228>:
}


copy_object_no_checks (void * obj, struct SgenGrayQueue * queue)
{
  void * D.18242;
  unsigned int D.18243;
  unsigned int D.18244;
  unsigned int D.18245;
  _Bool D.18246;
  long int D.18247;
  long int D.18248;
  void * D.18251;
  struct SgenGrayQueue * iftmp.14;
  unsigned int destination.15;
  unsigned int D.18257;
  struct MonoVTable * vt;
  gboolean has_references;
  mword objsize;
  char * destination;

  vt = MEM[(struct MonoObject *)obj].vtable;
  D.18242 = vt->gc_descr;
  D.18243 = (unsigned int) D.18242;
  has_references = sgen_gc_descr_has_references (D.18243);
  D.18244 = sgen_par_object_get_size (vt, obj);
  D.18245 = D.18244 + 7;
  objsize = D.18245 & 4294967288;
  destination = alloc_for_promotion (vt, obj, objsize, has_references);
  D.18246 = destination == 0B;
  D.18247 = (long int) D.18246;
  D.18248 = __builtin_expect (D.18247, 0);
  if (D.18248 != 0) goto <D.18249>; else goto <D.18250>;
  <D.18249>:
  sgen_pin_object (obj, queue);
  sgen_set_pinned_from_failed_allocation (objsize);
  D.18251 = obj;
  return D.18251;
  <D.18250>:
  if (has_references != 0) goto <D.18253>; else goto <D.18254>;
  <D.18253>:
  iftmp.14 = queue;
  goto <D.18255>;
  <D.18254>:
  iftmp.14 = 0B;
  <D.18255>:
  par_copy_object_no_checks (destination, vt, obj, objsize, iftmp.14);
  destination.15 = (unsigned int) destination;
  D.18257 = destination.15 | 1;
  MEM[(mword *)obj] = D.18257;
  D.18251 = destination;
  return D.18251;
}


sgen_gc_descr_has_references (mword desc)
{
  unsigned int D.18259;
  gboolean D.18262;
  unsigned int D.18263;
  unsigned int D.18266;

  D.18259 = desc & 4294901767;
  if (D.18259 == 1) goto <D.18260>; else goto <D.18261>;
  <D.18260>:
  D.18262 = 0;
  return D.18262;
  <D.18261>:
  D.18263 = desc & 49159;
  if (D.18263 == 4) goto <D.18264>; else goto <D.18265>;
  <D.18264>:
  D.18262 = 0;
  return D.18262;
  <D.18265>:
  D.18266 = desc & 7;
  if (D.18266 == 7) goto <D.18267>; else goto <D.18268>;
  <D.18267>:
  D.18262 = 0;
  return D.18262;
  <D.18268>:
  D.18262 = 1;
  return D.18262;
}


sgen_par_object_get_size (struct MonoVTable * vtable, struct MonoObject * o)
{
  void * D.18270;
  unsigned int D.18271;
  guint D.18276;
  int D.18277;
  int D.18278;
  unsigned int D.18279;
  unsigned int D.18282;
  int D.18283;
  unsigned int D.18284;
  unsigned int element_size.16;
  unsigned int D.18286;
  unsigned int D.18287;
  struct MonoClass * D.18290;
  unsigned char D.18291;
  unsigned int D.18292;
  unsigned int D.18293;
  mword descr;
  mword type;

  D.18270 = vtable->gc_descr;
  descr = (mword) D.18270;
  type = descr & 7;
  D.18271 = type + 4294967295;
  if (D.18271 <= 1) goto <D.18272>; else goto <D.18273>;
  <D.18272>:
  {
    mword size;

    size = descr & 65528;
    if (size == 0) goto <D.18274>; else goto <D.18275>;
    <D.18274>:
    D.18277 = MEM[(struct MonoString *)o].length;
    D.18278 = D.18277 * 2;
    D.18279 = (unsigned int) D.18278;
    D.18276 = D.18279 + 14;
    return D.18276;
    <D.18275>:
    D.18276 = size;
    return D.18276;
  }
  <D.18273>:
  if (type == 4) goto <D.18280>; else goto <D.18281>;
  <D.18280>:
  {
    int element_size;
    struct MonoArray * array;
    size_t size;

    D.18282 = descr >> 3;
    D.18283 = (int) D.18282;
    element_size = D.18283 & 1023;
    array = o;
    D.18284 = array->max_length;
    element_size.16 = (unsigned int) element_size;
    D.18286 = D.18284 * element_size.16;
    size = D.18286 + 16;
    D.18287 = descr & 8192;
    if (D.18287 != 0) goto <D.18288>; else goto <D.18289>;
    <D.18288>:
    size = size + 3;
    size = size & 4294967292;
    D.18290 = vtable->klass;
    D.18291 = D.18290->rank;
    D.18292 = (unsigned int) D.18291;
    D.18293 = D.18292 * 8;
    size = D.18293 + size;
    <D.18289>:
    D.18276 = size;
    return D.18276;
  }
  <D.18281>:
  D.18276 = slow_object_get_size (vtable, o);
  return D.18276;
}


slow_object_get_size (struct MonoVTable * vtable, struct MonoObject * o)
{
  struct MonoClass * D.18295;
  guint D.18298;
  int D.18299;
  int D.18300;
  unsigned int D.18301;
  unsigned char D.18302;
  int D.18305;
  unsigned int D.18306;
  unsigned int D.18307;
  unsigned int D.18308;
  struct MonoArrayBounds * D.18309;
  _Bool D.18310;
  long int D.18311;
  long int D.18312;
  unsigned int D.18315;
  unsigned int D.18316;
  int D.18317;
  struct MonoClass * klass;

  klass = vtable->klass;
  D.18295 = mono_defaults.string_class;
  if (D.18295 == klass) goto <D.18296>; else goto <D.18297>;
  <D.18296>:
  D.18299 = MEM[(struct MonoString *)o].length;
  D.18300 = D.18299 * 2;
  D.18301 = (unsigned int) D.18300;
  D.18298 = D.18301 + 14;
  return D.18298;
  <D.18297>:
  D.18302 = klass->rank;
  if (D.18302 != 0) goto <D.18303>; else goto <D.18304>;
  <D.18303>:
  {
    struct MonoArray * array;
    size_t size;

    array = o;
    D.18305 = klass->sizes.element_size;
    D.18306 = (unsigned int) D.18305;
    D.18307 = array->max_length;
    D.18308 = D.18306 * D.18307;
    size = D.18308 + 16;
    D.18309 = array->bounds;
    D.18310 = D.18309 != 0B;
    D.18311 = (long int) D.18310;
    D.18312 = __builtin_expect (D.18311, 0);
    if (D.18312 != 0) goto <D.18313>; else goto <D.18314>;
    <D.18313>:
    size = size + 3;
    size = size & 4294967292;
    D.18302 = klass->rank;
    D.18315 = (unsigned int) D.18302;
    D.18316 = D.18315 * 8;
    size = D.18316 + size;
    <D.18314>:
    D.18298 = size;
    return D.18298;
  }
  <D.18304>:
  D.18317 = klass->instance_size;
  D.18298 = (guint) D.18317;
  return D.18298;
}


par_copy_object_no_checks (char * destination, struct MonoVTable * vt, void * obj, mword objsize, struct SgenGrayQueue * queue)
{
  struct MonoClass * D.18321;
  const char * D.18322;
  const char * D.18323;
  struct MonoVTable * D.18326;
  struct MonoClass * D.18327;
  const char * D.18328;
  struct FILE * gc_debug_file.17;
  unsigned int D.18332;
  const void * D.18333;
  mword * D.18334;
  unsigned int D.18335;
  mword * D.18336;
  unsigned int D.18337;
  mword * D.18338;
  unsigned int D.18339;
  mword * D.18340;
  unsigned int D.18341;
  mword * D.18342;
  unsigned int D.18343;
  mword * D.18344;
  unsigned int D.18345;
  mword * D.18346;
  unsigned int D.18347;
  unsigned int D.18349;
  const void * D.18350;
  void * D.18351;
  int iftmp.18;
  unsigned char D.18357;
  struct MonoArrayBounds * D.18359;
  _Bool D.18361;
  long int D.18362;
  long int D.18363;
  int D.18366;
  int obj.19;
  int D.18368;
  sizetype D.18369;
  struct MonoArrayBounds * D.18370;
  unsigned int D.18373;
  int D.18374;
  <unnamed type> mono_profiler_events.20;
  unsigned int D.18376;
  _Bool D.18377;
  long int D.18378;
  long int D.18379;
  const char * D.18386;
  int iftmp.21;
  struct GrayQueueSection * D.18391;
  int D.18393;
  _Bool D.18394;
  long int D.18395;
  long int D.18396;
  int D.18400;
  int D.18401;
  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.18319>; else goto <D.18320>;
  <D.18319>:
  D.18321 = vt->klass;
  D.18322 = D.18321->name;
  D.18321 = vt->klass;
  D.18323 = D.18321->name_space;
  monoeg_g_log (0B, 4, "vtable %p for class %s:%s was not initialized", vt, D.18323, D.18322);
  <D.17638>:
  goto <D.17638>;
  <D.18320>:
  if (0 != 0) goto <D.18324>; else goto <D.18325>;
  <D.18324>:
  D.18326 = MEM[(struct MonoObject *)obj].vtable;
  D.18327 = D.18326->klass;
  D.18328 = D.18327->name;
  gc_debug_file.17 = gc_debug_file;
  fprintf (gc_debug_file.17, " (to %p, %s size: %lu)\n", destination, D.18328, objsize);
  gc_debug_file.17 = gc_debug_file;
  fflush (gc_debug_file.17);
  <D.18325>:
  if (objsize <= 32) goto <D.18330>; else goto <D.18331>;
  <D.18330>:
  {
    mword * dest;

    dest = destination;
    D.18332 = objsize / 4;
    D.18333 = copy_labels[D.18332];
    goto D.18333;
    LAB_8:
    D.18334 = dest + 28;
    D.18335 = MEM[(mword *)obj + 28B];
    *D.18334 = D.18335;
    LAB_7:
    D.18336 = dest + 24;
    D.18337 = MEM[(mword *)obj + 24B];
    *D.18336 = D.18337;
    LAB_6:
    D.18338 = dest + 20;
    D.18339 = MEM[(mword *)obj + 20B];
    *D.18338 = D.18339;
    LAB_5:
    D.18340 = dest + 16;
    D.18341 = MEM[(mword *)obj + 16B];
    *D.18340 = D.18341;
    LAB_4:
    D.18342 = dest + 12;
    D.18343 = MEM[(mword *)obj + 12B];
    *D.18342 = D.18343;
    LAB_3:
    D.18344 = dest + 8;
    D.18345 = MEM[(mword *)obj + 8B];
    *D.18344 = D.18345;
    LAB_2:
    D.18346 = dest + 4;
    D.18347 = MEM[(mword *)obj + 4B];
    *D.18346 = D.18347;
    LAB_1:
    LAB_0:
  }
  goto <D.18348>;
  <D.18331>:
  D.18349 = objsize + 4294967292;
  D.18350 = obj + 4;
  D.18351 = destination + 4;
  mono_gc_memmove_aligned (D.18351, D.18350, D.18349);
  <D.18348>:
  if (0 != 0) goto <D.18352>; else goto <D.18353>;
  <D.18352>:
  D.18321 = vt->klass;
  D.18322 = D.18321->name;
  D.18321 = vt->klass;
  D.18323 = D.18321->name_space;
  monoeg_g_log (0B, 4, "vtable %p for class %s:%s has no gc descriptor", vt, D.18323, D.18322);
  <D.17640>:
  goto <D.17640>;
  <D.18353>:
  D.18357 = vt->rank;
  if (D.18357 != 0) goto <D.18358>; else goto <D.18355>;
  <D.18358>:
  D.18359 = MEM[(struct MonoArray *)obj].bounds;
  if (D.18359 != 0B) goto <D.18360>; else goto <D.18355>;
  <D.18360>:
  iftmp.18 = 1;
  goto <D.18356>;
  <D.18355>:
  iftmp.18 = 0;
  <D.18356>:
  D.18361 = iftmp.18 != 0;
  D.18362 = (long int) D.18361;
  D.18363 = __builtin_expect (D.18362, 0);
  if (D.18363 != 0) goto <D.18364>; else goto <D.18365>;
  <D.18364>:
  {
    struct MonoArray * array;

    array = destination;
    D.18359 = MEM[(struct MonoArray *)obj].bounds;
    D.18366 = (int) D.18359;
    obj.19 = (int) obj;
    D.18368 = D.18366 - obj.19;
    D.18369 = (sizetype) D.18368;
    D.18370 = destination + D.18369;
    array->bounds = D.18370;
    if (0 != 0) goto <D.18371>; else goto <D.18372>;
    <D.18371>:
    D.18373 = mono_array_length (array);
    D.18357 = vt->rank;
    D.18374 = (int) D.18357;
    gc_debug_file.17 = gc_debug_file;
    fprintf (gc_debug_file.17, "Array instance %p: size: %lu, rank: %d, length: %lu\n", array, objsize, D.18374, D.18373);
    gc_debug_file.17 = gc_debug_file;
    fflush (gc_debug_file.17);
    <D.18372>:
  }
  <D.18365>:
  mono_profiler_events.20 = mono_profiler_events;
  D.18376 = mono_profiler_events.20 & 524288;
  D.18377 = D.18376 != 0;
  D.18378 = (long int) D.18377;
  D.18379 = __builtin_expect (D.18378, 0);
  if (D.18379 != 0) goto <D.18380>; else goto <D.18381>;
  <D.18380>:
  sgen_register_moved_object (obj, destination);
  <D.18381>:
  obj = destination;
  if (queue != 0B) goto <D.18382>; else goto <D.18383>;
  <D.18382>:
  if (0 != 0) goto <D.18384>; else goto <D.18385>;
  <D.18384>:
  D.18386 = sgen_safe_name (obj);
  gc_debug_file.17 = gc_debug_file;
  fprintf (gc_debug_file.17, "Enqueuing gray object %p (%s)\n", obj, D.18386);
  gc_debug_file.17 = gc_debug_file;
  fflush (gc_debug_file.17);
  <D.18385>:
  D.18391 = queue->first;
  if (D.18391 == 0B) goto <D.18388>; else goto <D.18392>;
  <D.18392>:
  D.18391 = queue->first;
  D.18393 = D.18391->end;
  if (D.18393 == 125) goto <D.18388>; else goto <D.18389>;
  <D.18388>:
  iftmp.21 = 1;
  goto <D.18390>;
  <D.18389>:
  iftmp.21 = 0;
  <D.18390>:
  D.18394 = iftmp.21 != 0;
  D.18395 = (long int) D.18394;
  D.18396 = __builtin_expect (D.18395, 0);
  if (D.18396 != 0) goto <D.18397>; else goto <D.18398>;
  <D.18397>:
  sgen_gray_object_enqueue (queue, obj);
  goto <D.18399>;
  <D.18398>:
  D.18391 = queue->first;
  D.18391 = queue->first;
  D.18393 = D.18391->end;
  D.18400 = D.18393;
  D.18401 = D.18400 + 1;
  D.18391->end = D.18401;
  D.18391->objects[D.18400] = obj;
  <D.18399>:
  __builtin_prefetch (obj);
  <D.18383>:
}


sgen_ptr_in_nursery (void * p)
{
  gboolean D.18404;
  int sgen_nursery_bits.23;
  int D.18406;
  int D.18407;
  unsigned int D.18408;
  unsigned int p.24;
  unsigned int D.18410;
  char * sgen_nursery_start.25;
  unsigned int sgen_nursery_start.26;
  _Bool D.18413;

  sgen_nursery_bits.23 = sgen_nursery_bits;
  D.18406 = 1 << sgen_nursery_bits.23;
  D.18407 = -D.18406;
  D.18408 = (unsigned int) D.18407;
  p.24 = (unsigned int) p;
  D.18410 = D.18408 & p.24;
  sgen_nursery_start.25 = sgen_nursery_start;
  sgen_nursery_start.26 = (unsigned int) sgen_nursery_start.25;
  D.18413 = D.18410 == sgen_nursery_start.26;
  D.18404 = (gboolean) D.18413;
  return D.18404;
}


simple_nursery_serial_scan_object (char * start, struct SgenGrayQueue * queue)
{
  unsigned int D.18415;
  unsigned int D.18416;
  unsigned int D.18417;
  unsigned int D.18418;
  unsigned int D.18421;
  unsigned int D.18422;
  unsigned int D.18423;
  unsigned int D.18424;
  unsigned int D.18425;
  void * D.18430;
  struct FILE * gc_debug_file.27;
  unsigned int _index.28;
  unsigned int D.18441;
  int D.18442;
  void * D.18447;
  unsigned int _index.29;
  unsigned int D.18451;
  int D.18452;
  unsigned int D.18459;
  unsigned int D.18462;
  int D.18463;
  int desc.30;
  unsigned int D.18467;
  unsigned int el_size.31;
  unsigned int D.18469;
  void * D.18474;
  int D.18480;
  unsigned int offset.32;
  unsigned int D.18482;
  unsigned int i.33;
  unsigned int D.18484;
  void * * D.18485;
  void * D.18490;
  sizetype el_size.34;
  unsigned int D.18497;
  void * D.18504;
  unsigned int D.18507;
  void * D.18514;
  unsigned int D.18517;
  unsigned int D.18518;
  struct MonoVTable * D.18521;
  struct MonoClass * D.18522;
  const char * D.18523;
  const char * D.18524;
  gsize * bitmap_data.35;
  unsigned int D.18526;
  void * D.18533;
  int bwords.36;
  unsigned int D.18537;
  gsize * mbitmap_data.37;
  unsigned int D.18539;
  unsigned int D.18540;
  struct MonoClass * D.18541;
  unsigned int el_size.38;
  unsigned int D.18543;
  const char * D.18546;
  const char * D.18547;
  gsize * bitmap_data.39;
  unsigned int D.18549;
  void * D.18556;
  unsigned int bwords.40;
  sizetype el_size.41;

  {
    struct GCVTable * vt;
    mword desc;

    D.18415 = MEM[(mword *)start];
    D.18416 = D.18415 & 4294967292;
    vt = (struct GCVTable *) D.18416;
    desc = vt->desc;
    D.18417 = desc & 7;
    switch (D.18417) <default: <D.17983>, case 1: <D.17888>, case 2: <D.17897>, case 3: <D.17947>, case 4: <D.17907>, case 5: <D.17940>, case 6: <D.17961>, case 7: <D.17982>>
    <D.17888>:
    D.18418 = desc & 4294901760;
    if (D.18418 != 0) goto <D.18419>; else goto <D.18420>;
    <D.18419>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.18421 = desc >> 16;
      D.18422 = D.18421 & 255;
      D.18423 = D.18422 * 4;
      _objptr = _objptr + D.18423;
      D.18424 = desc >> 24;
      D.18425 = D.18424 * 4;
      _objptr_end = _objptr + D.18425;
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18426>; else goto <D.18427>;
        <D.18426>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18428>; else goto <D.18429>;
        <D.18428>:
        D.18430 = *_objptr;
        if (D.18430 != __old) goto <D.18431>; else goto <D.18432>;
        <D.18431>:
        D.18430 = *_objptr;
        gc_debug_file.27 = gc_debug_file;
        fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18430, __old);
        gc_debug_file.27 = gc_debug_file;
        fflush (gc_debug_file.27);
        <D.18432>:
        <D.18429>:
        <D.18427>:
      }
      _objptr = _objptr + 4;
      goto <D.17894>;
      <D.17893>:
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18434>; else goto <D.18435>;
        <D.18434>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18436>; else goto <D.18437>;
        <D.18436>:
        D.18430 = *_objptr;
        if (D.18430 != __old) goto <D.18438>; else goto <D.18439>;
        <D.18438>:
        D.18430 = *_objptr;
        gc_debug_file.27 = gc_debug_file;
        fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18430, __old);
        gc_debug_file.27 = gc_debug_file;
        fflush (gc_debug_file.27);
        <D.18439>:
        <D.18437>:
        <D.18435>:
      }
      _objptr = _objptr + 4;
      <D.17894>:
      if (_objptr < _objptr_end) goto <D.17893>; else goto <D.17895>;
      <D.17895>:
    }
    <D.18420>:
    goto <D.17896>;
    <D.17897>:
    {
      void * * _objptr;
      gsize _bmap;

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

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

          __old = *_objptr;
          if (__old != 0B) goto <D.18443>; else goto <D.18444>;
          <D.18443>:
          simple_nursery_serial_copy_object_from_obj (_objptr, queue);
          if (0 != 0) goto <D.18445>; else goto <D.18446>;
          <D.18445>:
          D.18447 = *_objptr;
          if (D.18447 != __old) goto <D.18448>; else goto <D.18449>;
          <D.18448>:
          D.18447 = *_objptr;
          gc_debug_file.27 = gc_debug_file;
          fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18447, __old);
          gc_debug_file.27 = gc_debug_file;
          fflush (gc_debug_file.27);
          <D.18449>:
          <D.18446>:
          <D.18444>:
        }
        _objptr = _objptr + 4;
      }
      goto <D.17905>;
      <D.17904>:
      {
        int _index;

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

          __old = *_objptr;
          if (__old != 0B) goto <D.18453>; else goto <D.18454>;
          <D.18453>:
          simple_nursery_serial_copy_object_from_obj (_objptr, queue);
          if (0 != 0) goto <D.18455>; else goto <D.18456>;
          <D.18455>:
          D.18447 = *_objptr;
          if (D.18447 != __old) goto <D.18457>; else goto <D.18458>;
          <D.18457>:
          D.18447 = *_objptr;
          gc_debug_file.27 = gc_debug_file;
          fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18447, __old);
          gc_debug_file.27 = gc_debug_file;
          fflush (gc_debug_file.27);
          <D.18458>:
          <D.18456>:
          <D.18454>:
        }
        _objptr = _objptr + 4;
      }
      <D.17905>:
      if (_bmap != 0) goto <D.17904>; else goto <D.17906>;
      <D.17906>:
    }
    goto <D.17896>;
    <D.17907>:
    D.18459 = desc & 4294950912;
    if (D.18459 != 0) goto <D.18460>; else goto <D.18461>;
    <D.18460>:
    {
      int el_size;
      int etype;

      D.18462 = desc >> 3;
      D.18463 = (int) D.18462;
      el_size = D.18463 & 1023;
      desc.30 = (int) desc;
      etype = desc.30 & 49152;
      if (etype == 16384) goto <D.18465>; else goto <D.18466>;
      <D.18465>:
      {
        void * * p;
        void * * end_refs;

        p = start + 16;
        D.18467 = MEM[(struct MonoArray *)start].max_length;
        el_size.31 = (unsigned int) el_size;
        D.18469 = D.18467 * el_size.31;
        end_refs = p + D.18469;
        goto <D.17914>;
        <D.17913>:
        {
          void * __old;

          __old = *p;
          if (__old != 0B) goto <D.18470>; else goto <D.18471>;
          <D.18470>:
          simple_nursery_serial_copy_object_from_obj (p, queue);
          if (0 != 0) goto <D.18472>; else goto <D.18473>;
          <D.18472>:
          D.18474 = *p;
          if (D.18474 != __old) goto <D.18475>; else goto <D.18476>;
          <D.18475>:
          D.18474 = *p;
          gc_debug_file.27 = gc_debug_file;
          fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", p, D.18474, __old);
          gc_debug_file.27 = gc_debug_file;
          fflush (gc_debug_file.27);
          <D.18476>:
          <D.18473>:
          <D.18471>:
        }
        p = p + 4;
        <D.17914>:
        if (p < end_refs) goto <D.17913>; else goto <D.17915>;
        <D.17915>:
      }
      goto <D.18477>;
      <D.18466>:
      if (etype == 32768) goto <D.18478>; else goto <D.18479>;
      <D.18478>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.18421 = desc >> 16;
        D.18480 = (int) D.18421;
        offset = D.18480 & 255;
        D.18424 = desc >> 24;
        num_refs = (int) D.18424;
        e_start = start + 16;
        D.18467 = MEM[(struct MonoArray *)start].max_length;
        el_size.31 = (unsigned int) el_size;
        D.18469 = D.18467 * el_size.31;
        e_end = e_start + D.18469;
        goto <D.17927>;
        <D.17926>:
        {
          void * * p;
          int i;

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

            i.33 = (unsigned int) i;
            D.18484 = i.33 * 4;
            D.18485 = p + D.18484;
            __old = *D.18485;
            if (__old != 0B) goto <D.18486>; else goto <D.18487>;
            <D.18486>:
            i.33 = (unsigned int) i;
            D.18484 = i.33 * 4;
            D.18485 = p + D.18484;
            simple_nursery_serial_copy_object_from_obj (D.18485, queue);
            if (0 != 0) goto <D.18488>; else goto <D.18489>;
            <D.18488>:
            i.33 = (unsigned int) i;
            D.18484 = i.33 * 4;
            D.18485 = p + D.18484;
            D.18490 = *D.18485;
            if (D.18490 != __old) goto <D.18491>; else goto <D.18492>;
            <D.18491>:
            i.33 = (unsigned int) i;
            D.18484 = i.33 * 4;
            D.18485 = p + D.18484;
            D.18490 = *D.18485;
            i.33 = (unsigned int) i;
            D.18484 = i.33 * 4;
            D.18485 = p + D.18484;
            gc_debug_file.27 = gc_debug_file;
            fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", D.18485, D.18490, __old);
            gc_debug_file.27 = gc_debug_file;
            fflush (gc_debug_file.27);
            <D.18492>:
            <D.18489>:
            <D.18487>:
          }
          i = i + 1;
          <D.17924>:
          if (i < num_refs) goto <D.17923>; else goto <D.17925>;
          <D.17925>:
          el_size.34 = (sizetype) el_size;
          e_start = e_start + el_size.34;
        }
        <D.17927>:
        if (e_start < e_end) goto <D.17926>; else goto <D.17928>;
        <D.17928>:
      }
      goto <D.18494>;
      <D.18479>:
      if (etype == 49152) goto <D.18495>; else goto <D.18496>;
      <D.18495>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 16;
        D.18467 = MEM[(struct MonoArray *)start].max_length;
        el_size.31 = (unsigned int) el_size;
        D.18469 = D.18467 * el_size.31;
        e_end = e_start + D.18469;
        goto <D.17938>;
        <D.17937>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.17935>;
          <D.17934>:
          D.18497 = _bmap & 1;
          if (D.18497 != 0) goto <D.18498>; else goto <D.18499>;
          <D.18498>:
          {
            void * __old;

            __old = *p;
            if (__old != 0B) goto <D.18500>; else goto <D.18501>;
            <D.18500>:
            simple_nursery_serial_copy_object_from_obj (p, queue);
            if (0 != 0) goto <D.18502>; else goto <D.18503>;
            <D.18502>:
            D.18504 = *p;
            if (D.18504 != __old) goto <D.18505>; else goto <D.18506>;
            <D.18505>:
            D.18504 = *p;
            gc_debug_file.27 = gc_debug_file;
            fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", p, D.18504, __old);
            gc_debug_file.27 = gc_debug_file;
            fflush (gc_debug_file.27);
            <D.18506>:
            <D.18503>:
            <D.18501>:
          }
          <D.18499>:
          _bmap = _bmap >> 1;
          p = p + 4;
          <D.17935>:
          if (_bmap != 0) goto <D.17934>; else goto <D.17936>;
          <D.17936>:
          el_size.34 = (sizetype) el_size;
          e_start = e_start + el_size.34;
        }
        <D.17938>:
        if (e_start < e_end) goto <D.17937>; else goto <D.17939>;
        <D.17939>:
      }
      <D.18496>:
      <D.18494>:
      <D.18477>:
    }
    <D.18461>:
    goto <D.17896>;
    <D.17940>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 8;
      goto <D.17945>;
      <D.17944>:
      D.18507 = _bmap & 1;
      if (D.18507 != 0) goto <D.18508>; else goto <D.18509>;
      <D.18508>:
      {
        void * __old;

        __old = *_objptr;
        if (__old != 0B) goto <D.18510>; else goto <D.18511>;
        <D.18510>:
        simple_nursery_serial_copy_object_from_obj (_objptr, queue);
        if (0 != 0) goto <D.18512>; else goto <D.18513>;
        <D.18512>:
        D.18514 = *_objptr;
        if (D.18514 != __old) goto <D.18515>; else goto <D.18516>;
        <D.18515>:
        D.18514 = *_objptr;
        gc_debug_file.27 = gc_debug_file;
        fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18514, __old);
        gc_debug_file.27 = gc_debug_file;
        fflush (gc_debug_file.27);
        <D.18516>:
        <D.18513>:
        <D.18511>:
      }
      <D.18509>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 4;
      <D.17945>:
      if (_bmap != 0) goto <D.17944>; else goto <D.17946>;
      <D.17946>:
    }
    goto <D.17896>;
    <D.17947>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.18517 = *bitmap_data;
      D.18518 = D.18517 + 4294967295;
      bwords = (int) D.18518;
      start_run = _objptr;
      bitmap_data = bitmap_data + 4;
      if (0 != 0) goto <D.18519>; else goto <D.18520>;
      <D.18519>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.18521 = myobj->vtable;
        D.18522 = D.18521->klass;
        D.18523 = D.18522->name;
        D.18521 = myobj->vtable;
        D.18522 = D.18521->klass;
        D.18524 = D.18522->name_space;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.18524, D.18523);
      }
      <D.18520>:
      goto <D.17959>;
      <D.17958>:
      {
        gsize _bmap;

        bitmap_data.35 = bitmap_data;
        bitmap_data = bitmap_data.35 + 4;
        _bmap = *bitmap_data.35;
        _objptr = start_run;
        goto <D.17956>;
        <D.17955>:
        D.18526 = _bmap & 1;
        if (D.18526 != 0) goto <D.18527>; else goto <D.18528>;
        <D.18527>:
        {
          void * __old;

          __old = *_objptr;
          if (__old != 0B) goto <D.18529>; else goto <D.18530>;
          <D.18529>:
          simple_nursery_serial_copy_object_from_obj (_objptr, queue);
          if (0 != 0) goto <D.18531>; else goto <D.18532>;
          <D.18531>:
          D.18533 = *_objptr;
          if (D.18533 != __old) goto <D.18534>; else goto <D.18535>;
          <D.18534>:
          D.18533 = *_objptr;
          gc_debug_file.27 = gc_debug_file;
          fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18533, __old);
          gc_debug_file.27 = gc_debug_file;
          fflush (gc_debug_file.27);
          <D.18535>:
          <D.18532>:
          <D.18530>:
        }
        <D.18528>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 4;
        <D.17956>:
        if (_bmap != 0) goto <D.17955>; else goto <D.17957>;
        <D.17957>:
        start_run = start_run + 128;
      }
      <D.17959>:
      bwords.36 = bwords;
      bwords = bwords.36 + -1;
      if (bwords.36 > 0) goto <D.17958>; else goto <D.17960>;
      <D.17960>:
    }
    goto <D.17896>;
    <D.17961>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.18537 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.18537);
      mbitmap_data.37 = mbitmap_data;
      mbitmap_data = mbitmap_data.37 + 4;
      D.18539 = *mbitmap_data.37;
      D.18540 = D.18539 + 4294967295;
      mbwords = (int) D.18540;
      D.18541 = vt->klass;
      el_size = mono_array_element_size (D.18541);
      e_start = start + 16;
      D.18467 = MEM[(struct MonoArray *)start].max_length;
      el_size.38 = (unsigned int) el_size;
      D.18543 = D.18467 * el_size.38;
      e_end = e_start + D.18543;
      if (0 != 0) goto <D.18544>; else goto <D.18545>;
      <D.18544>:
      D.18541 = vt->klass;
      D.18546 = D.18541->name;
      D.18541 = vt->klass;
      D.18547 = D.18541->name_space;
      D.18537 = vt->desc;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.18537, D.18547, D.18546);
      <D.18545>:
      goto <D.17980>;
      <D.17979>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.17977>;
        <D.17976>:
        {
          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.17974>;
          <D.17973>:
          D.18549 = _bmap & 1;
          if (D.18549 != 0) goto <D.18550>; else goto <D.18551>;
          <D.18550>:
          {
            void * __old;

            __old = *_objptr;
            if (__old != 0B) goto <D.18552>; else goto <D.18553>;
            <D.18552>:
            simple_nursery_serial_copy_object_from_obj (_objptr, queue);
            if (0 != 0) goto <D.18554>; else goto <D.18555>;
            <D.18554>:
            D.18556 = *_objptr;
            if (D.18556 != __old) goto <D.18557>; else goto <D.18558>;
            <D.18557>:
            D.18556 = *_objptr;
            gc_debug_file.27 = gc_debug_file;
            fprintf (gc_debug_file.27, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18556, __old);
            gc_debug_file.27 = gc_debug_file;
            fflush (gc_debug_file.27);
            <D.18558>:
            <D.18555>:
            <D.18553>:
          }
          <D.18551>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 4;
          <D.17974>:
          if (_bmap != 0) goto <D.17973>; else goto <D.17975>;
          <D.17975>:
          _objptr = start_run + 128;
        }
        <D.17977>:
        bwords.40 = bwords;
        bwords = bwords.40 + 4294967295;
        if (bwords.40 != 0) goto <D.17976>; else goto <D.17978>;
        <D.17978>:
        el_size.41 = (sizetype) el_size;
        e_start = e_start + el_size.41;
      }
      <D.17980>:
      if (e_start < e_end) goto <D.17979>; else goto <D.17981>;
      <D.17981>:
    }
    goto <D.17896>;
    <D.17982>:
    goto <D.17896>;
    <D.17983>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.17896>:
  }
}


simple_nursery_parallel_scan_vtype (char * start, mword desc, struct SgenGrayQueue * queue)
{
  unsigned int D.18562;
  unsigned int D.18563;
  unsigned int D.18566;
  unsigned int D.18567;
  unsigned int D.18568;
  unsigned int D.18569;
  unsigned int D.18570;
  void * D.18577;
  struct FILE * gc_debug_file.42;
  int iftmp.43;
  int D.18582;
  int D.18584;
  _Bool D.18586;
  long int D.18587;
  long int D.18588;
  int iftmp.44;
  int D.18600;
  int D.18602;
  _Bool D.18604;
  long int D.18605;
  long int D.18606;
  unsigned int _index.45;
  unsigned int D.18610;
  int D.18611;
  void * D.18618;
  int iftmp.46;
  int D.18622;
  int D.18624;
  _Bool D.18626;
  long int D.18627;
  long int D.18628;
  unsigned int _index.47;
  unsigned int D.18632;
  int D.18633;
  int iftmp.48;
  int D.18643;
  int D.18645;
  _Bool D.18647;
  long int D.18648;
  long int D.18649;
  unsigned int D.18652;
  unsigned int D.18655;
  int D.18656;
  int desc.49;
  unsigned int D.18660;
  unsigned int el_size.50;
  unsigned int D.18662;
  void * D.18669;
  int iftmp.51;
  int D.18673;
  int D.18675;
  _Bool D.18677;
  long int D.18678;
  long int D.18679;
  int D.18685;
  unsigned int offset.52;
  unsigned int D.18687;
  unsigned int i.53;
  unsigned int D.18689;
  void * * D.18690;
  void * D.18697;
  int iftmp.54;
  int D.18701;
  void * D.18703;
  int D.18704;
  _Bool D.18706;
  long int D.18707;
  long int D.18708;
  void * D.18711;
  sizetype el_size.55;
  unsigned int D.18716;
  void * D.18725;
  int iftmp.56;
  int D.18729;
  int D.18731;
  _Bool D.18733;
  long int D.18734;
  long int D.18735;
  unsigned int D.18738;
  void * D.18747;
  int iftmp.57;
  int D.18751;
  int D.18753;
  _Bool D.18755;
  long int D.18756;
  long int D.18757;
  unsigned int D.18760;
  unsigned int D.18761;
  struct MonoVTable * D.18764;
  struct MonoClass * D.18765;
  const char * D.18766;
  const char * D.18767;
  gsize * bitmap_data.58;
  unsigned int D.18769;
  void * D.18778;
  int iftmp.59;
  int D.18782;
  int D.18784;
  _Bool D.18786;
  long int D.18787;
  long int D.18788;
  int bwords.60;

  start = start + 4294967288;
  D.18562 = desc & 7;
  switch (D.18562) <default: <D.17881>, case 1: <D.17798>, case 2: <D.17809>, case 3: <D.17865>, case 4: <D.17821>, case 5: <D.17857>, case 7: <D.17880>>
  <D.17798>:
  D.18563 = desc & 4294901760;
  if (D.18563 != 0) goto <D.18564>; else goto <D.18565>;
  <D.18564>:
  {
    void * * _objptr_end;
    void * * _objptr;

    _objptr = start;
    D.18566 = desc >> 16;
    D.18567 = D.18566 & 255;
    D.18568 = D.18567 * 4;
    _objptr = _objptr + D.18568;
    D.18569 = desc >> 24;
    D.18570 = D.18569 * 4;
    _objptr_end = _objptr + D.18570;
    {
      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>:
      D.18577 = *_objptr;
      gc_debug_file.42 = gc_debug_file;
      fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18577, __old);
      gc_debug_file.42 = gc_debug_file;
      fflush (gc_debug_file.42);
      <D.18576>:
      <D.18574>:
      D.18582 = sgen_ptr_in_nursery (__copy);
      if (D.18582 != 0) goto <D.18583>; else goto <D.18580>;
      <D.18583>:
      D.18584 = sgen_ptr_in_nursery (_objptr);
      if (D.18584 == 0) goto <D.18585>; else goto <D.18580>;
      <D.18585>:
      iftmp.43 = 1;
      goto <D.18581>;
      <D.18580>:
      iftmp.43 = 0;
      <D.18581>:
      D.18586 = iftmp.43 != 0;
      D.18587 = (long int) D.18586;
      D.18588 = __builtin_expect (D.18587, 0);
      if (D.18588 != 0) goto <D.18589>; else goto <D.18590>;
      <D.18589>:
      sgen_add_to_global_remset (_objptr, __copy);
      <D.18590>:
      <D.18572>:
    }
    _objptr = _objptr + 4;
    goto <D.17806>;
    <D.17805>:
    {
      void * __old;
      void * __copy;

      __old = *_objptr;
      if (__old != 0B) goto <D.18591>; else goto <D.18592>;
      <D.18591>:
      simple_nursery_parallel_copy_object (_objptr, queue);
      __copy = *_objptr;
      if (0 != 0) goto <D.18593>; else goto <D.18594>;
      <D.18593>:
      if (__old != __copy) goto <D.18595>; else goto <D.18596>;
      <D.18595>:
      D.18577 = *_objptr;
      gc_debug_file.42 = gc_debug_file;
      fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18577, __old);
      gc_debug_file.42 = gc_debug_file;
      fflush (gc_debug_file.42);
      <D.18596>:
      <D.18594>:
      D.18600 = sgen_ptr_in_nursery (__copy);
      if (D.18600 != 0) goto <D.18601>; else goto <D.18598>;
      <D.18601>:
      D.18602 = sgen_ptr_in_nursery (_objptr);
      if (D.18602 == 0) goto <D.18603>; else goto <D.18598>;
      <D.18603>:
      iftmp.44 = 1;
      goto <D.18599>;
      <D.18598>:
      iftmp.44 = 0;
      <D.18599>:
      D.18604 = iftmp.44 != 0;
      D.18605 = (long int) D.18604;
      D.18606 = __builtin_expect (D.18605, 0);
      if (D.18606 != 0) goto <D.18607>; else goto <D.18608>;
      <D.18607>:
      sgen_add_to_global_remset (_objptr, __copy);
      <D.18608>:
      <D.18592>:
    }
    _objptr = _objptr + 4;
    <D.17806>:
    if (_objptr < _objptr_end) goto <D.17805>; else goto <D.17807>;
    <D.17807>:
  }
  <D.18565>:
  goto <D.17808>;
  <D.17809>:
  {
    void * * _objptr;
    gsize _bmap;

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

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

        __old = *_objptr;
        if (__old != 0B) goto <D.18612>; else goto <D.18613>;
        <D.18612>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.18614>; else goto <D.18615>;
        <D.18614>:
        if (__old != __copy) goto <D.18616>; else goto <D.18617>;
        <D.18616>:
        D.18618 = *_objptr;
        gc_debug_file.42 = gc_debug_file;
        fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18618, __old);
        gc_debug_file.42 = gc_debug_file;
        fflush (gc_debug_file.42);
        <D.18617>:
        <D.18615>:
        D.18622 = sgen_ptr_in_nursery (__copy);
        if (D.18622 != 0) goto <D.18623>; else goto <D.18620>;
        <D.18623>:
        D.18624 = sgen_ptr_in_nursery (_objptr);
        if (D.18624 == 0) goto <D.18625>; else goto <D.18620>;
        <D.18625>:
        iftmp.46 = 1;
        goto <D.18621>;
        <D.18620>:
        iftmp.46 = 0;
        <D.18621>:
        D.18626 = iftmp.46 != 0;
        D.18627 = (long int) D.18626;
        D.18628 = __builtin_expect (D.18627, 0);
        if (D.18628 != 0) goto <D.18629>; else goto <D.18630>;
        <D.18629>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.18630>:
        <D.18613>:
      }
      _objptr = _objptr + 4;
    }
    goto <D.17819>;
    <D.17818>:
    {
      int _index;

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

        __old = *_objptr;
        if (__old != 0B) goto <D.18634>; else goto <D.18635>;
        <D.18634>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.18636>; else goto <D.18637>;
        <D.18636>:
        if (__old != __copy) goto <D.18638>; else goto <D.18639>;
        <D.18638>:
        D.18618 = *_objptr;
        gc_debug_file.42 = gc_debug_file;
        fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18618, __old);
        gc_debug_file.42 = gc_debug_file;
        fflush (gc_debug_file.42);
        <D.18639>:
        <D.18637>:
        D.18643 = sgen_ptr_in_nursery (__copy);
        if (D.18643 != 0) goto <D.18644>; else goto <D.18641>;
        <D.18644>:
        D.18645 = sgen_ptr_in_nursery (_objptr);
        if (D.18645 == 0) goto <D.18646>; else goto <D.18641>;
        <D.18646>:
        iftmp.48 = 1;
        goto <D.18642>;
        <D.18641>:
        iftmp.48 = 0;
        <D.18642>:
        D.18647 = iftmp.48 != 0;
        D.18648 = (long int) D.18647;
        D.18649 = __builtin_expect (D.18648, 0);
        if (D.18649 != 0) goto <D.18650>; else goto <D.18651>;
        <D.18650>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.18651>:
        <D.18635>:
      }
      _objptr = _objptr + 4;
    }
    <D.17819>:
    if (_bmap != 0) goto <D.17818>; else goto <D.17820>;
    <D.17820>:
  }
  goto <D.17808>;
  <D.17821>:
  D.18652 = desc & 4294950912;
  if (D.18652 != 0) goto <D.18653>; else goto <D.18654>;
  <D.18653>:
  {
    int el_size;
    int etype;

    D.18655 = desc >> 3;
    D.18656 = (int) D.18655;
    el_size = D.18656 & 1023;
    desc.49 = (int) desc;
    etype = desc.49 & 49152;
    if (etype == 16384) goto <D.18658>; else goto <D.18659>;
    <D.18658>:
    {
      void * * p;
      void * * end_refs;

      p = start + 16;
      D.18660 = MEM[(struct MonoArray *)start].max_length;
      el_size.50 = (unsigned int) el_size;
      D.18662 = D.18660 * el_size.50;
      end_refs = p + D.18662;
      goto <D.17829>;
      <D.17828>:
      {
        void * __old;
        void * __copy;

        __old = *p;
        if (__old != 0B) goto <D.18663>; else goto <D.18664>;
        <D.18663>:
        simple_nursery_parallel_copy_object (p, queue);
        __copy = *p;
        if (0 != 0) goto <D.18665>; else goto <D.18666>;
        <D.18665>:
        if (__old != __copy) goto <D.18667>; else goto <D.18668>;
        <D.18667>:
        D.18669 = *p;
        gc_debug_file.42 = gc_debug_file;
        fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", p, D.18669, __old);
        gc_debug_file.42 = gc_debug_file;
        fflush (gc_debug_file.42);
        <D.18668>:
        <D.18666>:
        D.18673 = sgen_ptr_in_nursery (__copy);
        if (D.18673 != 0) goto <D.18674>; else goto <D.18671>;
        <D.18674>:
        D.18675 = sgen_ptr_in_nursery (p);
        if (D.18675 == 0) goto <D.18676>; else goto <D.18671>;
        <D.18676>:
        iftmp.51 = 1;
        goto <D.18672>;
        <D.18671>:
        iftmp.51 = 0;
        <D.18672>:
        D.18677 = iftmp.51 != 0;
        D.18678 = (long int) D.18677;
        D.18679 = __builtin_expect (D.18678, 0);
        if (D.18679 != 0) goto <D.18680>; else goto <D.18681>;
        <D.18680>:
        sgen_add_to_global_remset (p, __copy);
        <D.18681>:
        <D.18664>:
      }
      p = p + 4;
      <D.17829>:
      if (p < end_refs) goto <D.17828>; else goto <D.17830>;
      <D.17830>:
    }
    goto <D.18682>;
    <D.18659>:
    if (etype == 32768) goto <D.18683>; else goto <D.18684>;
    <D.18683>:
    {
      int offset;
      int num_refs;
      char * e_start;
      char * e_end;

      D.18566 = desc >> 16;
      D.18685 = (int) D.18566;
      offset = D.18685 & 255;
      D.18569 = desc >> 24;
      num_refs = (int) D.18569;
      e_start = start + 16;
      D.18660 = MEM[(struct MonoArray *)start].max_length;
      el_size.50 = (unsigned int) el_size;
      D.18662 = D.18660 * el_size.50;
      e_end = e_start + D.18662;
      goto <D.17843>;
      <D.17842>:
      {
        void * * p;
        int i;

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

          i.53 = (unsigned int) i;
          D.18689 = i.53 * 4;
          D.18690 = p + D.18689;
          __old = *D.18690;
          if (__old != 0B) goto <D.18691>; else goto <D.18692>;
          <D.18691>:
          i.53 = (unsigned int) i;
          D.18689 = i.53 * 4;
          D.18690 = p + D.18689;
          simple_nursery_parallel_copy_object (D.18690, queue);
          i.53 = (unsigned int) i;
          D.18689 = i.53 * 4;
          D.18690 = p + D.18689;
          __copy = *D.18690;
          if (0 != 0) goto <D.18693>; else goto <D.18694>;
          <D.18693>:
          if (__old != __copy) goto <D.18695>; else goto <D.18696>;
          <D.18695>:
          i.53 = (unsigned int) i;
          D.18689 = i.53 * 4;
          D.18690 = p + D.18689;
          D.18697 = *D.18690;
          i.53 = (unsigned int) i;
          D.18689 = i.53 * 4;
          D.18690 = p + D.18689;
          gc_debug_file.42 = gc_debug_file;
          fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", D.18690, D.18697, __old);
          gc_debug_file.42 = gc_debug_file;
          fflush (gc_debug_file.42);
          <D.18696>:
          <D.18694>:
          D.18701 = sgen_ptr_in_nursery (__copy);
          if (D.18701 != 0) goto <D.18702>; else goto <D.18699>;
          <D.18702>:
          i.53 = (unsigned int) i;
          D.18689 = i.53 * 4;
          D.18703 = p + D.18689;
          D.18704 = sgen_ptr_in_nursery (D.18703);
          if (D.18704 == 0) goto <D.18705>; else goto <D.18699>;
          <D.18705>:
          iftmp.54 = 1;
          goto <D.18700>;
          <D.18699>:
          iftmp.54 = 0;
          <D.18700>:
          D.18706 = iftmp.54 != 0;
          D.18707 = (long int) D.18706;
          D.18708 = __builtin_expect (D.18707, 0);
          if (D.18708 != 0) goto <D.18709>; else goto <D.18710>;
          <D.18709>:
          i.53 = (unsigned int) i;
          D.18689 = i.53 * 4;
          D.18711 = p + D.18689;
          sgen_add_to_global_remset (D.18711, __copy);
          <D.18710>:
          <D.18692>:
        }
        i = i + 1;
        <D.17840>:
        if (i < num_refs) goto <D.17839>; else goto <D.17841>;
        <D.17841>:
        el_size.55 = (sizetype) el_size;
        e_start = e_start + el_size.55;
      }
      <D.17843>:
      if (e_start < e_end) goto <D.17842>; else goto <D.17844>;
      <D.17844>:
    }
    goto <D.18713>;
    <D.18684>:
    if (etype == 49152) goto <D.18714>; else goto <D.18715>;
    <D.18714>:
    {
      char * e_start;
      char * e_end;

      e_start = start + 16;
      D.18660 = MEM[(struct MonoArray *)start].max_length;
      el_size.50 = (unsigned int) el_size;
      D.18662 = D.18660 * el_size.50;
      e_end = e_start + D.18662;
      goto <D.17855>;
      <D.17854>:
      {
        void * * p;
        gsize _bmap;

        p = e_start;
        _bmap = desc >> 16;
        goto <D.17852>;
        <D.17851>:
        D.18716 = _bmap & 1;
        if (D.18716 != 0) goto <D.18717>; else goto <D.18718>;
        <D.18717>:
        {
          void * __old;
          void * __copy;

          __old = *p;
          if (__old != 0B) goto <D.18719>; else goto <D.18720>;
          <D.18719>:
          simple_nursery_parallel_copy_object (p, queue);
          __copy = *p;
          if (0 != 0) goto <D.18721>; else goto <D.18722>;
          <D.18721>:
          if (__old != __copy) goto <D.18723>; else goto <D.18724>;
          <D.18723>:
          D.18725 = *p;
          gc_debug_file.42 = gc_debug_file;
          fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", p, D.18725, __old);
          gc_debug_file.42 = gc_debug_file;
          fflush (gc_debug_file.42);
          <D.18724>:
          <D.18722>:
          D.18729 = sgen_ptr_in_nursery (__copy);
          if (D.18729 != 0) goto <D.18730>; else goto <D.18727>;
          <D.18730>:
          D.18731 = sgen_ptr_in_nursery (p);
          if (D.18731 == 0) goto <D.18732>; else goto <D.18727>;
          <D.18732>:
          iftmp.56 = 1;
          goto <D.18728>;
          <D.18727>:
          iftmp.56 = 0;
          <D.18728>:
          D.18733 = iftmp.56 != 0;
          D.18734 = (long int) D.18733;
          D.18735 = __builtin_expect (D.18734, 0);
          if (D.18735 != 0) goto <D.18736>; else goto <D.18737>;
          <D.18736>:
          sgen_add_to_global_remset (p, __copy);
          <D.18737>:
          <D.18720>:
        }
        <D.18718>:
        _bmap = _bmap >> 1;
        p = p + 4;
        <D.17852>:
        if (_bmap != 0) goto <D.17851>; else goto <D.17853>;
        <D.17853>:
        el_size.55 = (sizetype) el_size;
        e_start = e_start + el_size.55;
      }
      <D.17855>:
      if (e_start < e_end) goto <D.17854>; else goto <D.17856>;
      <D.17856>:
    }
    <D.18715>:
    <D.18713>:
    <D.18682>:
  }
  <D.18654>:
  goto <D.17808>;
  <D.17857>:
  {
    void * * _objptr;
    gsize _bmap;

    _objptr = start;
    _bmap = desc >> 3;
    _objptr = _objptr + 8;
    goto <D.17863>;
    <D.17862>:
    D.18738 = _bmap & 1;
    if (D.18738 != 0) goto <D.18739>; else goto <D.18740>;
    <D.18739>:
    {
      void * __old;
      void * __copy;

      __old = *_objptr;
      if (__old != 0B) goto <D.18741>; else goto <D.18742>;
      <D.18741>:
      simple_nursery_parallel_copy_object (_objptr, queue);
      __copy = *_objptr;
      if (0 != 0) goto <D.18743>; else goto <D.18744>;
      <D.18743>:
      if (__old != __copy) goto <D.18745>; else goto <D.18746>;
      <D.18745>:
      D.18747 = *_objptr;
      gc_debug_file.42 = gc_debug_file;
      fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18747, __old);
      gc_debug_file.42 = gc_debug_file;
      fflush (gc_debug_file.42);
      <D.18746>:
      <D.18744>:
      D.18751 = sgen_ptr_in_nursery (__copy);
      if (D.18751 != 0) goto <D.18752>; else goto <D.18749>;
      <D.18752>:
      D.18753 = sgen_ptr_in_nursery (_objptr);
      if (D.18753 == 0) goto <D.18754>; else goto <D.18749>;
      <D.18754>:
      iftmp.57 = 1;
      goto <D.18750>;
      <D.18749>:
      iftmp.57 = 0;
      <D.18750>:
      D.18755 = iftmp.57 != 0;
      D.18756 = (long int) D.18755;
      D.18757 = __builtin_expect (D.18756, 0);
      if (D.18757 != 0) goto <D.18758>; else goto <D.18759>;
      <D.18758>:
      sgen_add_to_global_remset (_objptr, __copy);
      <D.18759>:
      <D.18742>:
    }
    <D.18740>:
    _bmap = _bmap >> 1;
    _objptr = _objptr + 4;
    <D.17863>:
    if (_bmap != 0) goto <D.17862>; else goto <D.17864>;
    <D.17864>:
  }
  goto <D.17808>;
  <D.17865>:
  {
    void * * _objptr;
    gsize * bitmap_data;
    int bwords;
    void * * start_run;

    _objptr = start;
    bitmap_data = sgen_get_complex_descriptor (desc);
    D.18760 = *bitmap_data;
    D.18761 = D.18760 + 4294967295;
    bwords = (int) D.18761;
    start_run = _objptr;
    bitmap_data = bitmap_data + 4;
    if (0 != 0) goto <D.18762>; else goto <D.18763>;
    <D.18762>:
    {
      struct MonoObject * myobj;

      myobj = start;
      D.18764 = myobj->vtable;
      D.18765 = D.18764->klass;
      D.18766 = D.18765->name;
      D.18764 = myobj->vtable;
      D.18765 = D.18764->klass;
      D.18767 = D.18765->name_space;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.18767, D.18766);
    }
    <D.18763>:
    goto <D.17878>;
    <D.17877>:
    {
      gsize _bmap;

      bitmap_data.58 = bitmap_data;
      bitmap_data = bitmap_data.58 + 4;
      _bmap = *bitmap_data.58;
      _objptr = start_run;
      goto <D.17875>;
      <D.17874>:
      D.18769 = _bmap & 1;
      if (D.18769 != 0) goto <D.18770>; else goto <D.18771>;
      <D.18770>:
      {
        void * __old;
        void * __copy;

        __old = *_objptr;
        if (__old != 0B) goto <D.18772>; else goto <D.18773>;
        <D.18772>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.18774>; else goto <D.18775>;
        <D.18774>:
        if (__old != __copy) goto <D.18776>; else goto <D.18777>;
        <D.18776>:
        D.18778 = *_objptr;
        gc_debug_file.42 = gc_debug_file;
        fprintf (gc_debug_file.42, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18778, __old);
        gc_debug_file.42 = gc_debug_file;
        fflush (gc_debug_file.42);
        <D.18777>:
        <D.18775>:
        D.18782 = sgen_ptr_in_nursery (__copy);
        if (D.18782 != 0) goto <D.18783>; else goto <D.18780>;
        <D.18783>:
        D.18784 = sgen_ptr_in_nursery (_objptr);
        if (D.18784 == 0) goto <D.18785>; else goto <D.18780>;
        <D.18785>:
        iftmp.59 = 1;
        goto <D.18781>;
        <D.18780>:
        iftmp.59 = 0;
        <D.18781>:
        D.18786 = iftmp.59 != 0;
        D.18787 = (long int) D.18786;
        D.18788 = __builtin_expect (D.18787, 0);
        if (D.18788 != 0) goto <D.18789>; else goto <D.18790>;
        <D.18789>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.18790>:
        <D.18773>:
      }
      <D.18771>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 4;
      <D.17875>:
      if (_bmap != 0) goto <D.17874>; else goto <D.17876>;
      <D.17876>:
      start_run = start_run + 128;
    }
    <D.17878>:
    bwords.60 = bwords;
    bwords = bwords.60 + -1;
    if (bwords.60 > 0) goto <D.17877>; else goto <D.17879>;
    <D.17879>:
  }
  goto <D.17808>;
  <D.17880>:
  goto <D.17808>;
  <D.17881>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
  <D.17808>:
}


simple_nursery_parallel_scan_object (char * start, struct SgenGrayQueue * queue)
{
  unsigned int D.18793;
  unsigned int D.18794;
  unsigned int D.18795;
  unsigned int D.18796;
  unsigned int D.18799;
  unsigned int D.18800;
  unsigned int D.18801;
  unsigned int D.18802;
  unsigned int D.18803;
  void * D.18810;
  struct FILE * gc_debug_file.61;
  int iftmp.62;
  int D.18815;
  int D.18817;
  _Bool D.18819;
  long int D.18820;
  long int D.18821;
  int iftmp.63;
  int D.18833;
  int D.18835;
  _Bool D.18837;
  long int D.18838;
  long int D.18839;
  unsigned int _index.64;
  unsigned int D.18843;
  int D.18844;
  void * D.18851;
  int iftmp.65;
  int D.18855;
  int D.18857;
  _Bool D.18859;
  long int D.18860;
  long int D.18861;
  unsigned int _index.66;
  unsigned int D.18865;
  int D.18866;
  int iftmp.67;
  int D.18876;
  int D.18878;
  _Bool D.18880;
  long int D.18881;
  long int D.18882;
  unsigned int D.18885;
  unsigned int D.18888;
  int D.18889;
  int desc.68;
  unsigned int D.18893;
  unsigned int el_size.69;
  unsigned int D.18895;
  void * D.18902;
  int iftmp.70;
  int D.18906;
  int D.18908;
  _Bool D.18910;
  long int D.18911;
  long int D.18912;
  int D.18918;
  unsigned int offset.71;
  unsigned int D.18920;
  unsigned int i.72;
  unsigned int D.18922;
  void * * D.18923;
  void * D.18930;
  int iftmp.73;
  int D.18934;
  void * D.18936;
  int D.18937;
  _Bool D.18939;
  long int D.18940;
  long int D.18941;
  void * D.18944;
  sizetype el_size.74;
  unsigned int D.18949;
  void * D.18958;
  int iftmp.75;
  int D.18962;
  int D.18964;
  _Bool D.18966;
  long int D.18967;
  long int D.18968;
  unsigned int D.18971;
  void * D.18980;
  int iftmp.76;
  int D.18984;
  int D.18986;
  _Bool D.18988;
  long int D.18989;
  long int D.18990;
  unsigned int D.18993;
  unsigned int D.18994;
  struct MonoVTable * D.18997;
  struct MonoClass * D.18998;
  const char * D.18999;
  const char * D.19000;
  gsize * bitmap_data.77;
  unsigned int D.19002;
  void * D.19011;
  int iftmp.78;
  int D.19015;
  int D.19017;
  _Bool D.19019;
  long int D.19020;
  long int D.19021;
  int bwords.79;
  unsigned int D.19025;
  gsize * mbitmap_data.80;
  unsigned int D.19027;
  unsigned int D.19028;
  struct MonoClass * D.19029;
  unsigned int el_size.81;
  unsigned int D.19031;
  const char * D.19034;
  const char * D.19035;
  gsize * bitmap_data.82;
  unsigned int D.19037;
  void * D.19046;
  int iftmp.83;
  int D.19050;
  int D.19052;
  _Bool D.19054;
  long int D.19055;
  long int D.19056;
  unsigned int bwords.84;
  sizetype el_size.85;

  {
    struct GCVTable * vt;
    mword desc;

    D.18793 = MEM[(mword *)start];
    D.18794 = D.18793 & 4294967292;
    vt = (struct GCVTable *) D.18794;
    desc = vt->desc;
    D.18795 = desc & 7;
    switch (D.18795) <default: <D.17792>, case 1: <D.17687>, case 2: <D.17698>, case 3: <D.17754>, case 4: <D.17710>, case 5: <D.17746>, case 6: <D.17769>, case 7: <D.17791>>
    <D.17687>:
    D.18796 = desc & 4294901760;
    if (D.18796 != 0) goto <D.18797>; else goto <D.18798>;
    <D.18797>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.18799 = desc >> 16;
      D.18800 = D.18799 & 255;
      D.18801 = D.18800 * 4;
      _objptr = _objptr + D.18801;
      D.18802 = desc >> 24;
      D.18803 = D.18802 * 4;
      _objptr_end = _objptr + D.18803;
      {
        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>:
        D.18810 = *_objptr;
        gc_debug_file.61 = gc_debug_file;
        fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18810, __old);
        gc_debug_file.61 = gc_debug_file;
        fflush (gc_debug_file.61);
        <D.18809>:
        <D.18807>:
        D.18815 = sgen_ptr_in_nursery (__copy);
        if (D.18815 != 0) goto <D.18816>; else goto <D.18813>;
        <D.18816>:
        D.18817 = sgen_ptr_in_nursery (_objptr);
        if (D.18817 == 0) goto <D.18818>; else goto <D.18813>;
        <D.18818>:
        iftmp.62 = 1;
        goto <D.18814>;
        <D.18813>:
        iftmp.62 = 0;
        <D.18814>:
        D.18819 = iftmp.62 != 0;
        D.18820 = (long int) D.18819;
        D.18821 = __builtin_expect (D.18820, 0);
        if (D.18821 != 0) goto <D.18822>; else goto <D.18823>;
        <D.18822>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.18823>:
        <D.18805>:
      }
      _objptr = _objptr + 4;
      goto <D.17695>;
      <D.17694>:
      {
        void * __old;
        void * __copy;

        __old = *_objptr;
        if (__old != 0B) goto <D.18824>; else goto <D.18825>;
        <D.18824>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.18826>; else goto <D.18827>;
        <D.18826>:
        if (__old != __copy) goto <D.18828>; else goto <D.18829>;
        <D.18828>:
        D.18810 = *_objptr;
        gc_debug_file.61 = gc_debug_file;
        fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18810, __old);
        gc_debug_file.61 = gc_debug_file;
        fflush (gc_debug_file.61);
        <D.18829>:
        <D.18827>:
        D.18833 = sgen_ptr_in_nursery (__copy);
        if (D.18833 != 0) goto <D.18834>; else goto <D.18831>;
        <D.18834>:
        D.18835 = sgen_ptr_in_nursery (_objptr);
        if (D.18835 == 0) goto <D.18836>; else goto <D.18831>;
        <D.18836>:
        iftmp.63 = 1;
        goto <D.18832>;
        <D.18831>:
        iftmp.63 = 0;
        <D.18832>:
        D.18837 = iftmp.63 != 0;
        D.18838 = (long int) D.18837;
        D.18839 = __builtin_expect (D.18838, 0);
        if (D.18839 != 0) goto <D.18840>; else goto <D.18841>;
        <D.18840>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.18841>:
        <D.18825>:
      }
      _objptr = _objptr + 4;
      <D.17695>:
      if (_objptr < _objptr_end) goto <D.17694>; else goto <D.17696>;
      <D.17696>:
    }
    <D.18798>:
    goto <D.17697>;
    <D.17698>:
    {
      void * * _objptr;
      gsize _bmap;

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

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

          __old = *_objptr;
          if (__old != 0B) goto <D.18845>; else goto <D.18846>;
          <D.18845>:
          simple_nursery_parallel_copy_object (_objptr, queue);
          __copy = *_objptr;
          if (0 != 0) goto <D.18847>; else goto <D.18848>;
          <D.18847>:
          if (__old != __copy) goto <D.18849>; else goto <D.18850>;
          <D.18849>:
          D.18851 = *_objptr;
          gc_debug_file.61 = gc_debug_file;
          fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18851, __old);
          gc_debug_file.61 = gc_debug_file;
          fflush (gc_debug_file.61);
          <D.18850>:
          <D.18848>:
          D.18855 = sgen_ptr_in_nursery (__copy);
          if (D.18855 != 0) goto <D.18856>; else goto <D.18853>;
          <D.18856>:
          D.18857 = sgen_ptr_in_nursery (_objptr);
          if (D.18857 == 0) goto <D.18858>; else goto <D.18853>;
          <D.18858>:
          iftmp.65 = 1;
          goto <D.18854>;
          <D.18853>:
          iftmp.65 = 0;
          <D.18854>:
          D.18859 = iftmp.65 != 0;
          D.18860 = (long int) D.18859;
          D.18861 = __builtin_expect (D.18860, 0);
          if (D.18861 != 0) goto <D.18862>; else goto <D.18863>;
          <D.18862>:
          sgen_add_to_global_remset (_objptr, __copy);
          <D.18863>:
          <D.18846>:
        }
        _objptr = _objptr + 4;
      }
      goto <D.17708>;
      <D.17707>:
      {
        int _index;

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

          __old = *_objptr;
          if (__old != 0B) goto <D.18867>; else goto <D.18868>;
          <D.18867>:
          simple_nursery_parallel_copy_object (_objptr, queue);
          __copy = *_objptr;
          if (0 != 0) goto <D.18869>; else goto <D.18870>;
          <D.18869>:
          if (__old != __copy) goto <D.18871>; else goto <D.18872>;
          <D.18871>:
          D.18851 = *_objptr;
          gc_debug_file.61 = gc_debug_file;
          fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18851, __old);
          gc_debug_file.61 = gc_debug_file;
          fflush (gc_debug_file.61);
          <D.18872>:
          <D.18870>:
          D.18876 = sgen_ptr_in_nursery (__copy);
          if (D.18876 != 0) goto <D.18877>; else goto <D.18874>;
          <D.18877>:
          D.18878 = sgen_ptr_in_nursery (_objptr);
          if (D.18878 == 0) goto <D.18879>; else goto <D.18874>;
          <D.18879>:
          iftmp.67 = 1;
          goto <D.18875>;
          <D.18874>:
          iftmp.67 = 0;
          <D.18875>:
          D.18880 = iftmp.67 != 0;
          D.18881 = (long int) D.18880;
          D.18882 = __builtin_expect (D.18881, 0);
          if (D.18882 != 0) goto <D.18883>; else goto <D.18884>;
          <D.18883>:
          sgen_add_to_global_remset (_objptr, __copy);
          <D.18884>:
          <D.18868>:
        }
        _objptr = _objptr + 4;
      }
      <D.17708>:
      if (_bmap != 0) goto <D.17707>; else goto <D.17709>;
      <D.17709>:
    }
    goto <D.17697>;
    <D.17710>:
    D.18885 = desc & 4294950912;
    if (D.18885 != 0) goto <D.18886>; else goto <D.18887>;
    <D.18886>:
    {
      int el_size;
      int etype;

      D.18888 = desc >> 3;
      D.18889 = (int) D.18888;
      el_size = D.18889 & 1023;
      desc.68 = (int) desc;
      etype = desc.68 & 49152;
      if (etype == 16384) goto <D.18891>; else goto <D.18892>;
      <D.18891>:
      {
        void * * p;
        void * * end_refs;

        p = start + 16;
        D.18893 = MEM[(struct MonoArray *)start].max_length;
        el_size.69 = (unsigned int) el_size;
        D.18895 = D.18893 * el_size.69;
        end_refs = p + D.18895;
        goto <D.17718>;
        <D.17717>:
        {
          void * __old;
          void * __copy;

          __old = *p;
          if (__old != 0B) goto <D.18896>; else goto <D.18897>;
          <D.18896>:
          simple_nursery_parallel_copy_object (p, queue);
          __copy = *p;
          if (0 != 0) goto <D.18898>; else goto <D.18899>;
          <D.18898>:
          if (__old != __copy) goto <D.18900>; else goto <D.18901>;
          <D.18900>:
          D.18902 = *p;
          gc_debug_file.61 = gc_debug_file;
          fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", p, D.18902, __old);
          gc_debug_file.61 = gc_debug_file;
          fflush (gc_debug_file.61);
          <D.18901>:
          <D.18899>:
          D.18906 = sgen_ptr_in_nursery (__copy);
          if (D.18906 != 0) goto <D.18907>; else goto <D.18904>;
          <D.18907>:
          D.18908 = sgen_ptr_in_nursery (p);
          if (D.18908 == 0) goto <D.18909>; else goto <D.18904>;
          <D.18909>:
          iftmp.70 = 1;
          goto <D.18905>;
          <D.18904>:
          iftmp.70 = 0;
          <D.18905>:
          D.18910 = iftmp.70 != 0;
          D.18911 = (long int) D.18910;
          D.18912 = __builtin_expect (D.18911, 0);
          if (D.18912 != 0) goto <D.18913>; else goto <D.18914>;
          <D.18913>:
          sgen_add_to_global_remset (p, __copy);
          <D.18914>:
          <D.18897>:
        }
        p = p + 4;
        <D.17718>:
        if (p < end_refs) goto <D.17717>; else goto <D.17719>;
        <D.17719>:
      }
      goto <D.18915>;
      <D.18892>:
      if (etype == 32768) goto <D.18916>; else goto <D.18917>;
      <D.18916>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.18799 = desc >> 16;
        D.18918 = (int) D.18799;
        offset = D.18918 & 255;
        D.18802 = desc >> 24;
        num_refs = (int) D.18802;
        e_start = start + 16;
        D.18893 = MEM[(struct MonoArray *)start].max_length;
        el_size.69 = (unsigned int) el_size;
        D.18895 = D.18893 * el_size.69;
        e_end = e_start + D.18895;
        goto <D.17732>;
        <D.17731>:
        {
          void * * p;
          int i;

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

            i.72 = (unsigned int) i;
            D.18922 = i.72 * 4;
            D.18923 = p + D.18922;
            __old = *D.18923;
            if (__old != 0B) goto <D.18924>; else goto <D.18925>;
            <D.18924>:
            i.72 = (unsigned int) i;
            D.18922 = i.72 * 4;
            D.18923 = p + D.18922;
            simple_nursery_parallel_copy_object (D.18923, queue);
            i.72 = (unsigned int) i;
            D.18922 = i.72 * 4;
            D.18923 = p + D.18922;
            __copy = *D.18923;
            if (0 != 0) goto <D.18926>; else goto <D.18927>;
            <D.18926>:
            if (__old != __copy) goto <D.18928>; else goto <D.18929>;
            <D.18928>:
            i.72 = (unsigned int) i;
            D.18922 = i.72 * 4;
            D.18923 = p + D.18922;
            D.18930 = *D.18923;
            i.72 = (unsigned int) i;
            D.18922 = i.72 * 4;
            D.18923 = p + D.18922;
            gc_debug_file.61 = gc_debug_file;
            fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", D.18923, D.18930, __old);
            gc_debug_file.61 = gc_debug_file;
            fflush (gc_debug_file.61);
            <D.18929>:
            <D.18927>:
            D.18934 = sgen_ptr_in_nursery (__copy);
            if (D.18934 != 0) goto <D.18935>; else goto <D.18932>;
            <D.18935>:
            i.72 = (unsigned int) i;
            D.18922 = i.72 * 4;
            D.18936 = p + D.18922;
            D.18937 = sgen_ptr_in_nursery (D.18936);
            if (D.18937 == 0) goto <D.18938>; else goto <D.18932>;
            <D.18938>:
            iftmp.73 = 1;
            goto <D.18933>;
            <D.18932>:
            iftmp.73 = 0;
            <D.18933>:
            D.18939 = iftmp.73 != 0;
            D.18940 = (long int) D.18939;
            D.18941 = __builtin_expect (D.18940, 0);
            if (D.18941 != 0) goto <D.18942>; else goto <D.18943>;
            <D.18942>:
            i.72 = (unsigned int) i;
            D.18922 = i.72 * 4;
            D.18944 = p + D.18922;
            sgen_add_to_global_remset (D.18944, __copy);
            <D.18943>:
            <D.18925>:
          }
          i = i + 1;
          <D.17729>:
          if (i < num_refs) goto <D.17728>; else goto <D.17730>;
          <D.17730>:
          el_size.74 = (sizetype) el_size;
          e_start = e_start + el_size.74;
        }
        <D.17732>:
        if (e_start < e_end) goto <D.17731>; else goto <D.17733>;
        <D.17733>:
      }
      goto <D.18946>;
      <D.18917>:
      if (etype == 49152) goto <D.18947>; else goto <D.18948>;
      <D.18947>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 16;
        D.18893 = MEM[(struct MonoArray *)start].max_length;
        el_size.69 = (unsigned int) el_size;
        D.18895 = D.18893 * el_size.69;
        e_end = e_start + D.18895;
        goto <D.17744>;
        <D.17743>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.17741>;
          <D.17740>:
          D.18949 = _bmap & 1;
          if (D.18949 != 0) goto <D.18950>; else goto <D.18951>;
          <D.18950>:
          {
            void * __old;
            void * __copy;

            __old = *p;
            if (__old != 0B) goto <D.18952>; else goto <D.18953>;
            <D.18952>:
            simple_nursery_parallel_copy_object (p, queue);
            __copy = *p;
            if (0 != 0) goto <D.18954>; else goto <D.18955>;
            <D.18954>:
            if (__old != __copy) goto <D.18956>; else goto <D.18957>;
            <D.18956>:
            D.18958 = *p;
            gc_debug_file.61 = gc_debug_file;
            fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", p, D.18958, __old);
            gc_debug_file.61 = gc_debug_file;
            fflush (gc_debug_file.61);
            <D.18957>:
            <D.18955>:
            D.18962 = sgen_ptr_in_nursery (__copy);
            if (D.18962 != 0) goto <D.18963>; else goto <D.18960>;
            <D.18963>:
            D.18964 = sgen_ptr_in_nursery (p);
            if (D.18964 == 0) goto <D.18965>; else goto <D.18960>;
            <D.18965>:
            iftmp.75 = 1;
            goto <D.18961>;
            <D.18960>:
            iftmp.75 = 0;
            <D.18961>:
            D.18966 = iftmp.75 != 0;
            D.18967 = (long int) D.18966;
            D.18968 = __builtin_expect (D.18967, 0);
            if (D.18968 != 0) goto <D.18969>; else goto <D.18970>;
            <D.18969>:
            sgen_add_to_global_remset (p, __copy);
            <D.18970>:
            <D.18953>:
          }
          <D.18951>:
          _bmap = _bmap >> 1;
          p = p + 4;
          <D.17741>:
          if (_bmap != 0) goto <D.17740>; else goto <D.17742>;
          <D.17742>:
          el_size.74 = (sizetype) el_size;
          e_start = e_start + el_size.74;
        }
        <D.17744>:
        if (e_start < e_end) goto <D.17743>; else goto <D.17745>;
        <D.17745>:
      }
      <D.18948>:
      <D.18946>:
      <D.18915>:
    }
    <D.18887>:
    goto <D.17697>;
    <D.17746>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 8;
      goto <D.17752>;
      <D.17751>:
      D.18971 = _bmap & 1;
      if (D.18971 != 0) goto <D.18972>; else goto <D.18973>;
      <D.18972>:
      {
        void * __old;
        void * __copy;

        __old = *_objptr;
        if (__old != 0B) goto <D.18974>; else goto <D.18975>;
        <D.18974>:
        simple_nursery_parallel_copy_object (_objptr, queue);
        __copy = *_objptr;
        if (0 != 0) goto <D.18976>; else goto <D.18977>;
        <D.18976>:
        if (__old != __copy) goto <D.18978>; else goto <D.18979>;
        <D.18978>:
        D.18980 = *_objptr;
        gc_debug_file.61 = gc_debug_file;
        fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.18980, __old);
        gc_debug_file.61 = gc_debug_file;
        fflush (gc_debug_file.61);
        <D.18979>:
        <D.18977>:
        D.18984 = sgen_ptr_in_nursery (__copy);
        if (D.18984 != 0) goto <D.18985>; else goto <D.18982>;
        <D.18985>:
        D.18986 = sgen_ptr_in_nursery (_objptr);
        if (D.18986 == 0) goto <D.18987>; else goto <D.18982>;
        <D.18987>:
        iftmp.76 = 1;
        goto <D.18983>;
        <D.18982>:
        iftmp.76 = 0;
        <D.18983>:
        D.18988 = iftmp.76 != 0;
        D.18989 = (long int) D.18988;
        D.18990 = __builtin_expect (D.18989, 0);
        if (D.18990 != 0) goto <D.18991>; else goto <D.18992>;
        <D.18991>:
        sgen_add_to_global_remset (_objptr, __copy);
        <D.18992>:
        <D.18975>:
      }
      <D.18973>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 4;
      <D.17752>:
      if (_bmap != 0) goto <D.17751>; else goto <D.17753>;
      <D.17753>:
    }
    goto <D.17697>;
    <D.17754>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.18993 = *bitmap_data;
      D.18994 = D.18993 + 4294967295;
      bwords = (int) D.18994;
      start_run = _objptr;
      bitmap_data = bitmap_data + 4;
      if (0 != 0) goto <D.18995>; else goto <D.18996>;
      <D.18995>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.18997 = myobj->vtable;
        D.18998 = D.18997->klass;
        D.18999 = D.18998->name;
        D.18997 = myobj->vtable;
        D.18998 = D.18997->klass;
        D.19000 = D.18998->name_space;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.19000, D.18999);
      }
      <D.18996>:
      goto <D.17767>;
      <D.17766>:
      {
        gsize _bmap;

        bitmap_data.77 = bitmap_data;
        bitmap_data = bitmap_data.77 + 4;
        _bmap = *bitmap_data.77;
        _objptr = start_run;
        goto <D.17764>;
        <D.17763>:
        D.19002 = _bmap & 1;
        if (D.19002 != 0) goto <D.19003>; else goto <D.19004>;
        <D.19003>:
        {
          void * __old;
          void * __copy;

          __old = *_objptr;
          if (__old != 0B) goto <D.19005>; else goto <D.19006>;
          <D.19005>:
          simple_nursery_parallel_copy_object (_objptr, queue);
          __copy = *_objptr;
          if (0 != 0) goto <D.19007>; else goto <D.19008>;
          <D.19007>:
          if (__old != __copy) goto <D.19009>; else goto <D.19010>;
          <D.19009>:
          D.19011 = *_objptr;
          gc_debug_file.61 = gc_debug_file;
          fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.19011, __old);
          gc_debug_file.61 = gc_debug_file;
          fflush (gc_debug_file.61);
          <D.19010>:
          <D.19008>:
          D.19015 = sgen_ptr_in_nursery (__copy);
          if (D.19015 != 0) goto <D.19016>; else goto <D.19013>;
          <D.19016>:
          D.19017 = sgen_ptr_in_nursery (_objptr);
          if (D.19017 == 0) goto <D.19018>; else goto <D.19013>;
          <D.19018>:
          iftmp.78 = 1;
          goto <D.19014>;
          <D.19013>:
          iftmp.78 = 0;
          <D.19014>:
          D.19019 = iftmp.78 != 0;
          D.19020 = (long int) D.19019;
          D.19021 = __builtin_expect (D.19020, 0);
          if (D.19021 != 0) goto <D.19022>; else goto <D.19023>;
          <D.19022>:
          sgen_add_to_global_remset (_objptr, __copy);
          <D.19023>:
          <D.19006>:
        }
        <D.19004>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 4;
        <D.17764>:
        if (_bmap != 0) goto <D.17763>; else goto <D.17765>;
        <D.17765>:
        start_run = start_run + 128;
      }
      <D.17767>:
      bwords.79 = bwords;
      bwords = bwords.79 + -1;
      if (bwords.79 > 0) goto <D.17766>; else goto <D.17768>;
      <D.17768>:
    }
    goto <D.17697>;
    <D.17769>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.19025 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.19025);
      mbitmap_data.80 = mbitmap_data;
      mbitmap_data = mbitmap_data.80 + 4;
      D.19027 = *mbitmap_data.80;
      D.19028 = D.19027 + 4294967295;
      mbwords = (int) D.19028;
      D.19029 = vt->klass;
      el_size = mono_array_element_size (D.19029);
      e_start = start + 16;
      D.18893 = MEM[(struct MonoArray *)start].max_length;
      el_size.81 = (unsigned int) el_size;
      D.19031 = D.18893 * el_size.81;
      e_end = e_start + D.19031;
      if (0 != 0) goto <D.19032>; else goto <D.19033>;
      <D.19032>:
      D.19029 = vt->klass;
      D.19034 = D.19029->name;
      D.19029 = vt->klass;
      D.19035 = D.19029->name_space;
      D.19025 = vt->desc;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.19025, D.19035, D.19034);
      <D.19033>:
      goto <D.17789>;
      <D.17788>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.17786>;
        <D.17785>:
        {
          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.17783>;
          <D.17782>:
          D.19037 = _bmap & 1;
          if (D.19037 != 0) goto <D.19038>; else goto <D.19039>;
          <D.19038>:
          {
            void * __old;
            void * __copy;

            __old = *_objptr;
            if (__old != 0B) goto <D.19040>; else goto <D.19041>;
            <D.19040>:
            simple_nursery_parallel_copy_object (_objptr, queue);
            __copy = *_objptr;
            if (0 != 0) goto <D.19042>; else goto <D.19043>;
            <D.19042>:
            if (__old != __copy) goto <D.19044>; else goto <D.19045>;
            <D.19044>:
            D.19046 = *_objptr;
            gc_debug_file.61 = gc_debug_file;
            fprintf (gc_debug_file.61, "Overwrote field at %p with %p (was: %p)\n", _objptr, D.19046, __old);
            gc_debug_file.61 = gc_debug_file;
            fflush (gc_debug_file.61);
            <D.19045>:
            <D.19043>:
            D.19050 = sgen_ptr_in_nursery (__copy);
            if (D.19050 != 0) goto <D.19051>; else goto <D.19048>;
            <D.19051>:
            D.19052 = sgen_ptr_in_nursery (_objptr);
            if (D.19052 == 0) goto <D.19053>; else goto <D.19048>;
            <D.19053>:
            iftmp.83 = 1;
            goto <D.19049>;
            <D.19048>:
            iftmp.83 = 0;
            <D.19049>:
            D.19054 = iftmp.83 != 0;
            D.19055 = (long int) D.19054;
            D.19056 = __builtin_expect (D.19055, 0);
            if (D.19056 != 0) goto <D.19057>; else goto <D.19058>;
            <D.19057>:
            sgen_add_to_global_remset (_objptr, __copy);
            <D.19058>:
            <D.19041>:
          }
          <D.19039>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 4;
          <D.17783>:
          if (_bmap != 0) goto <D.17782>; else goto <D.17784>;
          <D.17784>:
          _objptr = start_run + 128;
        }
        <D.17786>:
        bwords.84 = bwords;
        bwords = bwords.84 + 4294967295;
        if (bwords.84 != 0) goto <D.17785>; else goto <D.17787>;
        <D.17787>:
        el_size.85 = (sizetype) el_size;
        e_start = e_start + el_size.85;
      }
      <D.17789>:
      if (e_start < e_end) goto <D.17788>; else goto <D.17790>;
      <D.17790>:
    }
    goto <D.17697>;
    <D.17791>:
    goto <D.17697>;
    <D.17792>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.17697>:
  }
}


simple_nursery_parallel_copy_object (void * * obj_slot, struct SgenGrayQueue * queue)
{
  int current_collection_generation.86;
  int D.19065;
  unsigned int D.19068;
  unsigned int D.19069;
  unsigned int D.19072;
  int D.19075;
  unsigned int D.19078;
  unsigned int D.19079;
  void * D.19080;
  unsigned int D.19081;
  _Bool D.19082;
  long int D.19083;
  long int D.19084;
  unsigned int destination.87;
  unsigned int D.19088;
  void * D.19089;
  void * D.19090;
  struct SgenGrayQueue * iftmp.88;
  int D.19098;
  _Bool D.19102;
  long int D.19103;
  long int D.19104;
  char * obj;
  mword vtable_word;
  mword objsize;
  struct MonoVTable * vt;
  void * destination;
  gboolean has_references;

  obj = *obj_slot;
  if (0 != 0) goto <D.19062>; else goto <D.19063>;
  <D.19062>:
  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.17679>:
  goto <D.17679>;
  <D.19063>:
  D.19065 = sgen_ptr_in_nursery (obj);
  if (D.19065 == 0) goto <D.19066>; else goto <D.19067>;
  <D.19066>:
  return;
  <D.19067>:
  vtable_word = MEM[(mword *)obj];
  D.19068 = vtable_word & 4294967292;
  vt = (struct MonoVTable *) D.19068;
  D.19069 = vtable_word & 1;
  if (D.19069 != 0) goto <D.19070>; else goto <D.19071>;
  <D.19070>:
  *obj_slot = vt;
  return;
  <D.19071>:
  D.19072 = vtable_word & 2;
  if (D.19072 != 0) goto <D.19073>; else goto <D.19074>;
  <D.19073>:
  return;
  <D.19074>:
  D.19075 = sgen_nursery_is_to_space (obj);
  if (D.19075 != 0) goto <D.19076>; else goto <D.19077>;
  <D.19076>:
  return;
  <D.19077>:
  D.19078 = sgen_par_object_get_size (vt, obj);
  D.19079 = D.19078 + 7;
  objsize = D.19079 & 4294967288;
  D.19080 = vt->gc_descr;
  D.19081 = (unsigned int) D.19080;
  has_references = sgen_gc_descr_has_references (D.19081);
  destination = par_alloc_for_promotion (vt, obj, objsize, has_references);
  D.19082 = destination == 0B;
  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>:
  sgen_parallel_pin_or_update (obj_slot, obj, vt, queue);
  return;
  <D.19086>:
  MEM[(struct MonoVTable * *)destination] = vt;
  destination.87 = (unsigned int) destination;
  D.19088 = destination.87 | 1;
  D.19089 = (void *) D.19088;
  D.19090 = InterlockedCompareExchangePointer (obj, D.19089, vt);
  if (D.19090 == vt) goto <D.19091>; else goto <D.19092>;
  <D.19091>:
  if (has_references != 0) goto <D.19094>; else goto <D.19095>;
  <D.19094>:
  iftmp.88 = queue;
  goto <D.19096>;
  <D.19095>:
  iftmp.88 = 0B;
  <D.19096>:
  par_copy_object_no_checks (destination, vt, obj, objsize, iftmp.88);
  obj = destination;
  *obj_slot = obj;
  goto <D.19097>;
  <D.19092>:
  D.19098 = sgen_ptr_in_nursery (destination);
  if (D.19098 == 0) goto <D.19099>; else goto <D.19100>;
  <D.19099>:
  MEM[(void * *)destination] = 0B;
  goto <D.19101>;
  <D.19100>:
  memset (destination, 0, objsize);
  <D.19101>:
  vtable_word = MEM[(mword *)obj];
  D.19069 = vtable_word & 1;
  D.19102 = D.19069 == 0;
  D.19103 = (long int) D.19102;
  D.19104 = __builtin_expect (D.19103, 0);
  if (D.19104 != 0) goto <D.19105>; else goto <D.19106>;
  <D.19105>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-minor-copy-object.h", 291, "vtable_word & SGEN_FORWARDED_BIT");
  <D.19106>:
  D.19068 = vtable_word & 4294967292;
  obj = (char *) D.19068;
  *obj_slot = obj;
  <D.19097>:
}


sgen_nursery_is_to_space (char * object)
{
  int object.89;
  char * sgen_nursery_start.90;
  int sgen_nursery_start.91;
  int D.19111;
  int D.19112;
  _Bool D.19113;
  long int D.19114;
  long int D.19115;
  char * D.19118;
  char * D.19119;
  int sgen_space_bitmap_size.92;
  _Bool D.19121;
  long int D.19122;
  long int D.19123;
  gboolean D.19126;
  char * sgen_space_bitmap.93;
  sizetype byte.94;
  char * D.19129;
  char D.19130;
  int D.19131;
  int D.19132;
  int D.19133;
  _Bool D.19134;
  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.19111 = object.89 - sgen_nursery_start.91;
  idx = D.19111 >> 9;
  byte = idx / 8;
  bit = idx & 7;
  D.19112 = sgen_ptr_in_nursery (object);
  D.19113 = D.19112 == 0;
  D.19114 = (long int) D.19113;
  D.19115 = __builtin_expect (D.19114, 0);
  if (D.19115 != 0) goto <D.19116>; else goto <D.19117>;
  <D.19116>:
  D.19118 = sgen_get_nursery_end ();
  D.19119 = sgen_get_nursery_start ();
  monoeg_g_log (0B, 4, "object %p is not in nursery [%p - %p]", object, D.19119, D.19118);
  <D.17068>:
  goto <D.17068>;
  <D.19117>:
  sgen_space_bitmap_size.92 = sgen_space_bitmap_size;
  D.19121 = byte >= sgen_space_bitmap_size.92;
  D.19122 = (long int) D.19121;
  D.19123 = __builtin_expect (D.19122, 0);
  if (D.19123 != 0) goto <D.19124>; else goto <D.19125>;
  <D.19124>:
  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.17069>:
  goto <D.17069>;
  <D.19125>:
  sgen_space_bitmap.93 = sgen_space_bitmap;
  byte.94 = (sizetype) byte;
  D.19129 = sgen_space_bitmap.93 + byte.94;
  D.19130 = *D.19129;
  D.19131 = (int) D.19130;
  D.19132 = D.19131 >> bit;
  D.19133 = D.19132 & 1;
  D.19134 = D.19133 != 0;
  D.19126 = (gboolean) D.19134;
  return D.19126;
}


sgen_get_nursery_end ()
{
  char * D.19136;

  D.19136 = sgen_nursery_end;
  return D.19136;
}


sgen_get_nursery_start ()
{
  char * D.19138;

  D.19138 = sgen_nursery_start;
  return D.19138;
}


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

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


memset (void * __dest, int __ch, size_t __len)
{
  int D.19147;
  int D.19152;
  void * D.19154;
  unsigned int D.19155;

  D.19147 = __builtin_constant_p (__len);
  if (D.19147 != 0) goto <D.19148>; else goto <D.19149>;
  <D.19148>:
  if (__len == 0) goto <D.19150>; else goto <D.19151>;
  <D.19150>:
  D.19152 = __builtin_constant_p (__ch);
  if (D.19152 == 0) goto <D.19145>; else goto <D.19153>;
  <D.19153>:
  if (__ch != 0) goto <D.19145>; else goto <D.19146>;
  <D.19145>:
  __warn_memset_zero_len ();
  D.19154 = __dest;
  return D.19154;
  <D.19146>:
  <D.19151>:
  <D.19149>:
  D.19155 = __builtin_object_size (__dest, 0);
  D.19154 = __builtin___memset_chk (__dest, __ch, __len, D.19155);
  return D.19154;
}


simple_nursery_serial_copy_object (void * * obj_slot, struct SgenGrayQueue * queue)
{
  int current_collection_generation.97;
  int D.19160;
  struct FILE * gc_debug_file.98;
  char * iftmp.99;
  unsigned int D.19167;
  unsigned int D.19168;
  unsigned int D.19171;
  unsigned int D.19179;
  _Bool D.19180;
  long int D.19181;
  long int D.19182;
  void * D.19189;
  char * forwarded;
  char * obj;

  obj = *obj_slot;
  if (0 != 0) goto <D.19157>; else goto <D.19158>;
  <D.19157>:
  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.17656>:
  goto <D.17656>;
  <D.19158>:
  D.19160 = sgen_ptr_in_nursery (obj);
  if (D.19160 == 0) goto <D.19161>; else goto <D.19162>;
  <D.19161>:
  return;
  <D.19162>:
  if (0 != 0) goto <D.19163>; else goto <D.19164>;
  <D.19163>:
  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.19164>:
  D.19167 = MEM[(mword *)obj];
  D.19168 = D.19167 & 1;
  if (D.19168 != 0) goto <D.19169>; else goto <D.19170>;
  <D.19169>:
  D.19167 = MEM[(mword *)obj];
  D.19171 = D.19167 & 4294967292;
  iftmp.99 = (char *) D.19171;
  goto <D.19172>;
  <D.19170>:
  iftmp.99 = 0B;
  <D.19172>:
  forwarded = iftmp.99;
  if (forwarded != 0B) goto <D.19173>; else goto <D.19174>;
  <D.19173>:
  if (0 != 0) goto <D.19175>; else goto <D.19176>;
  <D.19175>:
  monoeg_g_log (0B, 4, "forwarded object %p has no gc descriptor", forwarded);
  <D.17657>:
  goto <D.17657>;
  <D.19176>:
  if (0 != 0) goto <D.19177>; else goto <D.19178>;
  <D.19177>:
  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.19178>:
  *obj_slot = forwarded;
  return;
  <D.19174>:
  D.19167 = MEM[(mword *)obj];
  D.19179 = D.19167 & 2;
  D.19180 = D.19179 != 0;
  D.19181 = (long int) D.19180;
  D.19182 = __builtin_expect (D.19181, 0);
  if (D.19182 != 0) goto <D.19183>; else goto <D.19184>;
  <D.19183>:
  if (0 != 0) goto <D.19185>; else goto <D.19186>;
  <D.19185>:
  monoeg_g_log (0B, 4, "pinned object %p has no gc descriptor", obj);
  <D.17658>:
  goto <D.17658>;
  <D.19186>:
  if (0 != 0) goto <D.19187>; else goto <D.19188>;
  <D.19187>:
  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.19188>:
  return;
  <D.19184>:
  D.19189 = copy_object_no_checks (obj, queue);
  *obj_slot = D.19189;
}


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

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


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.19193;
  void * (*<T2ddb>) (struct MonoVTable *, int, gboolean) D.19194;
  int objsize.100;

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


alloc_for_promotion (struct MonoVTable * vtable, char * obj, size_t objsize, gboolean has_references)
{
  char * D.19197;
  void * (*<T2ddb>) (struct MonoVTable *, int, gboolean) D.19198;
  int objsize.101;

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


