1 /* { dg-do compile } */
2 /* { dg-options "-O2 -march=armv8.6-a+mops --param=aarch64-mops-memset-size-threshold=0" } */
3 /* { dg-final { check-function-bodies "**" "" "" } } */
4
5 #include <stdlib.h>
6
7 /* We want to inline variable-sized memset.
8 ** do_it_set:
9 ** setp \[x0\]\!, x2\!, x1
10 ** setm \[x0\]\!, x2\!, x1
11 ** sete \[x0\]\!, x2\!, x1
12 ** ret
13 */
14 void do_it_set (char * out, int n, size_t size)
15 {
16 __builtin_memset (out, n, size);
17 }
18
19 /*
20 ** do_it_set_large:
21 ** mov w2, 1
22 ** mov x1, 1024
23 ** setp \[x0\]\!, x1\!, x2
24 ** setm \[x0\]\!, x1\!, x2
25 ** sete \[x0\]\!, x1\!, x2
26 ** ret
27 */
28 void do_it_set_large (char * out)
29 {
30 __builtin_memset (out, 1, 1024);
31 }
32
33 /*
34 ** do_it_set_256:
35 ** mov w2, 1
36 ** mov x1, 256
37 ** setp \[x0\]\!, x1\!, x2
38 ** setm \[x0\]\!, x1\!, x2
39 ** sete \[x0\]\!, x1\!, x2
40 ** ret
41 */
42 void do_it_set_256 (char * out)
43 {
44 __builtin_memset (out, 1, 256);
45 }
46
47 /*
48 ** do_it_set_255:
49 ** mov w2, 1
50 ** mov x1, 255
51 ** setp \[x0\]\!, x1\!, x2
52 ** setm \[x0\]\!, x1\!, x2
53 ** sete \[x0\]\!, x1\!, x2
54 ** ret
55 */
56 void do_it_set_255 (char * out)
57 {
58 __builtin_memset (out, 1, 255);
59 }
60
61 /*
62 ** do_it_set_0:
63 ** setp \[x0\]\!, x1\!, xzr
64 ** setm \[x0\]\!, x1\!, xzr
65 ** sete \[x0\]\!, x1\!, xzr
66 ** ret
67 */
68 void do_it_set_0 (char * out, size_t n)
69 {
70 __builtin_memset (out, 0, n);
71 }
72
73 /*
74 ** do_it_set_0_255:
75 ** mov x1, 255
76 ** setp \[x0\]\!, x1\!, xzr
77 ** setm \[x0\]\!, x1\!, xzr
78 ** sete \[x0\]\!, x1\!, xzr
79 ** ret
80 */
81 void do_it_set_0_255 (char * out)
82 {
83 __builtin_memset (out, 0, 255);
84 }
85