mono_gc_bzero_aligned (void * dest, size_t size)
{
  unsigned int dest.0;
  unsigned int D.15890;
  _Bool D.15891;
  long int D.15892;
  long int D.15893;
  unsigned int __i.1;
  unsigned int D.15897;
  void * volatile * D.15898;
  unsigned int __i.2;
  unsigned int D.15900;
  void * volatile * D.15901;
  unsigned int __i.3;
  unsigned int D.15903;
  void * volatile * D.15904;
  unsigned int __i.4;
  unsigned int D.15906;
  void * volatile * D.15907;
  unsigned int D.15908;
  unsigned int __i.5;
  unsigned int D.15910;
  void * volatile * D.15911;
  volatile char * d.6;
  volatile char * d;
  size_t tail_bytes;
  size_t word_bytes;

  d = dest;
  dest.0 = (unsigned int) dest;
  D.15890 = dest.0 & 3;
  D.15891 = D.15890 != 0;
  D.15892 = (long int) D.15891;
  D.15893 = __builtin_expect (D.15892, 0);
  if (D.15893 != 0) goto <D.15894>; else goto <D.15895>;
  <D.15894>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "gc-memfuncs.c", 79, "unaligned_bytes (dest) == 0");
  <D.15895>:
  word_bytes = size & 4294967292;
  switch (word_bytes) <default: <D.15837>, case 4: <D.15808>, case 8: <D.15816>, case 12: <D.15823>, case 16: <D.15830>>
  <D.15808>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 1;
    __i = 0;
    goto <D.15813>;
    <D.15812>:
    __i.1 = (unsigned int) __i;
    D.15897 = __i.1 * 4;
    D.15898 = __d + D.15897;
    *D.15898 = 0B;
    __i = __i + 1;
    <D.15813>:
    if (__i < __n) goto <D.15812>; else goto <D.15814>;
    <D.15814>:
  }
  goto <D.15815>;
  <D.15816>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 2;
    __i = 0;
    goto <D.15821>;
    <D.15820>:
    __i.2 = (unsigned int) __i;
    D.15900 = __i.2 * 4;
    D.15901 = __d + D.15900;
    *D.15901 = 0B;
    __i = __i + 1;
    <D.15821>:
    if (__i < __n) goto <D.15820>; else goto <D.15822>;
    <D.15822>:
  }
  goto <D.15815>;
  <D.15823>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 3;
    __i = 0;
    goto <D.15828>;
    <D.15827>:
    __i.3 = (unsigned int) __i;
    D.15903 = __i.3 * 4;
    D.15904 = __d + D.15903;
    *D.15904 = 0B;
    __i = __i + 1;
    <D.15828>:
    if (__i < __n) goto <D.15827>; else goto <D.15829>;
    <D.15829>:
  }
  goto <D.15815>;
  <D.15830>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 4;
    __i = 0;
    goto <D.15835>;
    <D.15834>:
    __i.4 = (unsigned int) __i;
    D.15906 = __i.4 * 4;
    D.15907 = __d + D.15906;
    *D.15907 = 0B;
    __i = __i + 1;
    <D.15835>:
    if (__i < __n) goto <D.15834>; else goto <D.15836>;
    <D.15836>:
  }
  goto <D.15815>;
  <D.15837>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    D.15908 = word_bytes >> 2;
    __n = (int) D.15908;
    __i = 0;
    goto <D.15842>;
    <D.15841>:
    __i.5 = (unsigned int) __i;
    D.15910 = __i.5 * 4;
    D.15911 = __d + D.15910;
    *D.15911 = 0B;
    __i = __i + 1;
    <D.15842>:
    if (__i < __n) goto <D.15841>; else goto <D.15843>;
    <D.15843>:
  }
  <D.15815>:
  tail_bytes = size & 3;
  if (tail_bytes != 0) goto <D.15912>; else goto <D.15913>;
  <D.15912>:
  d = d + word_bytes;
  <D.15844>:
  d.6 = d;
  d = d.6 + 1;
  *d.6 = 0;
  tail_bytes = tail_bytes + 4294967295;
  if (tail_bytes != 0) goto <D.15844>; else goto <D.15845>;
  <D.15845>:
  <D.15913>:
}


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

  dest.7 = (unsigned int) dest;
  D.15916 = dest.7 & 3;
  if (D.15916 != 0) goto <D.15917>; else goto <D.15918>;
  <D.15917>:
  memset (dest, 0, size);
  goto <D.15919>;
  <D.15918>:
  mono_gc_bzero_aligned (dest, size);
  <D.15919>:
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.15922;
  int D.15927;
  void * D.15929;
  unsigned int D.15930;

  D.15922 = __builtin_constant_p (__len);
  if (D.15922 != 0) goto <D.15923>; else goto <D.15924>;
  <D.15923>:
  if (__len == 0) goto <D.15925>; else goto <D.15926>;
  <D.15925>:
  D.15927 = __builtin_constant_p (__ch);
  if (D.15927 == 0) goto <D.15920>; else goto <D.15928>;
  <D.15928>:
  if (__ch != 0) goto <D.15920>; else goto <D.15921>;
  <D.15920>:
  __warn_memset_zero_len ();
  D.15929 = __dest;
  return D.15929;
  <D.15921>:
  <D.15926>:
  <D.15924>:
  D.15930 = __builtin_object_size (__dest, 0);
  D.15929 = __builtin___memset_chk (__dest, __ch, __len, D.15930);
  return D.15929;
}


mono_gc_memmove_aligned (void * dest, const void * src, size_t size)
{
  unsigned int dest.8;
  unsigned int D.15933;
  _Bool D.15934;
  long int D.15935;
  long int D.15936;
  unsigned int src.9;
  unsigned int D.15940;
  _Bool D.15941;
  long int D.15942;
  long int D.15943;
  int dest.10;
  int src.11;
  int D.15953;
  unsigned int D.15954;
  unsigned int p.12;
  unsigned int D.15957;
  char * D.15958;
  char D.15959;
  unsigned int start.13;
  unsigned int D.15961;
  unsigned int D.15962;
  int p.14;
  int word_start.15;
  int D.15965;
  sizetype D.15966;
  unsigned int D.15967;
  unsigned int __i.16;
  unsigned int D.15969;
  void * volatile * D.15970;
  void * * D.15971;
  void * D.15972;
  unsigned int D.15973;
  unsigned int __i.17;
  unsigned int D.15975;
  void * volatile * D.15976;
  void * * D.15977;
  void * D.15978;
  sizetype D.15981;
  volatile char * d.18;
  const char * s.19;
  char D.15984;

  dest.8 = (unsigned int) dest;
  D.15933 = dest.8 & 3;
  D.15934 = D.15933 != 0;
  D.15935 = (long int) D.15934;
  D.15936 = __builtin_expect (D.15935, 0);
  if (D.15936 != 0) goto <D.15937>; else goto <D.15938>;
  <D.15937>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "gc-memfuncs.c", 158, "unaligned_bytes (dest) == 0");
  <D.15938>:
  src.9 = (unsigned int) src;
  D.15940 = src.9 & 3;
  D.15941 = D.15940 != 0;
  D.15942 = (long int) D.15941;
  D.15943 = __builtin_expect (D.15942, 0);
  if (D.15943 != 0) goto <D.15944>; else goto <D.15945>;
  <D.15944>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "gc-memfuncs.c", 159, "unaligned_bytes (src) == 0");
  <D.15945>:
  if (size <= 3) goto <D.15946>; else goto <D.15947>;
  <D.15946>:
  memmove (dest, src, size);
  return;
  <D.15947>:
  if (dest > src) goto <D.15950>; else goto <D.15948>;
  <D.15950>:
  dest.10 = (int) dest;
  src.11 = (int) src;
  D.15953 = dest.10 - src.11;
  D.15954 = (unsigned int) D.15953;
  if (D.15954 < size) goto <D.15955>; else goto <D.15948>;
  <D.15955>:
  {
    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.15957 = p.12 & 4294967292;
    D.15958 = (char *) D.15957;
    align_end = MAX_EXPR <D.15958, dest>;
    goto <D.15862>;
    <D.15861>:
    p = p + 4294967295;
    s = s + 4294967295;
    D.15959 = *s;
    *p = D.15959;
    <D.15862>:
    if (p > align_end) goto <D.15861>; else goto <D.15863>;
    <D.15863>:
    start.13 = (unsigned int) start;
    D.15961 = start.13 + 3;
    D.15962 = D.15961 & 4294967292;
    word_start = (char *) D.15962;
    p.14 = (int) p;
    word_start.15 = (int) word_start;
    D.15965 = p.14 - word_start.15;
    bytes_to_memmove = (size_t) D.15965;
    D.15966 = -bytes_to_memmove;
    p = p + D.15966;
    D.15966 = -bytes_to_memmove;
    s = s + D.15966;
    {
      void * volatile * __d;
      void * * __s;
      int __n;
      int __i;

      __d = p;
      __s = s;
      D.15967 = bytes_to_memmove >> 2;
      __n = (int) D.15967;
      __i = __n + -1;
      goto <D.15869>;
      <D.15868>:
      __i.16 = (unsigned int) __i;
      D.15969 = __i.16 * 4;
      D.15970 = __d + D.15969;
      __i.16 = (unsigned int) __i;
      D.15969 = __i.16 * 4;
      D.15971 = __s + D.15969;
      D.15972 = *D.15971;
      *D.15970 = D.15972;
      __i = __i + -1;
      <D.15869>:
      if (__i >= 0) goto <D.15868>; else goto <D.15870>;
      <D.15870>:
    }
  }
  goto <D.15949>;
  <D.15948>:
  {
    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.15973 = size >> 2;
      __n = (int) D.15973;
      __i = 0;
      goto <D.15879>;
      <D.15878>:
      __i.17 = (unsigned int) __i;
      D.15975 = __i.17 * 4;
      D.15976 = __d + D.15975;
      __i.17 = (unsigned int) __i;
      D.15975 = __i.17 * 4;
      D.15977 = __s + D.15975;
      D.15978 = *D.15977;
      *D.15976 = D.15978;
      __i = __i + 1;
      <D.15879>:
      if (__i < __n) goto <D.15878>; else goto <D.15880>;
      <D.15880>:
    }
    tail_bytes = size & 3;
    if (tail_bytes != 0) goto <D.15979>; else goto <D.15980>;
    <D.15979>:
    D.15981 = size & 4294967292;
    d = d + D.15981;
    D.15981 = size & 4294967292;
    s = s + D.15981;
    <D.15881>:
    d.18 = d;
    d = d.18 + 1;
    s.19 = s;
    s = s.19 + 1;
    D.15984 = *s.19;
    *d.18 = D.15984;
    tail_bytes = tail_bytes + 4294967295;
    if (tail_bytes != 0) goto <D.15881>; else goto <D.15882>;
    <D.15882>:
    <D.15980>:
  }
  <D.15949>:
}


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

  D.15987 = __builtin_object_size (__dest, 0);
  D.15986 = __builtin___memmove_chk (__dest, __src, __len, D.15987);
  return D.15986;
}


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

  dest.20 = (unsigned int) dest;
  src.21 = (unsigned int) src;
  D.15991 = dest.20 | src.21;
  D.15992 = D.15991 & 3;
  if (D.15992 != 0) goto <D.15993>; else goto <D.15994>;
  <D.15993>:
  memmove (dest, src, size);
  goto <D.15995>;
  <D.15994>:
  mono_gc_memmove_aligned (dest, src, size);
  <D.15995>:
}


