(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
s390/
memcpy-1.c
       1  /* Make sure that short memcpy's with constant length are emitted
       2     without loop statements.  */
       3  
       4  /* { dg-do compile } */
       5  /* { dg-options "-O3 -mzarch" } */
       6  
       7  /* 3 MVCs */
       8  void
       9  *memcpy1(void *dest, const void *src)
      10  {
      11    return __builtin_memcpy (dest, src, 700);
      12  }
      13  
      14  /* NOP */
      15  void
      16  *memcpy2(void *dest, const void *src)
      17  {
      18    return __builtin_memcpy (dest, src, 0);
      19  }
      20  
      21  /* 1 MVC */
      22  void
      23  *memcpy3(void *dest, const void *src)
      24  {
      25    return __builtin_memcpy (dest, src, 256);
      26  }
      27  
      28  /* 2 MVCs */
      29  void
      30  *memcpy4(void *dest, const void *src)
      31  {
      32    return __builtin_memcpy (dest, src, 512);
      33  }
      34  
      35  /* 3 MVCs */
      36  void
      37  *memcpy5(void *dest, const void *src)
      38  {
      39    return __builtin_memcpy (dest, src, 768);
      40  }
      41  
      42  /* Loop with 2 MVCs */
      43  void
      44  *memcpy6(void *dest, const void *src)
      45  {
      46    return __builtin_memcpy (dest, src, 1537);
      47  }
      48  
      49  /* memcpy6 uses a loop - check for the two load address instructions
      50     used to increment src and dest.  */
      51  /* { dg-final { scan-assembler-times "la" 2 } } */
      52  
      53  /* { dg-final { scan-assembler-times "mvc" 11 } } */