1 /* Machine description pattern tests. */
2
3 /* { dg-do compile } */
4 /* { dg-options "-mmvcle -dP -save-temps" } */
5 /* { dg-do run { target { s390_useable_hw } } } */
6
7 /* Skip test if -O0 is present on the command line or -O... is missing:
8
9 { dg-skip-if "" { *-*-* } { "-march=z9*" "-O0" } { "" } }
10 { dg-skip-if "" { *-*-* } { "*" } { "-O*" } }
11 */
12
13 __attribute__ ((noinline))
test(char * p,char c,int len)14 void test(char *p, char c, int len)
15 {
16 __builtin_memset(p, c, len);
17 }
18
19 __attribute__ ((noinline))
test2(char * p,int c,int len)20 void test2(char *p, int c, int len)
21 {
22 __builtin_memset(p, (char)c, len);
23 }
24
25 /* Check that the right patterns are used. */
26 /* { dg-final { scan-assembler-times {c"?:16:.*{[*]setmem_long_?3?1?z?}} 1 } } */
27 /* { dg-final { scan-assembler-times {c"?:22:.*{[*]setmem_long_and_?3?1?z?}} 1 } } */
28
29 #define LEN 500
30 char buf[LEN + 2];
31
init_buf(void)32 void init_buf(void)
33 {
34 int i;
35
36 buf[0] = 0;
37 for (i = 1; i <= LEN; i++)
38 buf[i] = (0x10 + (i & 0x3f));
39 buf[LEN + 1] = 0x7f;
40 }
41
validate_buf(char val)42 void validate_buf(char val)
43 {
44 int i;
45
46 if (buf[0] != 0)
47 __builtin_abort();
48 for (i = 1; i <= LEN; i++)
49 if (buf[i] != val)
50 __builtin_abort();
51 if (buf[LEN + 1] != 0x7f)
52 __builtin_abort();
53 }
54
main(void)55 int main(void)
56 {
57 init_buf();
58 test(buf + 1, 55, LEN);
59 validate_buf(55);
60 init_buf();
61 test(buf + 1, 66, LEN);
62 validate_buf(66);
63 }
64