1 /* { dg-do compile } */
2 /* { dg-options "-O2" } */
3 /* { dg-require-effective-target lp64 } */
4
5 #include <stdint.h>
6
7 /*
8 **set128bits:
9 ** dup v0.16b, w1
10 ** str q0, \[x0\]
11 ** ret
12 */
13 void __attribute__((__noinline__))
14 set128bits (int64_t *src, char c)
15 {
16 __builtin_memset (src, c, 2*sizeof(int64_t));
17 }
18
19 /*
20 **set128bitszero:
21 ** stp xzr, xzr, \[x0\]
22 ** ret
23 */
24 void __attribute__((__noinline__))
25 set128bitszero (int64_t *src)
26 {
27 __builtin_memset (src, 0, 2*sizeof(int64_t));
28 }
29
30 /*
31 ** set128bitsplus:
32 ** dup v0.16b, w1
33 ** str q0, \[x0\]
34 ** str q0, \[x0, 12\]
35 ** ret
36 */
37 void __attribute__((__noinline__))
38 set128bitsplus (int64_t *src, char c)
39 {
40 __builtin_memset (src, c, 7*sizeof(int32_t));
41 }
42
43 /*
44 ** set256bits:
45 ** movi v0.16b, 0x63
46 ** stp q0, q0, \[x0\]
47 ** ret
48 */
49 void __attribute__((__noinline__))
50 set256bits (int64_t *src)
51 {
52 __builtin_memset (src, 'c', 4*sizeof(int64_t));
53 }
54
55 /*
56 **set256bitszero:
57 ** stp xzr, xzr, \[x0\]
58 ** stp xzr, xzr, \[x0, 16\]
59 ** ret
60 */
61 void __attribute__((__noinline__))
62 set256bitszero (int64_t *src)
63 {
64 __builtin_memset (src, 0, 4*sizeof(int64_t));
65 }
66
67 /*
68 ** set256bitsplus:
69 ** movi v0.16b, 0x63
70 ** stp q0, q0, \[x0\]
71 ** str q0, \[x0, 32\]
72 ** str d0, \[x0, 48\]
73 ** ret
74 */
75 void __attribute__((__noinline__))
76 set256bitsplus (int64_t *src)
77 {
78 __builtin_memset (src, 'c', 7*sizeof(int64_t));
79 }
80
81 /* { dg-final { check-function-bodies "**" "" "" } } */