mono_gc_bzero_aligned (void * dest, size_t size)
{
  long unsigned int dest.0;
  long unsigned int D.16818;
  _Bool D.16819;
  long int D.16820;
  long int D.16821;
  long unsigned int D.16824;
  long unsigned int D.16825;
  void * volatile * D.16826;
  long unsigned int D.16827;
  long unsigned int D.16828;
  void * volatile * D.16829;
  long unsigned int D.16830;
  long unsigned int D.16831;
  void * volatile * D.16832;
  long unsigned int D.16833;
  long unsigned int D.16834;
  void * volatile * D.16835;
  long unsigned int D.16836;
  long unsigned int D.16837;
  long unsigned int D.16838;
  void * volatile * D.16839;
  volatile char * d.1;
  volatile char * d;
  size_t tail_bytes;
  size_t word_bytes;

  d = dest;
  dest.0 = (long unsigned int) dest;
  D.16818 = dest.0 & 7;
  D.16819 = D.16818 != 0;
  D.16820 = (long int) D.16819;
  D.16821 = __builtin_expect (D.16820, 0);
  if (D.16821 != 0) goto <D.16822>; else goto <D.16823>;
  <D.16822>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "gc-memfuncs.c", 79, "unaligned_bytes (dest) == 0");
  <D.16823>:
  word_bytes = size & 18446744073709551608;
  switch (word_bytes) <default: <D.16765>, case 8: <D.16736>, case 16: <D.16744>, case 24: <D.16751>, case 32: <D.16758>>
  <D.16736>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 1;
    __i = 0;
    goto <D.16741>;
    <D.16740>:
    D.16824 = (long unsigned int) __i;
    D.16825 = D.16824 * 8;
    D.16826 = __d + D.16825;
    *D.16826 = 0B;
    __i = __i + 1;
    <D.16741>:
    if (__i < __n) goto <D.16740>; else goto <D.16742>;
    <D.16742>:
  }
  goto <D.16743>;
  <D.16744>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 2;
    __i = 0;
    goto <D.16749>;
    <D.16748>:
    D.16827 = (long unsigned int) __i;
    D.16828 = D.16827 * 8;
    D.16829 = __d + D.16828;
    *D.16829 = 0B;
    __i = __i + 1;
    <D.16749>:
    if (__i < __n) goto <D.16748>; else goto <D.16750>;
    <D.16750>:
  }
  goto <D.16743>;
  <D.16751>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 3;
    __i = 0;
    goto <D.16756>;
    <D.16755>:
    D.16830 = (long unsigned int) __i;
    D.16831 = D.16830 * 8;
    D.16832 = __d + D.16831;
    *D.16832 = 0B;
    __i = __i + 1;
    <D.16756>:
    if (__i < __n) goto <D.16755>; else goto <D.16757>;
    <D.16757>:
  }
  goto <D.16743>;
  <D.16758>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 4;
    __i = 0;
    goto <D.16763>;
    <D.16762>:
    D.16833 = (long unsigned int) __i;
    D.16834 = D.16833 * 8;
    D.16835 = __d + D.16834;
    *D.16835 = 0B;
    __i = __i + 1;
    <D.16763>:
    if (__i < __n) goto <D.16762>; else goto <D.16764>;
    <D.16764>:
  }
  goto <D.16743>;
  <D.16765>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    D.16836 = word_bytes >> 3;
    __n = (int) D.16836;
    __i = 0;
    goto <D.16770>;
    <D.16769>:
    D.16837 = (long unsigned int) __i;
    D.16838 = D.16837 * 8;
    D.16839 = __d + D.16838;
    *D.16839 = 0B;
    __i = __i + 1;
    <D.16770>:
    if (__i < __n) goto <D.16769>; else goto <D.16771>;
    <D.16771>:
  }
  <D.16743>:
  tail_bytes = size & 7;
  if (tail_bytes != 0) goto <D.16840>; else goto <D.16841>;
  <D.16840>:
  d = d + word_bytes;
  <D.16772>:
  d.1 = d;
  d = d.1 + 1;
  *d.1 = 0;
  tail_bytes = tail_bytes + 18446744073709551615;
  if (tail_bytes != 0) goto <D.16772>; else goto <D.16773>;
  <D.16773>:
  <D.16841>:
}


mono_gc_bzero_atomic (void * dest, size_t size)
{
  long unsigned int dest.2;
  long unsigned int D.16844;

  dest.2 = (long unsigned int) dest;
  D.16844 = dest.2 & 7;
  if (D.16844 != 0) goto <D.16845>; else goto <D.16846>;
  <D.16845>:
  memset (dest, 0, size);
  goto <D.16847>;
  <D.16846>:
  mono_gc_bzero_aligned (dest, size);
  <D.16847>:
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.16850;
  int D.16855;
  void * D.16857;
  long unsigned int D.16858;

  D.16850 = __builtin_constant_p (__len);
  if (D.16850 != 0) goto <D.16851>; else goto <D.16852>;
  <D.16851>:
  if (__len == 0) goto <D.16853>; else goto <D.16854>;
  <D.16853>:
  D.16855 = __builtin_constant_p (__ch);
  if (D.16855 == 0) goto <D.16848>; else goto <D.16856>;
  <D.16856>:
  if (__ch != 0) goto <D.16848>; else goto <D.16849>;
  <D.16848>:
  __warn_memset_zero_len ();
  D.16857 = __dest;
  return D.16857;
  <D.16849>:
  <D.16854>:
  <D.16852>:
  D.16858 = __builtin_object_size (__dest, 0);
  D.16857 = __builtin___memset_chk (__dest, __ch, __len, D.16858);
  return D.16857;
}


mono_gc_memmove_aligned (void * dest, const void * src, size_t size)
{
  long unsigned int dest.3;
  long unsigned int D.16861;
  _Bool D.16862;
  long int D.16863;
  long int D.16864;
  long unsigned int src.4;
  long unsigned int D.16868;
  _Bool D.16869;
  long int D.16870;
  long int D.16871;
  long int dest.5;
  long int src.6;
  long int D.16881;
  long unsigned int D.16882;
  long unsigned int p.7;
  long unsigned int D.16885;
  char * D.16886;
  char D.16887;
  long unsigned int start.8;
  long unsigned int D.16889;
  long unsigned int D.16890;
  long int p.9;
  long int word_start.10;
  long int D.16893;
  sizetype D.16894;
  long unsigned int D.16895;
  long unsigned int D.16896;
  long unsigned int D.16897;
  void * volatile * D.16898;
  void * * D.16899;
  void * D.16900;
  long unsigned int D.16901;
  long unsigned int D.16902;
  long unsigned int D.16903;
  void * volatile * D.16904;
  void * * D.16905;
  void * D.16906;
  sizetype D.16909;
  volatile char * d.11;
  const char * s.12;
  char D.16912;

  dest.3 = (long unsigned int) dest;
  D.16861 = dest.3 & 7;
  D.16862 = D.16861 != 0;
  D.16863 = (long int) D.16862;
  D.16864 = __builtin_expect (D.16863, 0);
  if (D.16864 != 0) goto <D.16865>; else goto <D.16866>;
  <D.16865>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "gc-memfuncs.c", 158, "unaligned_bytes (dest) == 0");
  <D.16866>:
  src.4 = (long unsigned int) src;
  D.16868 = src.4 & 7;
  D.16869 = D.16868 != 0;
  D.16870 = (long int) D.16869;
  D.16871 = __builtin_expect (D.16870, 0);
  if (D.16871 != 0) goto <D.16872>; else goto <D.16873>;
  <D.16872>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "gc-memfuncs.c", 159, "unaligned_bytes (src) == 0");
  <D.16873>:
  if (size <= 7) goto <D.16874>; else goto <D.16875>;
  <D.16874>:
  memmove (dest, src, size);
  return;
  <D.16875>:
  if (dest > src) goto <D.16878>; else goto <D.16876>;
  <D.16878>:
  dest.5 = (long int) dest;
  src.6 = (long int) src;
  D.16881 = dest.5 - src.6;
  D.16882 = (long unsigned int) D.16881;
  if (D.16882 < size) goto <D.16883>; else goto <D.16876>;
  <D.16883>:
  {
    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.7 = (long unsigned int) p;
    D.16885 = p.7 & 18446744073709551608;
    D.16886 = (char *) D.16885;
    align_end = MAX_EXPR <D.16886, dest>;
    goto <D.16790>;
    <D.16789>:
    p = p + 18446744073709551615;
    s = s + 18446744073709551615;
    D.16887 = *s;
    *p = D.16887;
    <D.16790>:
    if (p > align_end) goto <D.16789>; else goto <D.16791>;
    <D.16791>:
    start.8 = (long unsigned int) start;
    D.16889 = start.8 + 7;
    D.16890 = D.16889 & 18446744073709551608;
    word_start = (char *) D.16890;
    p.9 = (long int) p;
    word_start.10 = (long int) word_start;
    D.16893 = p.9 - word_start.10;
    bytes_to_memmove = (size_t) D.16893;
    D.16894 = -bytes_to_memmove;
    p = p + D.16894;
    D.16894 = -bytes_to_memmove;
    s = s + D.16894;
    {
      void * volatile * __d;
      void * * __s;
      int __n;
      int __i;

      __d = p;
      __s = s;
      D.16895 = bytes_to_memmove >> 3;
      __n = (int) D.16895;
      __i = __n + -1;
      goto <D.16797>;
      <D.16796>:
      D.16896 = (long unsigned int) __i;
      D.16897 = D.16896 * 8;
      D.16898 = __d + D.16897;
      D.16896 = (long unsigned int) __i;
      D.16897 = D.16896 * 8;
      D.16899 = __s + D.16897;
      D.16900 = *D.16899;
      *D.16898 = D.16900;
      __i = __i + -1;
      <D.16797>:
      if (__i >= 0) goto <D.16796>; else goto <D.16798>;
      <D.16798>:
    }
  }
  goto <D.16877>;
  <D.16876>:
  {
    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.16901 = size >> 3;
      __n = (int) D.16901;
      __i = 0;
      goto <D.16807>;
      <D.16806>:
      D.16902 = (long unsigned int) __i;
      D.16903 = D.16902 * 8;
      D.16904 = __d + D.16903;
      D.16902 = (long unsigned int) __i;
      D.16903 = D.16902 * 8;
      D.16905 = __s + D.16903;
      D.16906 = *D.16905;
      *D.16904 = D.16906;
      __i = __i + 1;
      <D.16807>:
      if (__i < __n) goto <D.16806>; else goto <D.16808>;
      <D.16808>:
    }
    tail_bytes = size & 7;
    if (tail_bytes != 0) goto <D.16907>; else goto <D.16908>;
    <D.16907>:
    D.16909 = size & 18446744073709551608;
    d = d + D.16909;
    D.16909 = size & 18446744073709551608;
    s = s + D.16909;
    <D.16809>:
    d.11 = d;
    d = d.11 + 1;
    s.12 = s;
    s = s.12 + 1;
    D.16912 = *s.12;
    *d.11 = D.16912;
    tail_bytes = tail_bytes + 18446744073709551615;
    if (tail_bytes != 0) goto <D.16809>; else goto <D.16810>;
    <D.16810>:
    <D.16908>:
  }
  <D.16877>:
}


memmove (void * __dest, const void * __src, size_t __len)
{
  void * D.16914;
  long unsigned int D.16915;

  D.16915 = __builtin_object_size (__dest, 0);
  D.16914 = __builtin___memmove_chk (__dest, __src, __len, D.16915);
  return D.16914;
}


mono_gc_memmove_atomic (void * dest, const void * src, size_t size)
{
  long unsigned int dest.13;
  long unsigned int src.14;
  long unsigned int D.16919;
  long unsigned int D.16920;

  dest.13 = (long unsigned int) dest;
  src.14 = (long unsigned int) src;
  D.16919 = dest.13 | src.14;
  D.16920 = D.16919 & 7;
  if (D.16920 != 0) goto <D.16921>; else goto <D.16922>;
  <D.16921>:
  memmove (dest, src, size);
  goto <D.16923>;
  <D.16922>:
  mono_gc_memmove_aligned (dest, src, size);
  <D.16923>:
}


