authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-10-04 04:52:13+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-10-04 04:52:13+02:00
logcfa82af363ad1bb6501f629939be5131802c2819
tree77fe1475c8029475cb3298950e9525910180149f
parente0998c0befdc6d58d3b4fd2179d53d0f576d1169
signature Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.os.linux.riscv(32,64): declare all vector registers as syscall clobbers

The kernel intentionally clobbers vector registers (by setting them to all 1s).

2 files changed, 546 insertions(+), 14 deletions(-)

lib/std/os/linux/riscv32.zig+273-7
...@@ -10,7 +10,45 @@ pub fn syscall0(...@@ -10,7 +10,45 @@ pub fn syscall0(
10 return asm volatile ("ecall"10 return asm volatile ("ecall"
11 : [ret] "={x10}" (-> u32),11 : [ret] "={x10}" (-> u32),
12 : [number] "{x17}" (@backingInt(number)),12 : [number] "{x17}" (@backingInt(number)),
13 : .{ .memory = true });13 : .{
14 .memory = true,
15 .v0 = true,
16 .v1 = true,
17 .v2 = true,
18 .v3 = true,
19 .v4 = true,
20 .v5 = true,
21 .v6 = true,
22 .v7 = true,
23 .v8 = true,
24 .v9 = true,
25 .v10 = true,
26 .v11 = true,
27 .v12 = true,
28 .v13 = true,
29 .v14 = true,
30 .v15 = true,
31 .v16 = true,
32 .v17 = true,
33 .v18 = true,
34 .v19 = true,
35 .v20 = true,
36 .v21 = true,
37 .v22 = true,
38 .v23 = true,
39 .v24 = true,
40 .v25 = true,
41 .v26 = true,
42 .v27 = true,
43 .v28 = true,
44 .v29 = true,
45 .v30 = true,
46 .v31 = true,
47 .vtype = true,
48 .vl = true,
49 .vxsat = true,
50 .vxrm = true,
51 });
14}52}
1553
16pub fn syscall1(54pub fn syscall1(
...@@ -21,7 +59,45 @@ pub fn syscall1(...@@ -21,7 +59,45 @@ pub fn syscall1(
21 : [ret] "={x10}" (-> u32),59 : [ret] "={x10}" (-> u32),
22 : [number] "{x17}" (@backingInt(number)),60 : [number] "{x17}" (@backingInt(number)),
23 [arg1] "{x10}" (arg1),61 [arg1] "{x10}" (arg1),
24 : .{ .memory = true });62 : .{
63 .memory = true,
64 .v0 = true,
65 .v1 = true,
66 .v2 = true,
67 .v3 = true,
68 .v4 = true,
69 .v5 = true,
70 .v6 = true,
71 .v7 = true,
72 .v8 = true,
73 .v9 = true,
74 .v10 = true,
75 .v11 = true,
76 .v12 = true,
77 .v13 = true,
78 .v14 = true,
79 .v15 = true,
80 .v16 = true,
81 .v17 = true,
82 .v18 = true,
83 .v19 = true,
84 .v20 = true,
85 .v21 = true,
86 .v22 = true,
87 .v23 = true,
88 .v24 = true,
89 .v25 = true,
90 .v26 = true,
91 .v27 = true,
92 .v28 = true,
93 .v29 = true,
94 .v30 = true,
95 .v31 = true,
96 .vtype = true,
97 .vl = true,
98 .vxsat = true,
99 .vxrm = true,
100 });
25}101}
26102
27pub fn syscall2(103pub fn syscall2(
...@@ -34,7 +110,45 @@ pub fn syscall2(...@@ -34,7 +110,45 @@ pub fn syscall2(
34 : [number] "{x17}" (@backingInt(number)),110 : [number] "{x17}" (@backingInt(number)),
35 [arg1] "{x10}" (arg1),111 [arg1] "{x10}" (arg1),
36 [arg2] "{x11}" (arg2),112 [arg2] "{x11}" (arg2),
37 : .{ .memory = true });113 : .{
114 .memory = true,
115 .v0 = true,
116 .v1 = true,
117 .v2 = true,
118 .v3 = true,
119 .v4 = true,
120 .v5 = true,
121 .v6 = true,
122 .v7 = true,
123 .v8 = true,
124 .v9 = true,
125 .v10 = true,
126 .v11 = true,
127 .v12 = true,
128 .v13 = true,
129 .v14 = true,
130 .v15 = true,
131 .v16 = true,
132 .v17 = true,
133 .v18 = true,
134 .v19 = true,
135 .v20 = true,
136 .v21 = true,
137 .v22 = true,
138 .v23 = true,
139 .v24 = true,
140 .v25 = true,
141 .v26 = true,
142 .v27 = true,
143 .v28 = true,
144 .v29 = true,
145 .v30 = true,
146 .v31 = true,
147 .vtype = true,
148 .vl = true,
149 .vxsat = true,
150 .vxrm = true,
151 });
38}152}
39153
40pub fn syscall3(154pub fn syscall3(
...@@ -49,7 +163,45 @@ pub fn syscall3(...@@ -49,7 +163,45 @@ pub fn syscall3(
49 [arg1] "{x10}" (arg1),163 [arg1] "{x10}" (arg1),
50 [arg2] "{x11}" (arg2),164 [arg2] "{x11}" (arg2),
51 [arg3] "{x12}" (arg3),165 [arg3] "{x12}" (arg3),
52 : .{ .memory = true });166 : .{
167 .memory = true,
168 .v0 = true,
169 .v1 = true,
170 .v2 = true,
171 .v3 = true,
172 .v4 = true,
173 .v5 = true,
174 .v6 = true,
175 .v7 = true,
176 .v8 = true,
177 .v9 = true,
178 .v10 = true,
179 .v11 = true,
180 .v12 = true,
181 .v13 = true,
182 .v14 = true,
183 .v15 = true,
184 .v16 = true,
185 .v17 = true,
186 .v18 = true,
187 .v19 = true,
188 .v20 = true,
189 .v21 = true,
190 .v22 = true,
191 .v23 = true,
192 .v24 = true,
193 .v25 = true,
194 .v26 = true,
195 .v27 = true,
196 .v28 = true,
197 .v29 = true,
198 .v30 = true,
199 .v31 = true,
200 .vtype = true,
201 .vl = true,
202 .vxsat = true,
203 .vxrm = true,
204 });
53}205}
54206
55pub fn syscall4(207pub fn syscall4(
...@@ -66,7 +218,45 @@ pub fn syscall4(...@@ -66,7 +218,45 @@ pub fn syscall4(
66 [arg2] "{x11}" (arg2),218 [arg2] "{x11}" (arg2),
67 [arg3] "{x12}" (arg3),219 [arg3] "{x12}" (arg3),
68 [arg4] "{x13}" (arg4),220 [arg4] "{x13}" (arg4),
69 : .{ .memory = true });221 : .{
222 .memory = true,
223 .v0 = true,
224 .v1 = true,
225 .v2 = true,
226 .v3 = true,
227 .v4 = true,
228 .v5 = true,
229 .v6 = true,
230 .v7 = true,
231 .v8 = true,
232 .v9 = true,
233 .v10 = true,
234 .v11 = true,
235 .v12 = true,
236 .v13 = true,
237 .v14 = true,
238 .v15 = true,
239 .v16 = true,
240 .v17 = true,
241 .v18 = true,
242 .v19 = true,
243 .v20 = true,
244 .v21 = true,
245 .v22 = true,
246 .v23 = true,
247 .v24 = true,
248 .v25 = true,
249 .v26 = true,
250 .v27 = true,
251 .v28 = true,
252 .v29 = true,
253 .v30 = true,
254 .v31 = true,
255 .vtype = true,
256 .vl = true,
257 .vxsat = true,
258 .vxrm = true,
259 });
70}260}
71261
72pub fn syscall5(262pub fn syscall5(
...@@ -85,7 +275,45 @@ pub fn syscall5(...@@ -85,7 +275,45 @@ pub fn syscall5(
85 [arg3] "{x12}" (arg3),275 [arg3] "{x12}" (arg3),
86 [arg4] "{x13}" (arg4),276 [arg4] "{x13}" (arg4),
87 [arg5] "{x14}" (arg5),277 [arg5] "{x14}" (arg5),
88 : .{ .memory = true });278 : .{
279 .memory = true,
280 .v0 = true,
281 .v1 = true,
282 .v2 = true,
283 .v3 = true,
284 .v4 = true,
285 .v5 = true,
286 .v6 = true,
287 .v7 = true,
288 .v8 = true,
289 .v9 = true,
290 .v10 = true,
291 .v11 = true,
292 .v12 = true,
293 .v13 = true,
294 .v14 = true,
295 .v15 = true,
296 .v16 = true,
297 .v17 = true,
298 .v18 = true,
299 .v19 = true,
300 .v20 = true,
301 .v21 = true,
302 .v22 = true,
303 .v23 = true,
304 .v24 = true,
305 .v25 = true,
306 .v26 = true,
307 .v27 = true,
308 .v28 = true,
309 .v29 = true,
310 .v30 = true,
311 .v31 = true,
312 .vtype = true,
313 .vl = true,
314 .vxsat = true,
315 .vxrm = true,
316 });
89}317}
90318
91pub fn syscall6(319pub fn syscall6(
...@@ -106,7 +334,45 @@ pub fn syscall6(...@@ -106,7 +334,45 @@ pub fn syscall6(
106 [arg4] "{x13}" (arg4),334 [arg4] "{x13}" (arg4),
107 [arg5] "{x14}" (arg5),335 [arg5] "{x14}" (arg5),
108 [arg6] "{x15}" (arg6),336 [arg6] "{x15}" (arg6),
109 : .{ .memory = true });337 : .{
338 .memory = true,
339 .v0 = true,
340 .v1 = true,
341 .v2 = true,
342 .v3 = true,
343 .v4 = true,
344 .v5 = true,
345 .v6 = true,
346 .v7 = true,
347 .v8 = true,
348 .v9 = true,
349 .v10 = true,
350 .v11 = true,
351 .v12 = true,
352 .v13 = true,
353 .v14 = true,
354 .v15 = true,
355 .v16 = true,
356 .v17 = true,
357 .v18 = true,
358 .v19 = true,
359 .v20 = true,
360 .v21 = true,
361 .v22 = true,
362 .v23 = true,
363 .v24 = true,
364 .v25 = true,
365 .v26 = true,
366 .v27 = true,
367 .v28 = true,
368 .v29 = true,
369 .v30 = true,
370 .v31 = true,
371 .vtype = true,
372 .vl = true,
373 .vxsat = true,
374 .vxrm = true,
375 });
110}376}
111377
112pub fn clone() callconv(.naked) u32 {378pub fn clone() callconv(.naked) u32 {
lib/std/os/linux/riscv64.zig+273-7
...@@ -10,7 +10,45 @@ pub fn syscall0(...@@ -10,7 +10,45 @@ pub fn syscall0(
10 return asm volatile ("ecall"10 return asm volatile ("ecall"
11 : [ret] "={x10}" (-> u64),11 : [ret] "={x10}" (-> u64),
12 : [number] "{x17}" (@backingInt(number)),12 : [number] "{x17}" (@backingInt(number)),
13 : .{ .memory = true });13 : .{
14 .memory = true,
15 .v0 = true,
16 .v1 = true,
17 .v2 = true,
18 .v3 = true,
19 .v4 = true,
20 .v5 = true,
21 .v6 = true,
22 .v7 = true,
23 .v8 = true,
24 .v9 = true,
25 .v10 = true,
26 .v11 = true,
27 .v12 = true,
28 .v13 = true,
29 .v14 = true,
30 .v15 = true,
31 .v16 = true,
32 .v17 = true,
33 .v18 = true,
34 .v19 = true,
35 .v20 = true,
36 .v21 = true,
37 .v22 = true,
38 .v23 = true,
39 .v24 = true,
40 .v25 = true,
41 .v26 = true,
42 .v27 = true,
43 .v28 = true,
44 .v29 = true,
45 .v30 = true,
46 .v31 = true,
47 .vtype = true,
48 .vl = true,
49 .vxsat = true,
50 .vxrm = true,
51 });
14}52}
1553
16pub fn syscall1(54pub fn syscall1(
...@@ -21,7 +59,45 @@ pub fn syscall1(...@@ -21,7 +59,45 @@ pub fn syscall1(
21 : [ret] "={x10}" (-> u64),59 : [ret] "={x10}" (-> u64),
22 : [number] "{x17}" (@backingInt(number)),60 : [number] "{x17}" (@backingInt(number)),
23 [arg1] "{x10}" (arg1),61 [arg1] "{x10}" (arg1),
24 : .{ .memory = true });62 : .{
63 .memory = true,
64 .v0 = true,
65 .v1 = true,
66 .v2 = true,
67 .v3 = true,
68 .v4 = true,
69 .v5 = true,
70 .v6 = true,
71 .v7 = true,
72 .v8 = true,
73 .v9 = true,
74 .v10 = true,
75 .v11 = true,
76 .v12 = true,
77 .v13 = true,
78 .v14 = true,
79 .v15 = true,
80 .v16 = true,
81 .v17 = true,
82 .v18 = true,
83 .v19 = true,
84 .v20 = true,
85 .v21 = true,
86 .v22 = true,
87 .v23 = true,
88 .v24 = true,
89 .v25 = true,
90 .v26 = true,
91 .v27 = true,
92 .v28 = true,
93 .v29 = true,
94 .v30 = true,
95 .v31 = true,
96 .vtype = true,
97 .vl = true,
98 .vxsat = true,
99 .vxrm = true,
100 });
25}101}
26102
27pub fn syscall2(103pub fn syscall2(
...@@ -34,7 +110,45 @@ pub fn syscall2(...@@ -34,7 +110,45 @@ pub fn syscall2(
34 : [number] "{x17}" (@backingInt(number)),110 : [number] "{x17}" (@backingInt(number)),
35 [arg1] "{x10}" (arg1),111 [arg1] "{x10}" (arg1),
36 [arg2] "{x11}" (arg2),112 [arg2] "{x11}" (arg2),
37 : .{ .memory = true });113 : .{
114 .memory = true,
115 .v0 = true,
116 .v1 = true,
117 .v2 = true,
118 .v3 = true,
119 .v4 = true,
120 .v5 = true,
121 .v6 = true,
122 .v7 = true,
123 .v8 = true,
124 .v9 = true,
125 .v10 = true,
126 .v11 = true,
127 .v12 = true,
128 .v13 = true,
129 .v14 = true,
130 .v15 = true,
131 .v16 = true,
132 .v17 = true,
133 .v18 = true,
134 .v19 = true,
135 .v20 = true,
136 .v21 = true,
137 .v22 = true,
138 .v23 = true,
139 .v24 = true,
140 .v25 = true,
141 .v26 = true,
142 .v27 = true,
143 .v28 = true,
144 .v29 = true,
145 .v30 = true,
146 .v31 = true,
147 .vtype = true,
148 .vl = true,
149 .vxsat = true,
150 .vxrm = true,
151 });
38}152}
39153
40pub fn syscall3(154pub fn syscall3(
...@@ -49,7 +163,45 @@ pub fn syscall3(...@@ -49,7 +163,45 @@ pub fn syscall3(
49 [arg1] "{x10}" (arg1),163 [arg1] "{x10}" (arg1),
50 [arg2] "{x11}" (arg2),164 [arg2] "{x11}" (arg2),
51 [arg3] "{x12}" (arg3),165 [arg3] "{x12}" (arg3),
52 : .{ .memory = true });166 : .{
167 .memory = true,
168 .v0 = true,
169 .v1 = true,
170 .v2 = true,
171 .v3 = true,
172 .v4 = true,
173 .v5 = true,
174 .v6 = true,
175 .v7 = true,
176 .v8 = true,
177 .v9 = true,
178 .v10 = true,
179 .v11 = true,
180 .v12 = true,
181 .v13 = true,
182 .v14 = true,
183 .v15 = true,
184 .v16 = true,
185 .v17 = true,
186 .v18 = true,
187 .v19 = true,
188 .v20 = true,
189 .v21 = true,
190 .v22 = true,
191 .v23 = true,
192 .v24 = true,
193 .v25 = true,
194 .v26 = true,
195 .v27 = true,
196 .v28 = true,
197 .v29 = true,
198 .v30 = true,
199 .v31 = true,
200 .vtype = true,
201 .vl = true,
202 .vxsat = true,
203 .vxrm = true,
204 });
53}205}
54206
55pub fn syscall4(207pub fn syscall4(
...@@ -66,7 +218,45 @@ pub fn syscall4(...@@ -66,7 +218,45 @@ pub fn syscall4(
66 [arg2] "{x11}" (arg2),218 [arg2] "{x11}" (arg2),
67 [arg3] "{x12}" (arg3),219 [arg3] "{x12}" (arg3),
68 [arg4] "{x13}" (arg4),220 [arg4] "{x13}" (arg4),
69 : .{ .memory = true });221 : .{
222 .memory = true,
223 .v0 = true,
224 .v1 = true,
225 .v2 = true,
226 .v3 = true,
227 .v4 = true,
228 .v5 = true,
229 .v6 = true,
230 .v7 = true,
231 .v8 = true,
232 .v9 = true,
233 .v10 = true,
234 .v11 = true,
235 .v12 = true,
236 .v13 = true,
237 .v14 = true,
238 .v15 = true,
239 .v16 = true,
240 .v17 = true,
241 .v18 = true,
242 .v19 = true,
243 .v20 = true,
244 .v21 = true,
245 .v22 = true,
246 .v23 = true,
247 .v24 = true,
248 .v25 = true,
249 .v26 = true,
250 .v27 = true,
251 .v28 = true,
252 .v29 = true,
253 .v30 = true,
254 .v31 = true,
255 .vtype = true,
256 .vl = true,
257 .vxsat = true,
258 .vxrm = true,
259 });
70}260}
71261
72pub fn syscall5(262pub fn syscall5(
...@@ -85,7 +275,45 @@ pub fn syscall5(...@@ -85,7 +275,45 @@ pub fn syscall5(
85 [arg3] "{x12}" (arg3),275 [arg3] "{x12}" (arg3),
86 [arg4] "{x13}" (arg4),276 [arg4] "{x13}" (arg4),
87 [arg5] "{x14}" (arg5),277 [arg5] "{x14}" (arg5),
88 : .{ .memory = true });278 : .{
279 .memory = true,
280 .v0 = true,
281 .v1 = true,
282 .v2 = true,
283 .v3 = true,
284 .v4 = true,
285 .v5 = true,
286 .v6 = true,
287 .v7 = true,
288 .v8 = true,
289 .v9 = true,
290 .v10 = true,
291 .v11 = true,
292 .v12 = true,
293 .v13 = true,
294 .v14 = true,
295 .v15 = true,
296 .v16 = true,
297 .v17 = true,
298 .v18 = true,
299 .v19 = true,
300 .v20 = true,
301 .v21 = true,
302 .v22 = true,
303 .v23 = true,
304 .v24 = true,
305 .v25 = true,
306 .v26 = true,
307 .v27 = true,
308 .v28 = true,
309 .v29 = true,
310 .v30 = true,
311 .v31 = true,
312 .vtype = true,
313 .vl = true,
314 .vxsat = true,
315 .vxrm = true,
316 });
89}317}
90318
91pub fn syscall6(319pub fn syscall6(
...@@ -106,7 +334,45 @@ pub fn syscall6(...@@ -106,7 +334,45 @@ pub fn syscall6(
106 [arg4] "{x13}" (arg4),334 [arg4] "{x13}" (arg4),
107 [arg5] "{x14}" (arg5),335 [arg5] "{x14}" (arg5),
108 [arg6] "{x15}" (arg6),336 [arg6] "{x15}" (arg6),
109 : .{ .memory = true });337 : .{
338 .memory = true,
339 .v0 = true,
340 .v1 = true,
341 .v2 = true,
342 .v3 = true,
343 .v4 = true,
344 .v5 = true,
345 .v6 = true,
346 .v7 = true,
347 .v8 = true,
348 .v9 = true,
349 .v10 = true,
350 .v11 = true,
351 .v12 = true,
352 .v13 = true,
353 .v14 = true,
354 .v15 = true,
355 .v16 = true,
356 .v17 = true,
357 .v18 = true,
358 .v19 = true,
359 .v20 = true,
360 .v21 = true,
361 .v22 = true,
362 .v23 = true,
363 .v24 = true,
364 .v25 = true,
365 .v26 = true,
366 .v27 = true,
367 .v28 = true,
368 .v29 = true,
369 .v30 = true,
370 .v31 = true,
371 .vtype = true,
372 .vl = true,
373 .vxsat = true,
374 .vxrm = true,
375 });
110}376}
111377
112pub fn clone() callconv(.naked) u64 {378pub fn clone() callconv(.naked) u64 {