(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
execute/
builtins/
memops-asm.c
       1  /* Copyright (C) 2003 Free Software Foundation.
       2  
       3     Test memcpy and memset in presence of redirect.  */
       4  
       5  #define ASMNAME(cname)  ASMNAME2 (__USER_LABEL_PREFIX__, cname)
       6  #define ASMNAME2(prefix, cname) STRING (prefix) cname
       7  #define STRING(x)    #x
       8  
       9  typedef __SIZE_TYPE__ size_t;
      10  extern void abort (void);
      11  extern void *memcpy (void *, const void *, size_t)
      12    __asm (ASMNAME ("my_memcpy"));
      13  extern void bcopy (const void *, void *, size_t)
      14    __asm (ASMNAME ("my_bcopy"));
      15  extern void *memmove (void *, const void *, size_t)
      16    __asm (ASMNAME ("my_memmove"));
      17  extern void *memset (void *, int, size_t)
      18    __asm (ASMNAME ("my_memset"));
      19  extern void bzero (void *, size_t)
      20    __asm (ASMNAME ("my_bzero"));
      21  extern int memcmp (const void *, const void *, size_t);
      22  
      23  struct A { char c[32]; } a = { "foobar" };
      24  char x[64] = "foobar", y[64];
      25  int i = 39, j = 6, k = 4;
      26  
      27  extern int inside_main;
      28  
      29  void
      30  main_test (void)
      31  {
      32    struct A b = a;
      33    struct A c = { { 'x' } };
      34  
      35    inside_main = 1;
      36    
      37    if (memcmp (b.c, x, 32) || c.c[0] != 'x' || memcmp (c.c + 1, x + 32, 31))
      38      abort ();
      39    if (__builtin_memcpy (y, x, i) != y || memcmp (x, y, 64))
      40      abort ();
      41    if (memcpy (y + 6, x, j) != y + 6
      42        || memcmp (x, y, 6) || memcmp (x, y + 6, 58))
      43      abort ();
      44    if (__builtin_memset (y + 2, 'X', k) != y + 2
      45        || memcmp (y, "foXXXXfoobar", 13))
      46      abort ();
      47    bcopy (y + 1, y + 2, 6);
      48    if (memcmp (y, "fooXXXXfobar", 13))
      49      abort ();
      50    __builtin_bzero (y + 4, 2);
      51    if (memcmp (y, "fooX\0\0Xfobar", 13))
      52      abort ();
      53  }