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