S/390: Unroll mvc/xc loop for memset with small constant
[official-gcc.git] / gcc / testsuite / gcc.target / s390 / memset-1.c
blob7b43b97c2085780eae26222fdd74504721e7dea7
1 /* Make sure that short memset's with constant length are emitted
2 without loop statements. */
4 /* { dg-do compile } */
5 /* { dg-options "-O3 -mzarch" } */
7 /* 1 mvc */
8 void
9 *memset1(void *s, int c)
11 return __builtin_memset (s, c, 42);
14 /* 3 mvc */
15 void
16 *memset2(void *s, int c)
18 return __builtin_memset (s, c, 700);
21 /* nop */
22 void
23 *memset3(void *s, int c)
25 return __builtin_memset (s, c, 0);
28 /* mvc */
29 void
30 *memset4(void *s, int c)
32 return __builtin_memset (s, c, 256);
35 /* 2 mvc */
36 void
37 *memset5(void *s, int c)
39 return __builtin_memset (s, c, 512);
42 /* still 2 mvc through the additional first byte */
43 void
44 *memset6(void *s, int c)
46 return __builtin_memset (s, c, 514);
49 /* 3 mvc */
50 void
51 *memset7(void *s, int c)
53 return __builtin_memset (s, c, 515);
56 /* still 3 mvc through the additional first byte */
57 void
58 *memset8(void *s, int c)
60 return __builtin_memset (s, c, 771);
63 /* Use mvc loop: 2 mvc */
64 void
65 *memset9(void *s, int c)
67 return __builtin_memset (s, c, 772);
70 /* 3 mvc with displacement overflow after the first */
71 void
72 *memset10(void *s, int c)
74 return __builtin_memset ((char*)s + 4000, c, 700);
77 /* 1 xc */
78 void
79 *clrmem1(void *s)
81 return __builtin_memset (s, 0, 42);
84 /* 3 xc */
85 void
86 *clrmem2(void *s)
88 return __builtin_memset (s, 0, 700);
91 /* nop */
92 void
93 *clrmem3(void *s)
95 return __builtin_memset (s, 0, 0);
98 /* 1 xc */
99 void
100 *clrmem4(void *s)
102 return __builtin_memset (s, 0, 256);
105 /* 2 xc */
106 void
107 *clrmem5(void *s)
109 return __builtin_memset (s, 0, 512);
112 /* 3 xc */
113 void
114 *clrmem6(void *s)
116 return __builtin_memset (s, 0, 768);
119 /* start using xc loop */
120 void
121 *clrmem7(void *s)
123 return __builtin_memset (s, 0, 1281);
126 /* 3 xc with displacement overflow after the first */
127 void
128 *clrmem8(void *s)
130 return __builtin_memset (s + 4000, 0, 700);
133 /* { dg-final { scan-assembler-times "mvc" 19 } } */
134 /* { dg-final { scan-assembler-times "xc" 15 } } */