]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/testsuite/gcc.target/aarch64/sve/pcs/saves_2_le_nowrap.c
aarch64: Treat p12-p15 as call-preserved in SVE PCS functions
[thirdparty/gcc.git] / gcc / testsuite / gcc.target / aarch64 / sve / pcs / saves_2_le_nowrap.c
CommitLineData
c600df9a
RS
1/* { dg-do compile } */
2/* { dg-options "-O -mlittle-endian -fno-shrink-wrap -fno-stack-clash-protection -g" } */
2171a920 3/* { dg-final { check-function-bodies "**" "" { target lp64 } } } */
c600df9a
RS
4
5void standard_callee (void);
6__attribute__((aarch64_vector_pcs)) void vpcs_callee (void);
7
8/*
9** calls_standard:
10** stp x29, x30, \[sp, -16\]!
11** mov x29, sp
cb26919c 12** addvl sp, sp, #-18
c600df9a
RS
13** str p4, \[sp\]
14** str p5, \[sp, #1, mul vl\]
15** str p6, \[sp, #2, mul vl\]
16** str p7, \[sp, #3, mul vl\]
17** str p8, \[sp, #4, mul vl\]
18** str p9, \[sp, #5, mul vl\]
19** str p10, \[sp, #6, mul vl\]
20** str p11, \[sp, #7, mul vl\]
cb26919c
RS
21** str p12, \[sp, #8, mul vl\]
22** str p13, \[sp, #9, mul vl\]
23** str p14, \[sp, #10, mul vl\]
24** str p15, \[sp, #11, mul vl\]
25** str z8, \[sp, #2, mul vl\]
26** str z9, \[sp, #3, mul vl\]
27** str z10, \[sp, #4, mul vl\]
28** str z11, \[sp, #5, mul vl\]
29** str z12, \[sp, #6, mul vl\]
30** str z13, \[sp, #7, mul vl\]
31** str z14, \[sp, #8, mul vl\]
32** str z15, \[sp, #9, mul vl\]
33** str z16, \[sp, #10, mul vl\]
34** str z17, \[sp, #11, mul vl\]
35** str z18, \[sp, #12, mul vl\]
36** str z19, \[sp, #13, mul vl\]
37** str z20, \[sp, #14, mul vl\]
38** str z21, \[sp, #15, mul vl\]
39** str z22, \[sp, #16, mul vl\]
40** str z23, \[sp, #17, mul vl\]
c600df9a 41** bl standard_callee
cb26919c
RS
42** ldr z8, \[sp, #2, mul vl\]
43** ldr z9, \[sp, #3, mul vl\]
44** ldr z10, \[sp, #4, mul vl\]
45** ldr z11, \[sp, #5, mul vl\]
46** ldr z12, \[sp, #6, mul vl\]
47** ldr z13, \[sp, #7, mul vl\]
48** ldr z14, \[sp, #8, mul vl\]
49** ldr z15, \[sp, #9, mul vl\]
50** ldr z16, \[sp, #10, mul vl\]
51** ldr z17, \[sp, #11, mul vl\]
52** ldr z18, \[sp, #12, mul vl\]
53** ldr z19, \[sp, #13, mul vl\]
54** ldr z20, \[sp, #14, mul vl\]
55** ldr z21, \[sp, #15, mul vl\]
56** ldr z22, \[sp, #16, mul vl\]
57** ldr z23, \[sp, #17, mul vl\]
c600df9a
RS
58** ldr p4, \[sp\]
59** ldr p5, \[sp, #1, mul vl\]
60** ldr p6, \[sp, #2, mul vl\]
61** ldr p7, \[sp, #3, mul vl\]
62** ldr p8, \[sp, #4, mul vl\]
63** ldr p9, \[sp, #5, mul vl\]
64** ldr p10, \[sp, #6, mul vl\]
65** ldr p11, \[sp, #7, mul vl\]
cb26919c
RS
66** ldr p12, \[sp, #8, mul vl\]
67** ldr p13, \[sp, #9, mul vl\]
68** ldr p14, \[sp, #10, mul vl\]
69** ldr p15, \[sp, #11, mul vl\]
70** addvl sp, sp, #18
c600df9a
RS
71** ldp x29, x30, \[sp\], 16
72** ret
73*/
74void calls_standard (__SVInt8_t x) { standard_callee (); }
75
76/*
77** calls_vpcs:
78** stp x29, x30, \[sp, -16\]!
79** mov x29, sp
cb26919c 80** addvl sp, sp, #-18
c600df9a
RS
81** str p4, \[sp\]
82** str p5, \[sp, #1, mul vl\]
83** str p6, \[sp, #2, mul vl\]
84** str p7, \[sp, #3, mul vl\]
85** str p8, \[sp, #4, mul vl\]
86** str p9, \[sp, #5, mul vl\]
87** str p10, \[sp, #6, mul vl\]
88** str p11, \[sp, #7, mul vl\]
cb26919c
RS
89** str p12, \[sp, #8, mul vl\]
90** str p13, \[sp, #9, mul vl\]
91** str p14, \[sp, #10, mul vl\]
92** str p15, \[sp, #11, mul vl\]
93** str z8, \[sp, #2, mul vl\]
94** str z9, \[sp, #3, mul vl\]
95** str z10, \[sp, #4, mul vl\]
96** str z11, \[sp, #5, mul vl\]
97** str z12, \[sp, #6, mul vl\]
98** str z13, \[sp, #7, mul vl\]
99** str z14, \[sp, #8, mul vl\]
100** str z15, \[sp, #9, mul vl\]
101** str z16, \[sp, #10, mul vl\]
102** str z17, \[sp, #11, mul vl\]
103** str z18, \[sp, #12, mul vl\]
104** str z19, \[sp, #13, mul vl\]
105** str z20, \[sp, #14, mul vl\]
106** str z21, \[sp, #15, mul vl\]
107** str z22, \[sp, #16, mul vl\]
108** str z23, \[sp, #17, mul vl\]
c600df9a 109** bl vpcs_callee
cb26919c
RS
110** ldr z8, \[sp, #2, mul vl\]
111** ldr z9, \[sp, #3, mul vl\]
112** ldr z10, \[sp, #4, mul vl\]
113** ldr z11, \[sp, #5, mul vl\]
114** ldr z12, \[sp, #6, mul vl\]
115** ldr z13, \[sp, #7, mul vl\]
116** ldr z14, \[sp, #8, mul vl\]
117** ldr z15, \[sp, #9, mul vl\]
118** ldr z16, \[sp, #10, mul vl\]
119** ldr z17, \[sp, #11, mul vl\]
120** ldr z18, \[sp, #12, mul vl\]
121** ldr z19, \[sp, #13, mul vl\]
122** ldr z20, \[sp, #14, mul vl\]
123** ldr z21, \[sp, #15, mul vl\]
124** ldr z22, \[sp, #16, mul vl\]
125** ldr z23, \[sp, #17, mul vl\]
c600df9a
RS
126** ldr p4, \[sp\]
127** ldr p5, \[sp, #1, mul vl\]
128** ldr p6, \[sp, #2, mul vl\]
129** ldr p7, \[sp, #3, mul vl\]
130** ldr p8, \[sp, #4, mul vl\]
131** ldr p9, \[sp, #5, mul vl\]
132** ldr p10, \[sp, #6, mul vl\]
133** ldr p11, \[sp, #7, mul vl\]
cb26919c
RS
134** ldr p12, \[sp, #8, mul vl\]
135** ldr p13, \[sp, #9, mul vl\]
136** ldr p14, \[sp, #10, mul vl\]
137** ldr p15, \[sp, #11, mul vl\]
138** addvl sp, sp, #18
c600df9a
RS
139** ldp x29, x30, \[sp\], 16
140** ret
141*/
142void calls_vpcs (__SVInt8_t x) { vpcs_callee (); }
143
144/*
145** calls_standard_ptr:
146** stp x29, x30, \[sp, -16\]!
147** mov x29, sp
cb26919c 148** addvl sp, sp, #-18
c600df9a
RS
149** str p4, \[sp\]
150** str p5, \[sp, #1, mul vl\]
151** str p6, \[sp, #2, mul vl\]
152** str p7, \[sp, #3, mul vl\]
153** str p8, \[sp, #4, mul vl\]
154** str p9, \[sp, #5, mul vl\]
155** str p10, \[sp, #6, mul vl\]
156** str p11, \[sp, #7, mul vl\]
cb26919c
RS
157** str p12, \[sp, #8, mul vl\]
158** str p13, \[sp, #9, mul vl\]
159** str p14, \[sp, #10, mul vl\]
160** str p15, \[sp, #11, mul vl\]
161** str z8, \[sp, #2, mul vl\]
162** str z9, \[sp, #3, mul vl\]
163** str z10, \[sp, #4, mul vl\]
164** str z11, \[sp, #5, mul vl\]
165** str z12, \[sp, #6, mul vl\]
166** str z13, \[sp, #7, mul vl\]
167** str z14, \[sp, #8, mul vl\]
168** str z15, \[sp, #9, mul vl\]
169** str z16, \[sp, #10, mul vl\]
170** str z17, \[sp, #11, mul vl\]
171** str z18, \[sp, #12, mul vl\]
172** str z19, \[sp, #13, mul vl\]
173** str z20, \[sp, #14, mul vl\]
174** str z21, \[sp, #15, mul vl\]
175** str z22, \[sp, #16, mul vl\]
176** str z23, \[sp, #17, mul vl\]
c600df9a 177** blr x0
cb26919c
RS
178** ldr z8, \[sp, #2, mul vl\]
179** ldr z9, \[sp, #3, mul vl\]
180** ldr z10, \[sp, #4, mul vl\]
181** ldr z11, \[sp, #5, mul vl\]
182** ldr z12, \[sp, #6, mul vl\]
183** ldr z13, \[sp, #7, mul vl\]
184** ldr z14, \[sp, #8, mul vl\]
185** ldr z15, \[sp, #9, mul vl\]
186** ldr z16, \[sp, #10, mul vl\]
187** ldr z17, \[sp, #11, mul vl\]
188** ldr z18, \[sp, #12, mul vl\]
189** ldr z19, \[sp, #13, mul vl\]
190** ldr z20, \[sp, #14, mul vl\]
191** ldr z21, \[sp, #15, mul vl\]
192** ldr z22, \[sp, #16, mul vl\]
193** ldr z23, \[sp, #17, mul vl\]
c600df9a
RS
194** ldr p4, \[sp\]
195** ldr p5, \[sp, #1, mul vl\]
196** ldr p6, \[sp, #2, mul vl\]
197** ldr p7, \[sp, #3, mul vl\]
198** ldr p8, \[sp, #4, mul vl\]
199** ldr p9, \[sp, #5, mul vl\]
200** ldr p10, \[sp, #6, mul vl\]
201** ldr p11, \[sp, #7, mul vl\]
cb26919c
RS
202** ldr p12, \[sp, #8, mul vl\]
203** ldr p13, \[sp, #9, mul vl\]
204** ldr p14, \[sp, #10, mul vl\]
205** ldr p15, \[sp, #11, mul vl\]
206** addvl sp, sp, #18
c600df9a
RS
207** ldp x29, x30, \[sp\], 16
208** ret
209*/
210void
211calls_standard_ptr (__SVInt8_t x, void (*fn) (void))
212{
213 fn ();
214}
215
216/*
217** calls_vpcs_ptr:
218** stp x29, x30, \[sp, -16\]!
219** mov x29, sp
cb26919c 220** addvl sp, sp, #-18
c600df9a
RS
221** str p4, \[sp\]
222** str p5, \[sp, #1, mul vl\]
223** str p6, \[sp, #2, mul vl\]
224** str p7, \[sp, #3, mul vl\]
225** str p8, \[sp, #4, mul vl\]
226** str p9, \[sp, #5, mul vl\]
227** str p10, \[sp, #6, mul vl\]
228** str p11, \[sp, #7, mul vl\]
cb26919c
RS
229** str p12, \[sp, #8, mul vl\]
230** str p13, \[sp, #9, mul vl\]
231** str p14, \[sp, #10, mul vl\]
232** str p15, \[sp, #11, mul vl\]
233** str z8, \[sp, #2, mul vl\]
234** str z9, \[sp, #3, mul vl\]
235** str z10, \[sp, #4, mul vl\]
236** str z11, \[sp, #5, mul vl\]
237** str z12, \[sp, #6, mul vl\]
238** str z13, \[sp, #7, mul vl\]
239** str z14, \[sp, #8, mul vl\]
240** str z15, \[sp, #9, mul vl\]
241** str z16, \[sp, #10, mul vl\]
242** str z17, \[sp, #11, mul vl\]
243** str z18, \[sp, #12, mul vl\]
244** str z19, \[sp, #13, mul vl\]
245** str z20, \[sp, #14, mul vl\]
246** str z21, \[sp, #15, mul vl\]
247** str z22, \[sp, #16, mul vl\]
248** str z23, \[sp, #17, mul vl\]
c600df9a 249** blr x0
cb26919c
RS
250** ldr z8, \[sp, #2, mul vl\]
251** ldr z9, \[sp, #3, mul vl\]
252** ldr z10, \[sp, #4, mul vl\]
253** ldr z11, \[sp, #5, mul vl\]
254** ldr z12, \[sp, #6, mul vl\]
255** ldr z13, \[sp, #7, mul vl\]
256** ldr z14, \[sp, #8, mul vl\]
257** ldr z15, \[sp, #9, mul vl\]
258** ldr z16, \[sp, #10, mul vl\]
259** ldr z17, \[sp, #11, mul vl\]
260** ldr z18, \[sp, #12, mul vl\]
261** ldr z19, \[sp, #13, mul vl\]
262** ldr z20, \[sp, #14, mul vl\]
263** ldr z21, \[sp, #15, mul vl\]
264** ldr z22, \[sp, #16, mul vl\]
265** ldr z23, \[sp, #17, mul vl\]
c600df9a
RS
266** ldr p4, \[sp\]
267** ldr p5, \[sp, #1, mul vl\]
268** ldr p6, \[sp, #2, mul vl\]
269** ldr p7, \[sp, #3, mul vl\]
270** ldr p8, \[sp, #4, mul vl\]
271** ldr p9, \[sp, #5, mul vl\]
272** ldr p10, \[sp, #6, mul vl\]
273** ldr p11, \[sp, #7, mul vl\]
cb26919c
RS
274** ldr p12, \[sp, #8, mul vl\]
275** ldr p13, \[sp, #9, mul vl\]
276** ldr p14, \[sp, #10, mul vl\]
277** ldr p15, \[sp, #11, mul vl\]
278** addvl sp, sp, #18
c600df9a
RS
279** ldp x29, x30, \[sp\], 16
280** ret
281*/
282void
283calls_vpcs_ptr (__SVInt8_t x,
284 void (*__attribute__((aarch64_vector_pcs)) fn) (void))
285{
286 fn ();
287}