mono_gc_bzero_aligned (void * dest, size_t size)
{
  long unsigned int dest.0;
  long unsigned int D.16288;
  _Bool D.16289;
  long int D.16290;
  long int D.16291;
  long unsigned int D.16294;
  long unsigned int D.16295;
  void * volatile * D.16296;
  long unsigned int D.16297;
  long unsigned int D.16298;
  void * volatile * D.16299;
  long unsigned int D.16300;
  long unsigned int D.16301;
  void * volatile * D.16302;
  long unsigned int D.16303;
  long unsigned int D.16304;
  void * volatile * D.16305;
  long unsigned int D.16306;
  long unsigned int D.16307;
  long unsigned int D.16308;
  void * volatile * D.16309;
  volatile char * d.1;
  volatile char * d;
  size_t tail_bytes;
  size_t word_bytes;

  d = dest;
  dest.0 = (long unsigned int) dest;
  D.16288 = dest.0 & 7;
  D.16289 = D.16288 != 0;
  D.16290 = (long int) D.16289;
  D.16291 = __builtin_expect (D.16290, 0);
  if (D.16291 != 0) goto <D.16292>; else goto <D.16293>;
  <D.16292>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "gc-memfuncs.c", 79, "unaligned_bytes (dest) == 0");
  <D.16293>:
  word_bytes = size & 18446744073709551608;
  switch (word_bytes) <default: <D.16235>, case 8: <D.16206>, case 16: <D.16214>, case 24: <D.16221>, case 32: <D.16228>>
  <D.16206>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 1;
    __i = 0;
    goto <D.16211>;
    <D.16210>:
    D.16294 = (long unsigned int) __i;
    D.16295 = D.16294 * 8;
    D.16296 = __d + D.16295;
    *D.16296 = 0B;
    __i = __i + 1;
    <D.16211>:
    if (__i < __n) goto <D.16210>; else goto <D.16212>;
    <D.16212>:
  }
  goto <D.16213>;
  <D.16214>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 2;
    __i = 0;
    goto <D.16219>;
    <D.16218>:
    D.16297 = (long unsigned int) __i;
    D.16298 = D.16297 * 8;
    D.16299 = __d + D.16298;
    *D.16299 = 0B;
    __i = __i + 1;
    <D.16219>:
    if (__i < __n) goto <D.16218>; else goto <D.16220>;
    <D.16220>:
  }
  goto <D.16213>;
  <D.16221>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 3;
    __i = 0;
    goto <D.16226>;
    <D.16225>:
    D.16300 = (long unsigned int) __i;
    D.16301 = D.16300 * 8;
    D.16302 = __d + D.16301;
    *D.16302 = 0B;
    __i = __i + 1;
    <D.16226>:
    if (__i < __n) goto <D.16225>; else goto <D.16227>;
    <D.16227>:
  }
  goto <D.16213>;
  <D.16228>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    __n = 4;
    __i = 0;
    goto <D.16233>;
    <D.16232>:
    D.16303 = (long unsigned int) __i;
    D.16304 = D.16303 * 8;
    D.16305 = __d + D.16304;
    *D.16305 = 0B;
    __i = __i + 1;
    <D.16233>:
    if (__i < __n) goto <D.16232>; else goto <D.16234>;
    <D.16234>:
  }
  goto <D.16213>;
  <D.16235>:
  {
    void * volatile * __d;
    int __n;
    int __i;

    __d = d;
    D.16306 = word_bytes >> 3;
    __n = (int) D.16306;
    __i = 0;
    goto <D.16240>;
    <D.16239>:
    D.16307 = (long unsigned int) __i;
    D.16308 = D.16307 * 8;
    D.16309 = __d + D.16308;
    *D.16309 = 0B;
    __i = __i + 1;
    <D.16240>:
    if (__i < __n) goto <D.16239>; else goto <D.16241>;
    <D.16241>:
  }
  <D.16213>:
  tail_bytes = size & 7;
  if (tail_bytes != 0) goto <D.16310>; else goto <D.16311>;
  <D.16310>:
  d = d + word_bytes;
  <D.16242>:
  d.1 = d;
  d = d.1 + 1;
  *d.1 = 0;
  tail_bytes = tail_bytes + 18446744073709551615;
  if (tail_bytes != 0) goto <D.16242>; else goto <D.16243>;
  <D.16243>:
  <D.16311>:
}


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

  dest.2 = (long unsigned int) dest;
  D.16314 = dest.2 & 7;
  if (D.16314 != 0) goto <D.16315>; else goto <D.16316>;
  <D.16315>:
  memset (dest, 0, size);
  goto <D.16317>;
  <D.16316>:
  mono_gc_bzero_aligned (dest, size);
  <D.16317>:
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.16320;
  int D.16325;
  void * D.16327;
  long unsigned int D.16328;

  D.16320 = __builtin_constant_p (__len);
  if (D.16320 != 0) goto <D.16321>; else goto <D.16322>;
  <D.16321>:
  if (__len == 0) goto <D.16323>; else goto <D.16324>;
  <D.16323>:
  D.16325 = __builtin_constant_p (__ch);
  if (D.16325 == 0) goto <D.16318>; else goto <D.16326>;
  <D.16326>:
  if (__ch != 0) goto <D.16318>; else goto <D.16319>;
  <D.16318>:
  __warn_memset_zero_len ();
  D.16327 = __dest;
  return D.16327;
  <D.16319>:
  <D.16324>:
  <D.16322>:
  D.16328 = __builtin_object_size (__dest, 0);
  D.16327 = __builtin___memset_chk (__dest, __ch, __len, D.16328);
  return D.16327;
}


mono_gc_memmove_aligned (void * dest, const void * src, size_t size)
{
  long unsigned int dest.3;
  long unsigned int D.16331;
  _Bool D.16332;
  long int D.16333;
  long int D.16334;
  long unsigned int src.4;
  long unsigned int D.16338;
  _Bool D.16339;
  long int D.16340;
  long int D.16341;
  long int dest.5;
  long int src.6;
  long int D.16351;
  long unsigned int D.16352;
  long unsigned int p.7;
  long unsigned int D.16355;
  char * D.16356;
  char D.16357;
  long unsigned int start.8;
  long unsigned int D.16359;
  long unsigned int D.16360;
  long int p.9;
  long int word_start.10;
  long int D.16363;
  sizetype D.16364;
  long unsigned int D.16365;
  long unsigned int D.16366;
  long unsigned int D.16367;
  void * volatile * D.16368;
  void * * D.16369;
  void * D.16370;
  long unsigned int D.16371;
  long unsigned int D.16372;
  long unsigned int D.16373;
  void * volatile * D.16374;
  void * * D.16375;
  void * D.16376;
  sizetype D.16379;
  volatile char * d.11;
  const char * s.12;
  char D.16382;

  dest.3 = (long unsigned int) dest;
  D.16331 = dest.3 & 7;
  D.16332 = D.16331 != 0;
  D.16333 = (long int) D.16332;
  D.16334 = __builtin_expect (D.16333, 0);
  if (D.16334 != 0) goto <D.16335>; else goto <D.16336>;
  <D.16335>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "gc-memfuncs.c", 158, "unaligned_bytes (dest) == 0");
  <D.16336>:
  src.4 = (long unsigned int) src;
  D.16338 = src.4 & 7;
  D.16339 = D.16338 != 0;
  D.16340 = (long int) D.16339;
  D.16341 = __builtin_expect (D.16340, 0);
  if (D.16341 != 0) goto <D.16342>; else goto <D.16343>;
  <D.16342>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "gc-memfuncs.c", 159, "unaligned_bytes (src) == 0");
  <D.16343>:
  if (size <= 7) goto <D.16344>; else goto <D.16345>;
  <D.16344>:
  memmove (dest, src, size);
  return;
  <D.16345>:
  if (dest > src) goto <D.16348>; else goto <D.16346>;
  <D.16348>:
  dest.5 = (long int) dest;
  src.6 = (long int) src;
  D.16351 = dest.5 - src.6;
  D.16352 = (long unsigned int) D.16351;
  if (D.16352 < size) goto <D.16353>; else goto <D.16346>;
  <D.16353>:
  {
    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.16355 = p.7 & 18446744073709551608;
    D.16356 = (char *) D.16355;
    align_end = MAX_EXPR <D.16356, dest>;
    goto <D.16260>;
    <D.16259>:
    p = p + 18446744073709551615;
    s = s + 18446744073709551615;
    D.16357 = *s;
    *p = D.16357;
    <D.16260>:
    if (p > align_end) goto <D.16259>; else goto <D.16261>;
    <D.16261>:
    start.8 = (long unsigned int) start;
    D.16359 = start.8 + 7;
    D.16360 = D.16359 & 18446744073709551608;
    word_start = (char *) D.16360;
    p.9 = (long int) p;
    word_start.10 = (long int) word_start;
    D.16363 = p.9 - word_start.10;
    bytes_to_memmove = (size_t) D.16363;
    D.16364 = -bytes_to_memmove;
    p = p + D.16364;
    D.16364 = -bytes_to_memmove;
    s = s + D.16364;
    {
      void * volatile * __d;
      void * * __s;
      int __n;
      int __i;

      __d = p;
      __s = s;
      D.16365 = bytes_to_memmove >> 3;
      __n = (int) D.16365;
      __i = __n + -1;
      goto <D.16267>;
      <D.16266>:
      D.16366 = (long unsigned int) __i;
      D.16367 = D.16366 * 8;
      D.16368 = __d + D.16367;
      D.16366 = (long unsigned int) __i;
      D.16367 = D.16366 * 8;
      D.16369 = __s + D.16367;
      D.16370 = *D.16369;
      *D.16368 = D.16370;
      __i = __i + -1;
      <D.16267>:
      if (__i >= 0) goto <D.16266>; else goto <D.16268>;
      <D.16268>:
    }
  }
  goto <D.16347>;
  <D.16346>:
  {
    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.16371 = size >> 3;
      __n = (int) D.16371;
      __i = 0;
      goto <D.16277>;
      <D.16276>:
      D.16372 = (long unsigned int) __i;
      D.16373 = D.16372 * 8;
      D.16374 = __d + D.16373;
      D.16372 = (long unsigned int) __i;
      D.16373 = D.16372 * 8;
      D.16375 = __s + D.16373;
      D.16376 = *D.16375;
      *D.16374 = D.16376;
      __i = __i + 1;
      <D.16277>:
      if (__i < __n) goto <D.16276>; else goto <D.16278>;
      <D.16278>:
    }
    tail_bytes = size & 7;
    if (tail_bytes != 0) goto <D.16377>; else goto <D.16378>;
    <D.16377>:
    D.16379 = size & 18446744073709551608;
    d = d + D.16379;
    D.16379 = size & 18446744073709551608;
    s = s + D.16379;
    <D.16279>:
    d.11 = d;
    d = d.11 + 1;
    s.12 = s;
    s = s.12 + 1;
    D.16382 = *s.12;
    *d.11 = D.16382;
    tail_bytes = tail_bytes + 18446744073709551615;
    if (tail_bytes != 0) goto <D.16279>; else goto <D.16280>;
    <D.16280>:
    <D.16378>:
  }
  <D.16347>:
}


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

  D.16385 = __builtin_object_size (__dest, 0);
  D.16384 = __builtin___memmove_chk (__dest, __src, __len, D.16385);
  return D.16384;
}


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.16389;
  long unsigned int D.16390;

  dest.13 = (long unsigned int) dest;
  src.14 = (long unsigned int) src;
  D.16389 = dest.13 | src.14;
  D.16390 = D.16389 & 7;
  if (D.16390 != 0) goto <D.16391>; else goto <D.16392>;
  <D.16391>:
  memmove (dest, src, size);
  goto <D.16393>;
  <D.16392>:
  mono_gc_memmove_aligned (dest, src, size);
  <D.16393>:
}


