__attribute__((visibility ("hidden")))
mono_gc_bzero_aligned (void * dest, size_t size)
{
  long unsigned int dest.0;
  long unsigned int D.16432;
  _Bool D.16433;
  long int D.16434;
  long int D.16435;
  long unsigned int D.16438;
  long unsigned int D.16439;
  void * volatile * D.16440;
  long unsigned int D.16441;
  long unsigned int D.16442;
  void * volatile * D.16443;
  long unsigned int D.16444;
  long unsigned int D.16445;
  void * volatile * D.16446;
  long unsigned int D.16447;
  long unsigned int D.16448;
  void * volatile * D.16449;
  long unsigned int D.16450;
  long unsigned int D.16451;
  long unsigned int D.16452;
  void * volatile * D.16453;
  volatile char * d.1;
  volatile char * d;
  size_t tail_bytes;
  size_t word_bytes;

  d = dest;
  dest.0 = (long unsigned int) dest;
  D.16432 = dest.0 & 7;
  D.16433 = D.16432 != 0;
  D.16434 = (long int) D.16433;
  D.16435 = __builtin_expect (D.16434, 0);
  if (D.16435 != 0) goto <D.16436>; else goto <D.16437>;
  <D.16436>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "gc-memfuncs.c", 79, "unaligned_bytes (dest) == 0");
  <D.16437>:
  word_bytes = size & 18446744073709551608;
  switch (word_bytes) <default: <D.16379>, case 8: <D.16350>, case 16: <D.16358>, case 24: <D.16365>, case 32: <D.16372>>
  <D.16350>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 1;
    __i = 0;
    goto <D.16355>;
    <D.16354>:
    D.16438 = (long unsigned int) __i;
    D.16439 = D.16438 * 8;
    D.16440 = __d + D.16439;
    *D.16440 = 0B;
    __i = __i + 1;
    <D.16355>:
    if (__i < __n) goto <D.16354>; else goto <D.16356>;
    <D.16356>:
  }
  goto <D.16357>;
  <D.16358>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 2;
    __i = 0;
    goto <D.16363>;
    <D.16362>:
    D.16441 = (long unsigned int) __i;
    D.16442 = D.16441 * 8;
    D.16443 = __d + D.16442;
    *D.16443 = 0B;
    __i = __i + 1;
    <D.16363>:
    if (__i < __n) goto <D.16362>; else goto <D.16364>;
    <D.16364>:
  }
  goto <D.16357>;
  <D.16365>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 3;
    __i = 0;
    goto <D.16370>;
    <D.16369>:
    D.16444 = (long unsigned int) __i;
    D.16445 = D.16444 * 8;
    D.16446 = __d + D.16445;
    *D.16446 = 0B;
    __i = __i + 1;
    <D.16370>:
    if (__i < __n) goto <D.16369>; else goto <D.16371>;
    <D.16371>:
  }
  goto <D.16357>;
  <D.16372>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 4;
    __i = 0;
    goto <D.16377>;
    <D.16376>:
    D.16447 = (long unsigned int) __i;
    D.16448 = D.16447 * 8;
    D.16449 = __d + D.16448;
    *D.16449 = 0B;
    __i = __i + 1;
    <D.16377>:
    if (__i < __n) goto <D.16376>; else goto <D.16378>;
    <D.16378>:
  }
  goto <D.16357>;
  <D.16379>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    D.16450 = word_bytes >> 3;
    __n = (int) D.16450;
    __i = 0;
    goto <D.16384>;
    <D.16383>:
    D.16451 = (long unsigned int) __i;
    D.16452 = D.16451 * 8;
    D.16453 = __d + D.16452;
    *D.16453 = 0B;
    __i = __i + 1;
    <D.16384>:
    if (__i < __n) goto <D.16383>; else goto <D.16385>;
    <D.16385>:
  }
  <D.16357>:
  tail_bytes = size & 7;
  if (tail_bytes != 0) goto <D.16454>; else goto <D.16455>;
  <D.16454>:
  d = d + word_bytes;
  <D.16386>:
  d.1 = d;
  d = d.1 + 1;
  *d.1 = 0;
  tail_bytes = tail_bytes + 18446744073709551615;
  if (tail_bytes != 0) goto <D.16386>; else goto <D.16387>;
  <D.16387>:
  <D.16455>:
}


__attribute__((visibility ("hidden")))
mono_gc_bzero_atomic (void * dest, size_t size)
{
  long unsigned int dest.2;
  long unsigned int D.16458;

  dest.2 = (long unsigned int) dest;
  D.16458 = dest.2 & 7;
  if (D.16458 != 0) goto <D.16459>; else goto <D.16460>;
  <D.16459>:
  memset (dest, 0, size);
  goto <D.16461>;
  <D.16460>:
  mono_gc_bzero_aligned (dest, size);
  <D.16461>:
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memset (void * __dest, int __ch, size_t __len)
{
  void * D.16462;
  long unsigned int D.16463;

  D.16463 = __builtin_object_size (__dest, 0);
  D.16462 = __builtin___memset_chk (__dest, __ch, __len, D.16463);
  return D.16462;
}


__attribute__((visibility ("hidden")))
mono_gc_memmove_aligned (void * dest, const void * src, size_t size)
{
  long unsigned int dest.3;
  long unsigned int D.16466;
  _Bool D.16467;
  long int D.16468;
  long int D.16469;
  long unsigned int src.4;
  long unsigned int D.16473;
  _Bool D.16474;
  long int D.16475;
  long int D.16476;
  long int dest.5;
  long int src.6;
  long int D.16486;
  long unsigned int D.16487;
  long unsigned int p.7;
  long unsigned int D.16490;
  char * D.16491;
  char D.16492;
  long unsigned int start.8;
  long unsigned int D.16494;
  long unsigned int D.16495;
  long int p.9;
  long int word_start.10;
  long int D.16498;
  sizetype D.16499;
  long unsigned int D.16500;
  long unsigned int D.16501;
  long unsigned int D.16502;
  void * volatile * D.16503;
  void * * D.16504;
  void * D.16505;
  long unsigned int D.16506;
  long unsigned int D.16507;
  long unsigned int D.16508;
  void * volatile * D.16509;
  void * * D.16510;
  void * D.16511;
  sizetype D.16514;
  volatile char * d.11;
  const char * s.12;
  char D.16517;

  dest.3 = (long unsigned int) dest;
  D.16466 = dest.3 & 7;
  D.16467 = D.16466 != 0;
  D.16468 = (long int) D.16467;
  D.16469 = __builtin_expect (D.16468, 0);
  if (D.16469 != 0) goto <D.16470>; else goto <D.16471>;
  <D.16470>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "gc-memfuncs.c", 158, "unaligned_bytes (dest) == 0");
  <D.16471>:
  src.4 = (long unsigned int) src;
  D.16473 = src.4 & 7;
  D.16474 = D.16473 != 0;
  D.16475 = (long int) D.16474;
  D.16476 = __builtin_expect (D.16475, 0);
  if (D.16476 != 0) goto <D.16477>; else goto <D.16478>;
  <D.16477>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "gc-memfuncs.c", 159, "unaligned_bytes (src) == 0");
  <D.16478>:
  if (size <= 7) goto <D.16479>; else goto <D.16480>;
  <D.16479>:
  memmove (dest, src, size);
  return;
  <D.16480>:
  if (dest > src) goto <D.16483>; else goto <D.16481>;
  <D.16483>:
  dest.5 = (long int) dest;
  src.6 = (long int) src;
  D.16486 = dest.5 - src.6;
  D.16487 = (long unsigned int) D.16486;
  if (D.16487 < size) goto <D.16488>; else goto <D.16481>;
  <D.16488>:
  {
    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.16490 = p.7 & 18446744073709551608;
    D.16491 = (char *) D.16490;
    align_end = MAX_EXPR <D.16491, dest>;
    goto <D.16404>;
    <D.16403>:
    p = p + 18446744073709551615;
    s = s + 18446744073709551615;
    D.16492 = *s;
    *p = D.16492;
    <D.16404>:
    if (p > align_end) goto <D.16403>; else goto <D.16405>;
    <D.16405>:
    start.8 = (long unsigned int) start;
    D.16494 = start.8 + 7;
    D.16495 = D.16494 & 18446744073709551608;
    word_start = (char *) D.16495;
    p.9 = (long int) p;
    word_start.10 = (long int) word_start;
    D.16498 = p.9 - word_start.10;
    bytes_to_memmove = (size_t) D.16498;
    D.16499 = -bytes_to_memmove;
    p = p + D.16499;
    D.16499 = -bytes_to_memmove;
    s = s + D.16499;
    {
      void * volatile * __d;
      void * * __s;
      int __n;
      int __i;

      __d = p;
      __s = s;
      D.16500 = bytes_to_memmove >> 3;
      __n = (int) D.16500;
      __i = __n + -1;
      goto <D.16411>;
      <D.16410>:
      D.16501 = (long unsigned int) __i;
      D.16502 = D.16501 * 8;
      D.16503 = __d + D.16502;
      D.16501 = (long unsigned int) __i;
      D.16502 = D.16501 * 8;
      D.16504 = __s + D.16502;
      D.16505 = *D.16504;
      *D.16503 = D.16505;
      __i = __i + -1;
      <D.16411>:
      if (__i >= 0) goto <D.16410>; else goto <D.16412>;
      <D.16412>:
    }
  }
  goto <D.16482>;
  <D.16481>:
  {
    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.16506 = size >> 3;
      __n = (int) D.16506;
      __i = 0;
      goto <D.16421>;
      <D.16420>:
      D.16507 = (long unsigned int) __i;
      D.16508 = D.16507 * 8;
      D.16509 = __d + D.16508;
      D.16507 = (long unsigned int) __i;
      D.16508 = D.16507 * 8;
      D.16510 = __s + D.16508;
      D.16511 = *D.16510;
      *D.16509 = D.16511;
      __i = __i + 1;
      <D.16421>:
      if (__i < __n) goto <D.16420>; else goto <D.16422>;
      <D.16422>:
    }
    tail_bytes = size & 7;
    if (tail_bytes != 0) goto <D.16512>; else goto <D.16513>;
    <D.16512>:
    D.16514 = size & 18446744073709551608;
    d = d + D.16514;
    D.16514 = size & 18446744073709551608;
    s = s + D.16514;
    <D.16423>:
    d.11 = d;
    d = d.11 + 1;
    s.12 = s;
    s = s.12 + 1;
    D.16517 = *s.12;
    *d.11 = D.16517;
    tail_bytes = tail_bytes + 18446744073709551615;
    if (tail_bytes != 0) goto <D.16423>; else goto <D.16424>;
    <D.16424>:
    <D.16513>:
  }
  <D.16482>:
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memmove (void * __dest, const void * __src, size_t __len)
{
  void * D.16519;
  long unsigned int D.16520;

  D.16520 = __builtin_object_size (__dest, 0);
  D.16519 = __builtin___memmove_chk (__dest, __src, __len, D.16520);
  return D.16519;
}


__attribute__((visibility ("hidden")))
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.16524;
  long unsigned int D.16525;

  dest.13 = (long unsigned int) dest;
  src.14 = (long unsigned int) src;
  D.16524 = dest.13 | src.14;
  D.16525 = D.16524 & 7;
  if (D.16525 != 0) goto <D.16526>; else goto <D.16527>;
  <D.16526>:
  memmove (dest, src, size);
  goto <D.16528>;
  <D.16527>:
  mono_gc_memmove_aligned (dest, src, size);
  <D.16528>:
}


