(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
s390/
memcpy-2.c
       1  /* Funtional memmov test.  */
       2  
       3  /* { dg-do run } */
       4  /* { dg-options "-O3" } */
       5  
       6  #define MAX_LEN (8 * 1000)
       7  #define X 0x11
       8  
       9  char gsrc[MAX_LEN + 2];
      10  char gdst[MAX_LEN + 2];
      11  
      12  __attribute__ ((noinline))
      13  int
      14  compare_mem (int len)
      15  {
      16    int i;
      17  
      18    if (gdst[0] != 0x61)
      19      __builtin_abort();
      20    for (i = 1; i <= len; i++)
      21      if (gsrc[i] != gdst[i])
      22        __builtin_abort();
      23    for (i = len + 1; i < MAX_LEN; i++)
      24      if (gdst[i] != 0x61 + i % 4)
      25        __builtin_abort();
      26  }
      27  
      28  __attribute__ ((noinline))
      29  void
      30  init_mem (void)
      31  {
      32    unsigned int *p1;
      33    unsigned int *p2;
      34    int i;
      35  
      36    p1 = (unsigned int *)gsrc;
      37    p2 = (unsigned int *)gdst;
      38    for (i = 0; i < MAX_LEN / sizeof(unsigned int); i++)
      39      {
      40        p1[i] = 0x71727374;
      41        p2[i] = 0x61626364;
      42      }
      43  }
      44  
      45  #define MEMCPY_CHECK(DST, SRC, LEN)			\
      46    init_mem ();						\
      47    __builtin_memcpy ((DST) + 1, (SRC) + 1, (LEN));	\
      48    compare_mem ((LEN));
      49  
      50  
      51  int main(void)
      52  {
      53    int lens[] =
      54      {
      55        255, 256, 257,
      56        511, 512, 513,
      57        767, 768, 769,
      58        1023, 1024, 1025,
      59        1279, 1280, 1281,
      60        1535, 1536, 1537,
      61        -999
      62      };
      63    int t;
      64  
      65    /* variable length */
      66    for (t = 0; lens[t] != -999; t++)
      67      {
      68        MEMCPY_CHECK (gdst, gsrc, lens[t]);
      69      }
      70    /* constant length */
      71    MEMCPY_CHECK (gdst, gsrc, 0);
      72    MEMCPY_CHECK (gdst, gsrc, 1);
      73    MEMCPY_CHECK (gdst, gsrc, 2);
      74    MEMCPY_CHECK (gdst, gsrc, 3);
      75    MEMCPY_CHECK (gdst, gsrc, 256);
      76    MEMCPY_CHECK (gdst, gsrc, 257);
      77    MEMCPY_CHECK (gdst, gsrc, 511);
      78    MEMCPY_CHECK (gdst, gsrc, 512);
      79    MEMCPY_CHECK (gdst, gsrc, 513);
      80    MEMCPY_CHECK (gdst, gsrc, 767);
      81    MEMCPY_CHECK (gdst, gsrc, 768);
      82    MEMCPY_CHECK (gdst, gsrc, 769);
      83    MEMCPY_CHECK (gdst, gsrc, 1023);
      84    MEMCPY_CHECK (gdst, gsrc, 1024);
      85    MEMCPY_CHECK (gdst, gsrc, 1025);
      86    MEMCPY_CHECK (gdst, gsrc, 1279);
      87    MEMCPY_CHECK (gdst, gsrc, 1280);
      88    MEMCPY_CHECK (gdst, gsrc, 1281);
      89    MEMCPY_CHECK (gdst, gsrc, 1535);
      90    MEMCPY_CHECK (gdst, gsrc, 1536);
      91    MEMCPY_CHECK (gdst, gsrc, 1537);
      92  
      93    return 0;
      94  }