mono_gc_bzero_aligned (void * dest, size_t size)
{
  unsigned int dest.0;
  unsigned int D.15924;
  _Bool D.15925;
  long int D.15926;
  long int D.15927;
  unsigned int __i.1;
  unsigned int D.15931;
  void * volatile * D.15932;
  unsigned int __i.2;
  unsigned int D.15934;
  void * volatile * D.15935;
  unsigned int __i.3;
  unsigned int D.15937;
  void * volatile * D.15938;
  unsigned int __i.4;
  unsigned int D.15940;
  void * volatile * D.15941;
  unsigned int D.15942;
  unsigned int __i.5;
  unsigned int D.15944;
  void * volatile * D.15945;
  volatile char * d.6;
  volatile char * d;
  size_t tail_bytes;
  size_t word_bytes;

  d = dest;
  dest.0 = (unsigned int) dest;
  D.15924 = dest.0 & 3;
  D.15925 = D.15924 != 0;
  D.15926 = (long int) D.15925;
  D.15927 = __builtin_expect (D.15926, 0);
  if (D.15927 != 0) goto <D.15928>; else goto <D.15929>;
  <D.15928>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "gc-memfuncs.c", 79, "unaligned_bytes (dest) == 0");
  <D.15929>:
  word_bytes = size & 4294967292;
  switch (word_bytes) <default: <D.15871>, case 4: <D.15842>, case 8: <D.15850>, case 12: <D.15857>, case 16: <D.15864>>
  <D.15842>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 1;
    __i = 0;
    goto <D.15847>;
    <D.15846>:
    __i.1 = (unsigned int) __i;
    D.15931 = __i.1 * 4;
    D.15932 = __d + D.15931;
    *D.15932 = 0B;
    __i = __i + 1;
    <D.15847>:
    if (__i < __n) goto <D.15846>; else goto <D.15848>;
    <D.15848>:
  }
  goto <D.15849>;
  <D.15850>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 2;
    __i = 0;
    goto <D.15855>;
    <D.15854>:
    __i.2 = (unsigned int) __i;
    D.15934 = __i.2 * 4;
    D.15935 = __d + D.15934;
    *D.15935 = 0B;
    __i = __i + 1;
    <D.15855>:
    if (__i < __n) goto <D.15854>; else goto <D.15856>;
    <D.15856>:
  }
  goto <D.15849>;
  <D.15857>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 3;
    __i = 0;
    goto <D.15862>;
    <D.15861>:
    __i.3 = (unsigned int) __i;
    D.15937 = __i.3 * 4;
    D.15938 = __d + D.15937;
    *D.15938 = 0B;
    __i = __i + 1;
    <D.15862>:
    if (__i < __n) goto <D.15861>; else goto <D.15863>;
    <D.15863>:
  }
  goto <D.15849>;
  <D.15864>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 4;
    __i = 0;
    goto <D.15869>;
    <D.15868>:
    __i.4 = (unsigned int) __i;
    D.15940 = __i.4 * 4;
    D.15941 = __d + D.15940;
    *D.15941 = 0B;
    __i = __i + 1;
    <D.15869>:
    if (__i < __n) goto <D.15868>; else goto <D.15870>;
    <D.15870>:
  }
  goto <D.15849>;
  <D.15871>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    D.15942 = word_bytes >> 2;
    __n = (int) D.15942;
    __i = 0;
    goto <D.15876>;
    <D.15875>:
    __i.5 = (unsigned int) __i;
    D.15944 = __i.5 * 4;
    D.15945 = __d + D.15944;
    *D.15945 = 0B;
    __i = __i + 1;
    <D.15876>:
    if (__i < __n) goto <D.15875>; else goto <D.15877>;
    <D.15877>:
  }
  <D.15849>:
  tail_bytes = size & 3;
  if (tail_bytes != 0) goto <D.15946>; else goto <D.15947>;
  <D.15946>:
  d = d + word_bytes;
  <D.15878>:
  d.6 = d;
  d = d.6 + 1;
  *d.6 = 0;
  tail_bytes = tail_bytes + 4294967295;
  if (tail_bytes != 0) goto <D.15878>; else goto <D.15879>;
  <D.15879>:
  <D.15947>:
}


mono_gc_bzero_atomic (void * dest, size_t size)
{
  unsigned int dest.7;
  unsigned int D.15950;

  dest.7 = (unsigned int) dest;
  D.15950 = dest.7 & 3;
  if (D.15950 != 0) goto <D.15951>; else goto <D.15952>;
  <D.15951>:
  memset (dest, 0, size);
  goto <D.15953>;
  <D.15952>:
  mono_gc_bzero_aligned (dest, size);
  <D.15953>:
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.15956;
  int D.15961;
  void * D.15963;
  unsigned int D.15964;

  D.15956 = __builtin_constant_p (__len);
  if (D.15956 != 0) goto <D.15957>; else goto <D.15958>;
  <D.15957>:
  if (__len == 0) goto <D.15959>; else goto <D.15960>;
  <D.15959>:
  D.15961 = __builtin_constant_p (__ch);
  if (D.15961 == 0) goto <D.15954>; else goto <D.15962>;
  <D.15962>:
  if (__ch != 0) goto <D.15954>; else goto <D.15955>;
  <D.15954>:
  __warn_memset_zero_len ();
  D.15963 = __dest;
  return D.15963;
  <D.15955>:
  <D.15960>:
  <D.15958>:
  D.15964 = __builtin_object_size (__dest, 0);
  D.15963 = __builtin___memset_chk (__dest, __ch, __len, D.15964);
  return D.15963;
}


mono_gc_memmove_aligned (void * dest, const void * src, size_t size)
{
  unsigned int dest.8;
  unsigned int D.15967;
  _Bool D.15968;
  long int D.15969;
  long int D.15970;
  unsigned int src.9;
  unsigned int D.15974;
  _Bool D.15975;
  long int D.15976;
  long int D.15977;
  int dest.10;
  int src.11;
  int D.15987;
  unsigned int D.15988;
  unsigned int p.12;
  unsigned int D.15991;
  char * D.15992;
  char D.15993;
  unsigned int start.13;
  unsigned int D.15995;
  unsigned int D.15996;
  int p.14;
  int word_start.15;
  int D.15999;
  sizetype D.16000;
  unsigned int D.16001;
  unsigned int __i.16;
  unsigned int D.16003;
  void * volatile * D.16004;
  void * * D.16005;
  void * D.16006;
  unsigned int D.16007;
  unsigned int __i.17;
  unsigned int D.16009;
  void * volatile * D.16010;
  void * * D.16011;
  void * D.16012;
  sizetype D.16015;
  volatile char * d.18;
  const char * s.19;
  char D.16018;

  dest.8 = (unsigned int) dest;
  D.15967 = dest.8 & 3;
  D.15968 = D.15967 != 0;
  D.15969 = (long int) D.15968;
  D.15970 = __builtin_expect (D.15969, 0);
  if (D.15970 != 0) goto <D.15971>; else goto <D.15972>;
  <D.15971>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "gc-memfuncs.c", 158, "unaligned_bytes (dest) == 0");
  <D.15972>:
  src.9 = (unsigned int) src;
  D.15974 = src.9 & 3;
  D.15975 = D.15974 != 0;
  D.15976 = (long int) D.15975;
  D.15977 = __builtin_expect (D.15976, 0);
  if (D.15977 != 0) goto <D.15978>; else goto <D.15979>;
  <D.15978>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "gc-memfuncs.c", 159, "unaligned_bytes (src) == 0");
  <D.15979>:
  if (size <= 3) goto <D.15980>; else goto <D.15981>;
  <D.15980>:
  memmove (dest, src, size);
  return;
  <D.15981>:
  if (dest > src) goto <D.15984>; else goto <D.15982>;
  <D.15984>:
  dest.10 = (int) dest;
  src.11 = (int) src;
  D.15987 = dest.10 - src.11;
  D.15988 = (unsigned int) D.15987;
  if (D.15988 < size) goto <D.15989>; else goto <D.15982>;
  <D.15989>:
  {
    volatile char * p;
    char * s;
    char * start;
    char * align_end;
    char * word_start;
    size_t bytes_to_memmove;

    p = dest + size;
    s = src + size;
    start = dest;
    p.12 = (unsigned int) p;
    D.15991 = p.12 & 4294967292;
    D.15992 = (char *) D.15991;
    align_end = MAX_EXPR <D.15992, dest>;
    goto <D.15896>;
    <D.15895>:
    p = p + 4294967295;
    s = s + 4294967295;
    D.15993 = *s;
    *p = D.15993;
    <D.15896>:
    if (p > align_end) goto <D.15895>; else goto <D.15897>;
    <D.15897>:
    start.13 = (unsigned int) start;
    D.15995 = start.13 + 3;
    D.15996 = D.15995 & 4294967292;
    word_start = (char *) D.15996;
    p.14 = (int) p;
    word_start.15 = (int) word_start;
    D.15999 = p.14 - word_start.15;
    bytes_to_memmove = (size_t) D.15999;
    D.16000 = -bytes_to_memmove;
    p = p + D.16000;
    D.16000 = -bytes_to_memmove;
    s = s + D.16000;
    {
      void * volatile * __d;
      void * * __s;
      int __n;
      int __i;

      __d = p;
      __s = s;
      D.16001 = bytes_to_memmove >> 2;
      __n = (int) D.16001;
      __i = __n + -1;
      goto <D.15903>;
      <D.15902>:
      __i.16 = (unsigned int) __i;
      D.16003 = __i.16 * 4;
      D.16004 = __d + D.16003;
      __i.16 = (unsigned int) __i;
      D.16003 = __i.16 * 4;
      D.16005 = __s + D.16003;
      D.16006 = *D.16005;
      *D.16004 = D.16006;
      __i = __i + -1;
      <D.15903>:
      if (__i >= 0) goto <D.15902>; else goto <D.15904>;
      <D.15904>:
    }
  }
  goto <D.15983>;
  <D.15982>:
  {
    volatile char * d;
    const char * s;
    size_t tail_bytes;

    d = dest;
    s = src;
    {
      void * volatile * __d;
      void * * __s;
      int __n;
      int __i;

      __d = d;
      __s = s;
      D.16007 = size >> 2;
      __n = (int) D.16007;
      __i = 0;
      goto <D.15913>;
      <D.15912>:
      __i.17 = (unsigned int) __i;
      D.16009 = __i.17 * 4;
      D.16010 = __d + D.16009;
      __i.17 = (unsigned int) __i;
      D.16009 = __i.17 * 4;
      D.16011 = __s + D.16009;
      D.16012 = *D.16011;
      *D.16010 = D.16012;
      __i = __i + 1;
      <D.15913>:
      if (__i < __n) goto <D.15912>; else goto <D.15914>;
      <D.15914>:
    }
    tail_bytes = size & 3;
    if (tail_bytes != 0) goto <D.16013>; else goto <D.16014>;
    <D.16013>:
    D.16015 = size & 4294967292;
    d = d + D.16015;
    D.16015 = size & 4294967292;
    s = s + D.16015;
    <D.15915>:
    d.18 = d;
    d = d.18 + 1;
    s.19 = s;
    s = s.19 + 1;
    D.16018 = *s.19;
    *d.18 = D.16018;
    tail_bytes = tail_bytes + 4294967295;
    if (tail_bytes != 0) goto <D.15915>; else goto <D.15916>;
    <D.15916>:
    <D.16014>:
  }
  <D.15983>:
}


memmove (void * __dest, const void * __src, size_t __len)
{
  void * D.16020;
  unsigned int D.16021;

  D.16021 = __builtin_object_size (__dest, 0);
  D.16020 = __builtin___memmove_chk (__dest, __src, __len, D.16021);
  return D.16020;
}


mono_gc_memmove_atomic (void * dest, const void * src, size_t size)
{
  unsigned int dest.20;
  unsigned int src.21;
  unsigned int D.16025;
  unsigned int D.16026;

  dest.20 = (unsigned int) dest;
  src.21 = (unsigned int) src;
  D.16025 = dest.20 | src.21;
  D.16026 = D.16025 & 3;
  if (D.16026 != 0) goto <D.16027>; else goto <D.16028>;
  <D.16027>:
  memmove (dest, src, size);
  goto <D.16029>;
  <D.16028>:
  mono_gc_memmove_aligned (dest, src, size);
  <D.16029>:
}


