145
|
1 /* { dg-do compile } */
|
|
2 /* { dg-options "-O -mbig-endian -fno-shrink-wrap -fno-stack-clash-protection -g" } */
|
|
3 /* { dg-final { check-function-bodies "**" "" } } */
|
|
4
|
|
5 #pragma GCC aarch64 "arm_sve.h"
|
|
6
|
|
7 /*
|
|
8 ** test_1:
|
|
9 ** addvl sp, sp, #-17
|
|
10 ** str p4, \[sp\]
|
|
11 ** str p5, \[sp, #1, mul vl\]
|
|
12 ** str p6, \[sp, #2, mul vl\]
|
|
13 ** str p7, \[sp, #3, mul vl\]
|
|
14 ** str p8, \[sp, #4, mul vl\]
|
|
15 ** str p9, \[sp, #5, mul vl\]
|
|
16 ** str p10, \[sp, #6, mul vl\]
|
|
17 ** str p11, \[sp, #7, mul vl\]
|
|
18 ** ptrue p1\.b, all
|
|
19 ** st1d z8\.d, p1, \[sp, #1, mul vl\]
|
|
20 ** st1d z9\.d, p1, \[sp, #2, mul vl\]
|
|
21 ** st1d z10\.d, p1, \[sp, #3, mul vl\]
|
|
22 ** st1d z11\.d, p1, \[sp, #4, mul vl\]
|
|
23 ** st1d z12\.d, p1, \[sp, #5, mul vl\]
|
|
24 ** st1d z13\.d, p1, \[sp, #6, mul vl\]
|
|
25 ** st1d z14\.d, p1, \[sp, #7, mul vl\]
|
|
26 ** addvl x11, sp, #16
|
|
27 ** st1d z15\.d, p1, \[x11, #-8, mul vl\]
|
|
28 ** str z16, \[sp, #9, mul vl\]
|
|
29 ** str z17, \[sp, #10, mul vl\]
|
|
30 ** str z18, \[sp, #11, mul vl\]
|
|
31 ** str z19, \[sp, #12, mul vl\]
|
|
32 ** str z20, \[sp, #13, mul vl\]
|
|
33 ** str z21, \[sp, #14, mul vl\]
|
|
34 ** str z22, \[sp, #15, mul vl\]
|
|
35 ** str z23, \[sp, #16, mul vl\]
|
|
36 ** ptrue p0\.b, all
|
|
37 ** ptrue p1\.b, all
|
|
38 ** ld1d z8\.d, p1/z, \[sp, #1, mul vl\]
|
|
39 ** ld1d z9\.d, p1/z, \[sp, #2, mul vl\]
|
|
40 ** ld1d z10\.d, p1/z, \[sp, #3, mul vl\]
|
|
41 ** ld1d z11\.d, p1/z, \[sp, #4, mul vl\]
|
|
42 ** ld1d z12\.d, p1/z, \[sp, #5, mul vl\]
|
|
43 ** ld1d z13\.d, p1/z, \[sp, #6, mul vl\]
|
|
44 ** ld1d z14\.d, p1/z, \[sp, #7, mul vl\]
|
|
45 ** addvl x11, sp, #16
|
|
46 ** ld1d z15\.d, p1/z, \[x11, #-8, mul vl\]
|
|
47 ** ldr z16, \[sp, #9, mul vl\]
|
|
48 ** ldr z17, \[sp, #10, mul vl\]
|
|
49 ** ldr z18, \[sp, #11, mul vl\]
|
|
50 ** ldr z19, \[sp, #12, mul vl\]
|
|
51 ** ldr z20, \[sp, #13, mul vl\]
|
|
52 ** ldr z21, \[sp, #14, mul vl\]
|
|
53 ** ldr z22, \[sp, #15, mul vl\]
|
|
54 ** ldr z23, \[sp, #16, mul vl\]
|
|
55 ** ldr p4, \[sp\]
|
|
56 ** ldr p5, \[sp, #1, mul vl\]
|
|
57 ** ldr p6, \[sp, #2, mul vl\]
|
|
58 ** ldr p7, \[sp, #3, mul vl\]
|
|
59 ** ldr p8, \[sp, #4, mul vl\]
|
|
60 ** ldr p9, \[sp, #5, mul vl\]
|
|
61 ** ldr p10, \[sp, #6, mul vl\]
|
|
62 ** ldr p11, \[sp, #7, mul vl\]
|
|
63 ** addvl sp, sp, #17
|
|
64 ** ret
|
|
65 */
|
|
66 svbool_t
|
|
67 test_1 (void)
|
|
68 {
|
|
69 asm volatile ("" :::
|
|
70 "z0", "z1", "z2", "z3", "z4", "z5", "z6", "z7",
|
|
71 "z8", "z9", "z10", "z11", "z12", "z13", "z14", "z15",
|
|
72 "z16", "z17", "z18", "z19", "z20", "z21", "z22", "z23",
|
|
73 "z24", "z25", "z26", "z27", "z28", "z29", "z30", "z31",
|
|
74 "p0", "p1", "p2", "p3", "p4", "p5", "p6", "p7",
|
|
75 "p8", "p9", "p10", "p11", "p12", "p13", "p14", "p15");
|
|
76 return svptrue_b8 ();
|
|
77 }
|
|
78
|
|
79 /*
|
|
80 ** test_2:
|
|
81 ** ptrue p0\.b, all
|
|
82 ** ret
|
|
83 */
|
|
84 svbool_t
|
|
85 test_2 (void)
|
|
86 {
|
|
87 asm volatile ("" :::
|
|
88 "z0", "z1", "z2", "z3", "z4", "z5", "z6", "z7",
|
|
89 "z24", "z25", "z26", "z27", "z28", "z29", "z30", "z31",
|
|
90 "p0", "p1", "p2", "p3", "p12", "p13", "p14", "p15");
|
|
91 return svptrue_b8 ();
|
|
92 }
|
|
93
|
|
94 /*
|
|
95 ** test_3:
|
|
96 ** addvl sp, sp, #-6
|
|
97 ** str p5, \[sp\]
|
|
98 ** str p6, \[sp, #1, mul vl\]
|
|
99 ** str p11, \[sp, #2, mul vl\]
|
|
100 ** ptrue p1\.b, all
|
|
101 ** st1d z8\.d, p1, \[sp, #1, mul vl\]
|
|
102 ** st1d z13\.d, p1, \[sp, #2, mul vl\]
|
|
103 ** str z19, \[sp, #3, mul vl\]
|
|
104 ** str z20, \[sp, #4, mul vl\]
|
|
105 ** str z22, \[sp, #5, mul vl\]
|
|
106 ** ptrue p0\.b, all
|
|
107 ** ptrue p1\.b, all
|
|
108 ** ld1d z8\.d, p1/z, \[sp, #1, mul vl\]
|
|
109 ** ld1d z13\.d, p1/z, \[sp, #2, mul vl\]
|
|
110 ** ldr z19, \[sp, #3, mul vl\]
|
|
111 ** ldr z20, \[sp, #4, mul vl\]
|
|
112 ** ldr z22, \[sp, #5, mul vl\]
|
|
113 ** ldr p5, \[sp\]
|
|
114 ** ldr p6, \[sp, #1, mul vl\]
|
|
115 ** ldr p11, \[sp, #2, mul vl\]
|
|
116 ** addvl sp, sp, #6
|
|
117 ** ret
|
|
118 */
|
|
119 svbool_t
|
|
120 test_3 (void)
|
|
121 {
|
|
122 asm volatile ("" :::
|
|
123 "z8", "z13", "z19", "z20", "z22",
|
|
124 "p5", "p6", "p11");
|
|
125 return svptrue_b8 ();
|
|
126 }
|
|
127
|
|
128 /*
|
|
129 ** test_4:
|
|
130 ** addvl sp, sp, #-1
|
|
131 ** str p4, \[sp\]
|
|
132 ** ptrue p0\.b, all
|
|
133 ** ldr p4, \[sp\]
|
|
134 ** addvl sp, sp, #1
|
|
135 ** ret
|
|
136 */
|
|
137 svbool_t
|
|
138 test_4 (void)
|
|
139 {
|
|
140 asm volatile ("" ::: "p4");
|
|
141 return svptrue_b8 ();
|
|
142 }
|
|
143
|
|
144 /*
|
|
145 ** test_5:
|
|
146 ** addvl sp, sp, #-1
|
|
147 ** ptrue p1\.b, all
|
|
148 ** st1d z15\.d, p1, \[sp\]
|
|
149 ** ptrue p0\.b, all
|
|
150 ** ptrue p1\.b, all
|
|
151 ** ld1d z15\.d, p1/z, \[sp\]
|
|
152 ** addvl sp, sp, #1
|
|
153 ** ret
|
|
154 */
|
|
155 svbool_t
|
|
156 test_5 (void)
|
|
157 {
|
|
158 asm volatile ("" ::: "z15");
|
|
159 return svptrue_b8 ();
|
|
160 }
|
|
161
|
|
162 /*
|
|
163 ** test_6:
|
|
164 ** addvl sp, sp, #-2
|
|
165 ** str p4, \[sp\]
|
|
166 ** ptrue p4\.b, all
|
|
167 ** st1d z15\.d, p4, \[sp, #1, mul vl\]
|
|
168 ** mov z0\.b, #1
|
|
169 ** ptrue p4\.b, all
|
|
170 ** ld1d z15\.d, p4/z, \[sp, #1, mul vl\]
|
|
171 ** ldr p4, \[sp\]
|
|
172 ** addvl sp, sp, #2
|
|
173 ** ret
|
|
174 */
|
|
175 svint8_t
|
|
176 test_6 (svbool_t p0, svbool_t p1, svbool_t p2, svbool_t p3)
|
|
177 {
|
|
178 asm volatile ("" :: "Upa" (p0), "Upa" (p1), "Upa" (p2), "Upa" (p3) : "z15");
|
|
179 return svdup_s8 (1);
|
|
180 }
|
|
181
|
|
182 /*
|
|
183 ** test_7:
|
|
184 ** addvl sp, sp, #-1
|
|
185 ** str z16, \[sp\]
|
|
186 ** ptrue p0\.b, all
|
|
187 ** ldr z16, \[sp\]
|
|
188 ** addvl sp, sp, #1
|
|
189 ** ret
|
|
190 */
|
|
191 svbool_t
|
|
192 test_7 (void)
|
|
193 {
|
|
194 asm volatile ("" ::: "z16");
|
|
195 return svptrue_b8 ();
|
|
196 }
|