PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.target / s390 / memcpy-2.c
blobb9568ec6b7a4c6dbf0fa52161a2b98610910ed5d
1 /* Funtional memmov test. */
3 /* { dg-do run } */
4 /* { dg-options "-O3" } */
6 #define MAX_LEN (8 * 1000)
7 #define X 0x11
9 char gsrc[MAX_LEN + 2];
10 char gdst[MAX_LEN + 2];
12 __attribute__ ((noinline))
13 int
14 compare_mem (int len)
16 int i;
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();
28 __attribute__ ((noinline))
29 void
30 init_mem (void)
32 unsigned int *p1;
33 unsigned int *p2;
34 int i;
36 p1 = (unsigned int *)gsrc;
37 p2 = (unsigned int *)gdst;
38 for (i = 0; i < MAX_LEN / sizeof(unsigned int); i++)
40 p1[i] = 0x71727374;
41 p2[i] = 0x61626364;
45 #define MEMCPY_CHECK(DST, SRC, LEN) \
46 init_mem (); \
47 __builtin_memcpy ((DST) + 1, (SRC) + 1, (LEN)); \
48 compare_mem ((LEN));
51 int main(void)
53 int lens[] =
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
63 int t;
65 /* variable length */
66 for (t = 0; lens[t] != -999; t++)
68 MEMCPY_CHECK (gdst, gsrc, lens[t]);
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);
93 return 0;