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
compare_mem(int len)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
init_mem(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 
main(void)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 }
95