authorgravatar for jdmichaud@users.noreply.github.comjdmichaud <jdmichaud@users.noreply.github.com> 2021-08-29 11:57:32+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2021-08-29 11:57:32+02:00
log49c9975484aeb4c1534626d0f975a938a795ebe2
tree13884b0f0e4e9e850feecbd6951859822938fe98
parent7b863aa8ac6d48092c8d5b3c8713d9f8a9cfbdf3
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

zig fmt: respect trailing commas in inline assembly


27 files changed, 293 insertions(+), 307 deletions(-)

lib/std/Thread.zig+9-9
......@@ -700,7 +700,7 @@ const LinuxThreadImpl = struct {
700700 \\ int $128
701701 :
702702 : [ptr] "r" (@ptrToInt(self.mapped.ptr)),
703 [len] "r" (self.mapped.len)
703 [len] "r" (self.mapped.len),
704704 : "memory"
705705 ),
706706 .x86_64 => asm volatile (
......@@ -713,7 +713,7 @@ const LinuxThreadImpl = struct {
713713 \\ syscall
714714 :
715715 : [ptr] "r" (@ptrToInt(self.mapped.ptr)),
716 [len] "r" (self.mapped.len)
716 [len] "r" (self.mapped.len),
717717 : "memory"
718718 ),
719719 .arm, .armeb, .thumb, .thumbeb => asm volatile (
......@@ -726,7 +726,7 @@ const LinuxThreadImpl = struct {
726726 \\ svc 0
727727 :
728728 : [ptr] "r" (@ptrToInt(self.mapped.ptr)),
729 [len] "r" (self.mapped.len)
729 [len] "r" (self.mapped.len),
730730 : "memory"
731731 ),
732732 .aarch64, .aarch64_be, .aarch64_32 => asm volatile (
......@@ -739,7 +739,7 @@ const LinuxThreadImpl = struct {
739739 \\ svc 0
740740 :
741741 : [ptr] "r" (@ptrToInt(self.mapped.ptr)),
742 [len] "r" (self.mapped.len)
742 [len] "r" (self.mapped.len),
743743 : "memory"
744744 ),
745745 .mips, .mipsel => asm volatile (
......@@ -753,7 +753,7 @@ const LinuxThreadImpl = struct {
753753 \\ syscall
754754 :
755755 : [ptr] "r" (@ptrToInt(self.mapped.ptr)),
756 [len] "r" (self.mapped.len)
756 [len] "r" (self.mapped.len),
757757 : "memory"
758758 ),
759759 .mips64, .mips64el => asm volatile (
......@@ -766,7 +766,7 @@ const LinuxThreadImpl = struct {
766766 \\ syscall
767767 :
768768 : [ptr] "r" (@ptrToInt(self.mapped.ptr)),
769 [len] "r" (self.mapped.len)
769 [len] "r" (self.mapped.len),
770770 : "memory"
771771 ),
772772 .powerpc, .powerpcle, .powerpc64, .powerpc64le => asm volatile (
......@@ -780,7 +780,7 @@ const LinuxThreadImpl = struct {
780780 \\ blr
781781 :
782782 : [ptr] "r" (@ptrToInt(self.mapped.ptr)),
783 [len] "r" (self.mapped.len)
783 [len] "r" (self.mapped.len),
784784 : "memory"
785785 ),
786786 .riscv64 => asm volatile (
......@@ -793,7 +793,7 @@ const LinuxThreadImpl = struct {
793793 \\ ecall
794794 :
795795 : [ptr] "r" (@ptrToInt(self.mapped.ptr)),
796 [len] "r" (self.mapped.len)
796 [len] "r" (self.mapped.len),
797797 : "memory"
798798 ),
799799 .sparcv9 => asm volatile (
......@@ -821,7 +821,7 @@ const LinuxThreadImpl = struct {
821821 \\ t 0x6d
822822 :
823823 : [ptr] "r" (@ptrToInt(self.mapped.ptr)),
824 [len] "r" (self.mapped.len)
824 [len] "r" (self.mapped.len),
825825 : "memory"
826826 ),
827827 else => |cpu_arch| @compileError("Unsupported linux arch: " ++ @tagName(cpu_arch)),
lib/std/atomic/Atomic.zig+18-18
......@@ -176,69 +176,69 @@ pub fn Atomic(comptime T: type) type {
176176 2 => switch (op) {
177177 .Set => asm volatile ("lock btsw %[bit], %[ptr]"
178178 // LLVM doesn't support u1 flag register return values
179 : [result] "={@ccc}" (-> u8)
179 : [result] "={@ccc}" (-> u8),
180180 : [ptr] "*p" (&self.value),
181 [bit] "X" (@as(T, bit))
181 [bit] "X" (@as(T, bit)),
182182 : "cc", "memory"
183183 ),
184184 .Reset => asm volatile ("lock btrw %[bit], %[ptr]"
185185 // LLVM doesn't support u1 flag register return values
186 : [result] "={@ccc}" (-> u8)
186 : [result] "={@ccc}" (-> u8),
187187 : [ptr] "*p" (&self.value),
188 [bit] "X" (@as(T, bit))
188 [bit] "X" (@as(T, bit)),
189189 : "cc", "memory"
190190 ),
191191 .Toggle => asm volatile ("lock btcw %[bit], %[ptr]"
192192 // LLVM doesn't support u1 flag register return values
193 : [result] "={@ccc}" (-> u8)
193 : [result] "={@ccc}" (-> u8),
194194 : [ptr] "*p" (&self.value),
195 [bit] "X" (@as(T, bit))
195 [bit] "X" (@as(T, bit)),
196196 : "cc", "memory"
197197 ),
198198 },
199199 4 => switch (op) {
200200 .Set => asm volatile ("lock btsl %[bit], %[ptr]"
201201 // LLVM doesn't support u1 flag register return values
202 : [result] "={@ccc}" (-> u8)
202 : [result] "={@ccc}" (-> u8),
203203 : [ptr] "*p" (&self.value),
204 [bit] "X" (@as(T, bit))
204 [bit] "X" (@as(T, bit)),
205205 : "cc", "memory"
206206 ),
207207 .Reset => asm volatile ("lock btrl %[bit], %[ptr]"
208208 // LLVM doesn't support u1 flag register return values
209 : [result] "={@ccc}" (-> u8)
209 : [result] "={@ccc}" (-> u8),
210210 : [ptr] "*p" (&self.value),
211 [bit] "X" (@as(T, bit))
211 [bit] "X" (@as(T, bit)),
212212 : "cc", "memory"
213213 ),
214214 .Toggle => asm volatile ("lock btcl %[bit], %[ptr]"
215215 // LLVM doesn't support u1 flag register return values
216 : [result] "={@ccc}" (-> u8)
216 : [result] "={@ccc}" (-> u8),
217217 : [ptr] "*p" (&self.value),
218 [bit] "X" (@as(T, bit))
218 [bit] "X" (@as(T, bit)),
219219 : "cc", "memory"
220220 ),
221221 },
222222 8 => switch (op) {
223223 .Set => asm volatile ("lock btsq %[bit], %[ptr]"
224224 // LLVM doesn't support u1 flag register return values
225 : [result] "={@ccc}" (-> u8)
225 : [result] "={@ccc}" (-> u8),
226226 : [ptr] "*p" (&self.value),
227 [bit] "X" (@as(T, bit))
227 [bit] "X" (@as(T, bit)),
228228 : "cc", "memory"
229229 ),
230230 .Reset => asm volatile ("lock btrq %[bit], %[ptr]"
231231 // LLVM doesn't support u1 flag register return values
232 : [result] "={@ccc}" (-> u8)
232 : [result] "={@ccc}" (-> u8),
233233 : [ptr] "*p" (&self.value),
234 [bit] "X" (@as(T, bit))
234 [bit] "X" (@as(T, bit)),
235235 : "cc", "memory"
236236 ),
237237 .Toggle => asm volatile ("lock btcq %[bit], %[ptr]"
238238 // LLVM doesn't support u1 flag register return values
239 : [result] "={@ccc}" (-> u8)
239 : [result] "={@ccc}" (-> u8),
240240 : [ptr] "*p" (&self.value),
241 [bit] "X" (@as(T, bit))
241 [bit] "X" (@as(T, bit)),
242242 : "cc", "memory"
243243 ),
244244 },
lib/std/crypto/aes/aesni.zig+12-12
......@@ -34,9 +34,9 @@ pub const Block = struct {
3434 return Block{
3535 .repr = asm (
3636 \\ vaesenc %[rk], %[in], %[out]
37 : [out] "=x" (-> BlockVec)
37 : [out] "=x" (-> BlockVec),
3838 : [in] "x" (block.repr),
39 [rk] "x" (round_key.repr)
39 [rk] "x" (round_key.repr),
4040 ),
4141 };
4242 }
......@@ -46,9 +46,9 @@ pub const Block = struct {
4646 return Block{
4747 .repr = asm (
4848 \\ vaesenclast %[rk], %[in], %[out]
49 : [out] "=x" (-> BlockVec)
49 : [out] "=x" (-> BlockVec),
5050 : [in] "x" (block.repr),
51 [rk] "x" (round_key.repr)
51 [rk] "x" (round_key.repr),
5252 ),
5353 };
5454 }
......@@ -58,9 +58,9 @@ pub const Block = struct {
5858 return Block{
5959 .repr = asm (
6060 \\ vaesdec %[rk], %[in], %[out]
61 : [out] "=x" (-> BlockVec)
61 : [out] "=x" (-> BlockVec),
6262 : [in] "x" (block.repr),
63 [rk] "x" (inv_round_key.repr)
63 [rk] "x" (inv_round_key.repr),
6464 ),
6565 };
6666 }
......@@ -70,9 +70,9 @@ pub const Block = struct {
7070 return Block{
7171 .repr = asm (
7272 \\ vaesdeclast %[rk], %[in], %[out]
73 : [out] "=x" (-> BlockVec)
73 : [out] "=x" (-> BlockVec),
7474 : [in] "x" (block.repr),
75 [rk] "x" (inv_round_key.repr)
75 [rk] "x" (inv_round_key.repr),
7676 ),
7777 };
7878 }
......@@ -190,11 +190,11 @@ fn KeySchedule(comptime Aes: type) type {
190190 \\ vpxor %[ts], %[r], %[r]
191191 : [r] "=&x" (-> BlockVec),
192192 [s] "=&x" (s),
193 [ts] "=&x" (ts)
193 [ts] "=&x" (ts),
194194 : [rc] "n" (rc),
195195 [t] "x" (t),
196196 [tx] "x" (tx),
197 [mask] "n" (@as(u8, if (second) 0xaa else 0xff))
197 [mask] "n" (@as(u8, if (second) 0xaa else 0xff)),
198198 );
199199 }
200200
......@@ -235,8 +235,8 @@ fn KeySchedule(comptime Aes: type) type {
235235 inv_round_keys[i] = Block{
236236 .repr = asm (
237237 \\ vaesimc %[rk], %[inv_rk]
238 : [inv_rk] "=x" (-> BlockVec)
239 : [rk] "x" (round_keys[rounds - i].repr)
238 : [inv_rk] "=x" (-> BlockVec),
239 : [rk] "x" (round_keys[rounds - i].repr),
240240 ),
241241 };
242242 }
lib/std/crypto/aes/armcrypto.zig+14-14
......@@ -39,10 +39,10 @@ pub const Block = struct {
3939 \\ aese %[out].16b, %[zero].16b
4040 \\ aesmc %[out].16b, %[out].16b
4141 \\ eor %[out].16b, %[out].16b, %[rk].16b
42 : [out] "=&x" (-> BlockVec)
42 : [out] "=&x" (-> BlockVec),
4343 : [in] "x" (block.repr),
4444 [rk] "x" (round_key.repr),
45 [zero] "x" (zero)
45 [zero] "x" (zero),
4646 ),
4747 };
4848 }
......@@ -54,10 +54,10 @@ pub const Block = struct {
5454 \\ mov %[out].16b, %[in].16b
5555 \\ aese %[out].16b, %[zero].16b
5656 \\ eor %[out].16b, %[out].16b, %[rk].16b
57 : [out] "=&x" (-> BlockVec)
57 : [out] "=&x" (-> BlockVec),
5858 : [in] "x" (block.repr),
5959 [rk] "x" (round_key.repr),
60 [zero] "x" (zero)
60 [zero] "x" (zero),
6161 ),
6262 };
6363 }
......@@ -70,10 +70,10 @@ pub const Block = struct {
7070 \\ aesd %[out].16b, %[zero].16b
7171 \\ aesimc %[out].16b, %[out].16b
7272 \\ eor %[out].16b, %[out].16b, %[rk].16b
73 : [out] "=&x" (-> BlockVec)
73 : [out] "=&x" (-> BlockVec),
7474 : [in] "x" (block.repr),
7575 [rk] "x" (inv_round_key.repr),
76 [zero] "x" (zero)
76 [zero] "x" (zero),
7777 ),
7878 };
7979 }
......@@ -85,10 +85,10 @@ pub const Block = struct {
8585 \\ mov %[out].16b, %[in].16b
8686 \\ aesd %[out].16b, %[zero].16b
8787 \\ eor %[out].16b, %[out].16b, %[rk].16b
88 : [out] "=&x" (-> BlockVec)
88 : [out] "=&x" (-> BlockVec),
8989 : [in] "x" (block.repr),
9090 [rk] "x" (inv_round_key.repr),
91 [zero] "x" (zero)
91 [zero] "x" (zero),
9292 ),
9393 };
9494 }
......@@ -210,11 +210,11 @@ fn KeySchedule(comptime Aes: type) type {
210210 [v1] "=&x" (v1),
211211 [v2] "=&x" (v2),
212212 [v3] "=&x" (v3),
213 [v4] "=&x" (v4)
213 [v4] "=&x" (v4),
214214 : [rc] "N" (rc),
215215 [t] "x" (t),
216216 [zero] "x" (zero),
217 [mask] "x" (mask1)
217 [mask] "x" (mask1),
218218 );
219219 }
220220
......@@ -240,12 +240,12 @@ fn KeySchedule(comptime Aes: type) type {
240240 [v1] "=&x" (v1),
241241 [v2] "=&x" (v2),
242242 [v3] "=&x" (v3),
243 [v4] "=&x" (v4)
243 [v4] "=&x" (v4),
244244 : [rc] "N" (if (second) @as(u8, 0) else rc),
245245 [t] "x" (t),
246246 [tx] "x" (tx),
247247 [zero] "x" (zero),
248 [mask] "x" (if (second) mask2 else mask1)
248 [mask] "x" (if (second) mask2 else mask1),
249249 );
250250 }
251251
......@@ -286,8 +286,8 @@ fn KeySchedule(comptime Aes: type) type {
286286 inv_round_keys[i] = Block{
287287 .repr = asm (
288288 \\ aesimc %[inv_rk].16b, %[rk].16b
289 : [inv_rk] "=x" (-> BlockVec)
290 : [rk] "x" (round_keys[rounds - i].repr)
289 : [inv_rk] "=x" (-> BlockVec),
290 : [rk] "x" (round_keys[rounds - i].repr),
291291 ),
292292 };
293293 }
lib/std/crypto/ghash.zig+4-4
......@@ -94,9 +94,9 @@ pub const Ghash = struct {
9494 const Vector = std.meta.Vector;
9595 const product = asm (
9696 \\ vpclmulqdq $0x00, %[x], %[y], %[out]
97 : [out] "=x" (-> Vector(2, u64))
97 : [out] "=x" (-> Vector(2, u64)),
9898 : [x] "x" (@bitCast(Vector(2, u64), @as(u128, x))),
99 [y] "x" (@bitCast(Vector(2, u64), @as(u128, y)))
99 [y] "x" (@bitCast(Vector(2, u64), @as(u128, y))),
100100 );
101101 return product[0];
102102 }
......@@ -105,9 +105,9 @@ pub const Ghash = struct {
105105 const Vector = std.meta.Vector;
106106 const product = asm (
107107 \\ pmull %[out].1q, %[x].1d, %[y].1d
108 : [out] "=w" (-> Vector(2, u64))
108 : [out] "=w" (-> Vector(2, u64)),
109109 : [x] "w" (@bitCast(Vector(2, u64), @as(u128, x))),
110 [y] "w" (@bitCast(Vector(2, u64), @as(u128, y)))
110 [y] "w" (@bitCast(Vector(2, u64), @as(u128, y))),
111111 );
112112 return product[0];
113113 }
lib/std/debug.zig+1-1
......@@ -1634,7 +1634,7 @@ fn handleSegfaultWindowsExtra(info: *windows.EXCEPTION_POINTERS, comptime msg: u
16341634
16351635pub fn dumpStackPointerAddr(prefix: []const u8) void {
16361636 const sp = asm (""
1637 : [argc] "={rsp}" (-> usize)
1637 : [argc] "={rsp}" (-> usize),
16381638 );
16391639 std.debug.warn("{} sp = 0x{x}\n", .{ prefix, sp });
16401640}
lib/std/mem.zig+1-1
......@@ -2860,7 +2860,7 @@ pub fn alignForwardGeneric(comptime T: type, addr: T, alignment: T) T {
28602860pub fn doNotOptimizeAway(val: anytype) void {
28612861 asm volatile (""
28622862 :
2863 : [val] "rm" (val)
2863 : [val] "rm" (val),
28642864 : "memory"
28652865 );
28662866}
lib/std/os/linux/arm-eabi.zig+16-16
......@@ -2,63 +2,63 @@ usingnamespace @import("../bits/linux.zig");
22
33pub fn syscall0(number: SYS) usize {
44 return asm volatile ("svc #0"
5 : [ret] "={r0}" (-> usize)
6 : [number] "{r7}" (@enumToInt(number))
5 : [ret] "={r0}" (-> usize),
6 : [number] "{r7}" (@enumToInt(number)),
77 : "memory"
88 );
99}
1010
1111pub fn syscall1(number: SYS, arg1: usize) usize {
1212 return asm volatile ("svc #0"
13 : [ret] "={r0}" (-> usize)
13 : [ret] "={r0}" (-> usize),
1414 : [number] "{r7}" (@enumToInt(number)),
15 [arg1] "{r0}" (arg1)
15 [arg1] "{r0}" (arg1),
1616 : "memory"
1717 );
1818}
1919
2020pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
2121 return asm volatile ("svc #0"
22 : [ret] "={r0}" (-> usize)
22 : [ret] "={r0}" (-> usize),
2323 : [number] "{r7}" (@enumToInt(number)),
2424 [arg1] "{r0}" (arg1),
25 [arg2] "{r1}" (arg2)
25 [arg2] "{r1}" (arg2),
2626 : "memory"
2727 );
2828}
2929
3030pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
3131 return asm volatile ("svc #0"
32 : [ret] "={r0}" (-> usize)
32 : [ret] "={r0}" (-> usize),
3333 : [number] "{r7}" (@enumToInt(number)),
3434 [arg1] "{r0}" (arg1),
3535 [arg2] "{r1}" (arg2),
36 [arg3] "{r2}" (arg3)
36 [arg3] "{r2}" (arg3),
3737 : "memory"
3838 );
3939}
4040
4141pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
4242 return asm volatile ("svc #0"
43 : [ret] "={r0}" (-> usize)
43 : [ret] "={r0}" (-> usize),
4444 : [number] "{r7}" (@enumToInt(number)),
4545 [arg1] "{r0}" (arg1),
4646 [arg2] "{r1}" (arg2),
4747 [arg3] "{r2}" (arg3),
48 [arg4] "{r3}" (arg4)
48 [arg4] "{r3}" (arg4),
4949 : "memory"
5050 );
5151}
5252
5353pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
5454 return asm volatile ("svc #0"
55 : [ret] "={r0}" (-> usize)
55 : [ret] "={r0}" (-> usize),
5656 : [number] "{r7}" (@enumToInt(number)),
5757 [arg1] "{r0}" (arg1),
5858 [arg2] "{r1}" (arg2),
5959 [arg3] "{r2}" (arg3),
6060 [arg4] "{r3}" (arg4),
61 [arg5] "{r4}" (arg5)
61 [arg5] "{r4}" (arg5),
6262 : "memory"
6363 );
6464}
......@@ -73,14 +73,14 @@ pub fn syscall6(
7373 arg6: usize,
7474) usize {
7575 return asm volatile ("svc #0"
76 : [ret] "={r0}" (-> usize)
76 : [ret] "={r0}" (-> usize),
7777 : [number] "{r7}" (@enumToInt(number)),
7878 [arg1] "{r0}" (arg1),
7979 [arg2] "{r1}" (arg2),
8080 [arg3] "{r2}" (arg3),
8181 [arg4] "{r3}" (arg4),
8282 [arg5] "{r4}" (arg5),
83 [arg6] "{r5}" (arg6)
83 [arg6] "{r5}" (arg6),
8484 : "memory"
8585 );
8686}
......@@ -91,7 +91,7 @@ pub extern fn clone(func: fn (arg: usize) callconv(.C) u8, stack: usize, flags:
9191pub fn restore() callconv(.Naked) void {
9292 return asm volatile ("svc #0"
9393 :
94 : [number] "{r7}" (@enumToInt(SYS.sigreturn))
94 : [number] "{r7}" (@enumToInt(SYS.sigreturn)),
9595 : "memory"
9696 );
9797}
......@@ -99,7 +99,7 @@ pub fn restore() callconv(.Naked) void {
9999pub fn restore_rt() callconv(.Naked) void {
100100 return asm volatile ("svc #0"
101101 :
102 : [number] "{r7}" (@enumToInt(SYS.rt_sigreturn))
102 : [number] "{r7}" (@enumToInt(SYS.rt_sigreturn)),
103103 : "memory"
104104 );
105105}
lib/std/os/linux/arm64.zig+15-15
......@@ -2,63 +2,63 @@ usingnamespace @import("../bits/linux.zig");
22
33pub fn syscall0(number: SYS) usize {
44 return asm volatile ("svc #0"
5 : [ret] "={x0}" (-> usize)
6 : [number] "{x8}" (@enumToInt(number))
5 : [ret] "={x0}" (-> usize),
6 : [number] "{x8}" (@enumToInt(number)),
77 : "memory", "cc"
88 );
99}
1010
1111pub fn syscall1(number: SYS, arg1: usize) usize {
1212 return asm volatile ("svc #0"
13 : [ret] "={x0}" (-> usize)
13 : [ret] "={x0}" (-> usize),
1414 : [number] "{x8}" (@enumToInt(number)),
15 [arg1] "{x0}" (arg1)
15 [arg1] "{x0}" (arg1),
1616 : "memory", "cc"
1717 );
1818}
1919
2020pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
2121 return asm volatile ("svc #0"
22 : [ret] "={x0}" (-> usize)
22 : [ret] "={x0}" (-> usize),
2323 : [number] "{x8}" (@enumToInt(number)),
2424 [arg1] "{x0}" (arg1),
25 [arg2] "{x1}" (arg2)
25 [arg2] "{x1}" (arg2),
2626 : "memory", "cc"
2727 );
2828}
2929
3030pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
3131 return asm volatile ("svc #0"
32 : [ret] "={x0}" (-> usize)
32 : [ret] "={x0}" (-> usize),
3333 : [number] "{x8}" (@enumToInt(number)),
3434 [arg1] "{x0}" (arg1),
3535 [arg2] "{x1}" (arg2),
36 [arg3] "{x2}" (arg3)
36 [arg3] "{x2}" (arg3),
3737 : "memory", "cc"
3838 );
3939}
4040
4141pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
4242 return asm volatile ("svc #0"
43 : [ret] "={x0}" (-> usize)
43 : [ret] "={x0}" (-> usize),
4444 : [number] "{x8}" (@enumToInt(number)),
4545 [arg1] "{x0}" (arg1),
4646 [arg2] "{x1}" (arg2),
4747 [arg3] "{x2}" (arg3),
48 [arg4] "{x3}" (arg4)
48 [arg4] "{x3}" (arg4),
4949 : "memory", "cc"
5050 );
5151}
5252
5353pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
5454 return asm volatile ("svc #0"
55 : [ret] "={x0}" (-> usize)
55 : [ret] "={x0}" (-> usize),
5656 : [number] "{x8}" (@enumToInt(number)),
5757 [arg1] "{x0}" (arg1),
5858 [arg2] "{x1}" (arg2),
5959 [arg3] "{x2}" (arg3),
6060 [arg4] "{x3}" (arg4),
61 [arg5] "{x4}" (arg5)
61 [arg5] "{x4}" (arg5),
6262 : "memory", "cc"
6363 );
6464}
......@@ -73,14 +73,14 @@ pub fn syscall6(
7373 arg6: usize,
7474) usize {
7575 return asm volatile ("svc #0"
76 : [ret] "={x0}" (-> usize)
76 : [ret] "={x0}" (-> usize),
7777 : [number] "{x8}" (@enumToInt(number)),
7878 [arg1] "{x0}" (arg1),
7979 [arg2] "{x1}" (arg2),
8080 [arg3] "{x2}" (arg3),
8181 [arg4] "{x3}" (arg4),
8282 [arg5] "{x4}" (arg5),
83 [arg6] "{x5}" (arg6)
83 [arg6] "{x5}" (arg6),
8484 : "memory", "cc"
8585 );
8686}
......@@ -93,7 +93,7 @@ pub const restore = restore_rt;
9393pub fn restore_rt() callconv(.Naked) void {
9494 return asm volatile ("svc #0"
9595 :
96 : [number] "{x8}" (@enumToInt(SYS.rt_sigreturn))
96 : [number] "{x8}" (@enumToInt(SYS.rt_sigreturn)),
9797 : "memory", "cc"
9898 );
9999}
lib/std/os/linux/i386.zig+18-18
......@@ -2,63 +2,63 @@ usingnamespace @import("../bits/linux.zig");
22
33pub fn syscall0(number: SYS) usize {
44 return asm volatile ("int $0x80"
5 : [ret] "={eax}" (-> usize)
6 : [number] "{eax}" (@enumToInt(number))
5 : [ret] "={eax}" (-> usize),
6 : [number] "{eax}" (@enumToInt(number)),
77 : "memory"
88 );
99}
1010
1111pub fn syscall1(number: SYS, arg1: usize) usize {
1212 return asm volatile ("int $0x80"
13 : [ret] "={eax}" (-> usize)
13 : [ret] "={eax}" (-> usize),
1414 : [number] "{eax}" (@enumToInt(number)),
15 [arg1] "{ebx}" (arg1)
15 [arg1] "{ebx}" (arg1),
1616 : "memory"
1717 );
1818}
1919
2020pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
2121 return asm volatile ("int $0x80"
22 : [ret] "={eax}" (-> usize)
22 : [ret] "={eax}" (-> usize),
2323 : [number] "{eax}" (@enumToInt(number)),
2424 [arg1] "{ebx}" (arg1),
25 [arg2] "{ecx}" (arg2)
25 [arg2] "{ecx}" (arg2),
2626 : "memory"
2727 );
2828}
2929
3030pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
3131 return asm volatile ("int $0x80"
32 : [ret] "={eax}" (-> usize)
32 : [ret] "={eax}" (-> usize),
3333 : [number] "{eax}" (@enumToInt(number)),
3434 [arg1] "{ebx}" (arg1),
3535 [arg2] "{ecx}" (arg2),
36 [arg3] "{edx}" (arg3)
36 [arg3] "{edx}" (arg3),
3737 : "memory"
3838 );
3939}
4040
4141pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
4242 return asm volatile ("int $0x80"
43 : [ret] "={eax}" (-> usize)
43 : [ret] "={eax}" (-> usize),
4444 : [number] "{eax}" (@enumToInt(number)),
4545 [arg1] "{ebx}" (arg1),
4646 [arg2] "{ecx}" (arg2),
4747 [arg3] "{edx}" (arg3),
48 [arg4] "{esi}" (arg4)
48 [arg4] "{esi}" (arg4),
4949 : "memory"
5050 );
5151}
5252
5353pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
5454 return asm volatile ("int $0x80"
55 : [ret] "={eax}" (-> usize)
55 : [ret] "={eax}" (-> usize),
5656 : [number] "{eax}" (@enumToInt(number)),
5757 [arg1] "{ebx}" (arg1),
5858 [arg2] "{ecx}" (arg2),
5959 [arg3] "{edx}" (arg3),
6060 [arg4] "{esi}" (arg4),
61 [arg5] "{edi}" (arg5)
61 [arg5] "{edi}" (arg5),
6262 : "memory"
6363 );
6464}
......@@ -83,24 +83,24 @@ pub fn syscall6(
8383 \\ int $0x80
8484 \\ pop %%ebp
8585 \\ add $4, %%esp
86 : [ret] "={eax}" (-> usize)
86 : [ret] "={eax}" (-> usize),
8787 : [number] "{eax}" (@enumToInt(number)),
8888 [arg1] "{ebx}" (arg1),
8989 [arg2] "{ecx}" (arg2),
9090 [arg3] "{edx}" (arg3),
9191 [arg4] "{esi}" (arg4),
9292 [arg5] "{edi}" (arg5),
93 [arg6] "rm" (arg6)
93 [arg6] "rm" (arg6),
9494 : "memory"
9595 );
9696}
9797
9898pub fn socketcall(call: usize, args: [*]usize) usize {
9999 return asm volatile ("int $0x80"
100 : [ret] "={eax}" (-> usize)
100 : [ret] "={eax}" (-> usize),
101101 : [number] "{eax}" (@enumToInt(SYS.socketcall)),
102102 [arg1] "{ebx}" (call),
103 [arg2] "{ecx}" (@ptrToInt(args))
103 [arg2] "{ecx}" (@ptrToInt(args)),
104104 : "memory"
105105 );
106106}
......@@ -111,7 +111,7 @@ pub extern fn clone(func: fn (arg: usize) callconv(.C) u8, stack: usize, flags:
111111pub fn restore() callconv(.Naked) void {
112112 return asm volatile ("int $0x80"
113113 :
114 : [number] "{eax}" (@enumToInt(SYS.sigreturn))
114 : [number] "{eax}" (@enumToInt(SYS.sigreturn)),
115115 : "memory"
116116 );
117117}
......@@ -119,7 +119,7 @@ pub fn restore() callconv(.Naked) void {
119119pub fn restore_rt() callconv(.Naked) void {
120120 return asm volatile ("int $0x80"
121121 :
122 : [number] "{eax}" (@enumToInt(SYS.rt_sigreturn))
122 : [number] "{eax}" (@enumToInt(SYS.rt_sigreturn)),
123123 : "memory"
124124 );
125125}
lib/std/os/linux/mips.zig+20-20
......@@ -6,8 +6,8 @@ pub fn syscall0(number: SYS) usize {
66 \\ blez $7, 1f
77 \\ subu $2, $0, $2
88 \\ 1:
9 : [ret] "={$2}" (-> usize)
10 : [number] "{$2}" (@enumToInt(number))
9 : [ret] "={$2}" (-> usize),
10 : [number] "{$2}" (@enumToInt(number)),
1111 : "memory", "cc", "$7"
1212 );
1313}
......@@ -25,9 +25,9 @@ pub fn syscall_pipe(fd: *[2]i32) usize {
2525 \\ sw $2, 0($4)
2626 \\ sw $3, 4($4)
2727 \\ 2:
28 : [ret] "={$2}" (-> usize)
28 : [ret] "={$2}" (-> usize),
2929 : [number] "{$2}" (@enumToInt(SYS.pipe)),
30 [fd] "{$4}" (fd)
30 [fd] "{$4}" (fd),
3131 : "memory", "cc", "$7"
3232 );
3333}
......@@ -38,9 +38,9 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
3838 \\ blez $7, 1f
3939 \\ subu $2, $0, $2
4040 \\ 1:
41 : [ret] "={$2}" (-> usize)
41 : [ret] "={$2}" (-> usize),
4242 : [number] "{$2}" (@enumToInt(number)),
43 [arg1] "{$4}" (arg1)
43 [arg1] "{$4}" (arg1),
4444 : "memory", "cc", "$7"
4545 );
4646}
......@@ -51,10 +51,10 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
5151 \\ blez $7, 1f
5252 \\ subu $2, $0, $2
5353 \\ 1:
54 : [ret] "={$2}" (-> usize)
54 : [ret] "={$2}" (-> usize),
5555 : [number] "{$2}" (@enumToInt(number)),
5656 [arg1] "{$4}" (arg1),
57 [arg2] "{$5}" (arg2)
57 [arg2] "{$5}" (arg2),
5858 : "memory", "cc", "$7"
5959 );
6060}
......@@ -65,11 +65,11 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
6565 \\ blez $7, 1f
6666 \\ subu $2, $0, $2
6767 \\ 1:
68 : [ret] "={$2}" (-> usize)
68 : [ret] "={$2}" (-> usize),
6969 : [number] "{$2}" (@enumToInt(number)),
7070 [arg1] "{$4}" (arg1),
7171 [arg2] "{$5}" (arg2),
72 [arg3] "{$6}" (arg3)
72 [arg3] "{$6}" (arg3),
7373 : "memory", "cc", "$7"
7474 );
7575}
......@@ -80,12 +80,12 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
8080 \\ blez $7, 1f
8181 \\ subu $2, $0, $2
8282 \\ 1:
83 : [ret] "={$2}" (-> usize)
83 : [ret] "={$2}" (-> usize),
8484 : [number] "{$2}" (@enumToInt(number)),
8585 [arg1] "{$4}" (arg1),
8686 [arg2] "{$5}" (arg2),
8787 [arg3] "{$6}" (arg3),
88 [arg4] "{$7}" (arg4)
88 [arg4] "{$7}" (arg4),
8989 : "memory", "cc", "$7"
9090 );
9191}
......@@ -100,13 +100,13 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
100100 \\ blez $7, 1f
101101 \\ subu $2, $0, $2
102102 \\ 1:
103 : [ret] "={$2}" (-> usize)
103 : [ret] "={$2}" (-> usize),
104104 : [number] "{$2}" (@enumToInt(number)),
105105 [arg1] "{$4}" (arg1),
106106 [arg2] "{$5}" (arg2),
107107 [arg3] "{$6}" (arg3),
108108 [arg4] "{$7}" (arg4),
109 [arg5] "r" (arg5)
109 [arg5] "r" (arg5),
110110 : "memory", "cc", "$7"
111111 );
112112}
......@@ -133,14 +133,14 @@ pub fn syscall6(
133133 \\ blez $7, 1f
134134 \\ subu $2, $0, $2
135135 \\ 1:
136 : [ret] "={$2}" (-> usize)
136 : [ret] "={$2}" (-> usize),
137137 : [number] "{$2}" (@enumToInt(number)),
138138 [arg1] "{$4}" (arg1),
139139 [arg2] "{$5}" (arg2),
140140 [arg3] "{$6}" (arg3),
141141 [arg4] "{$7}" (arg4),
142142 [arg5] "r" (arg5),
143 [arg6] "r" (arg6)
143 [arg6] "r" (arg6),
144144 : "memory", "cc", "$7"
145145 );
146146}
......@@ -166,7 +166,7 @@ pub fn syscall7(
166166 \\ blez $7, 1f
167167 \\ subu $2, $0, $2
168168 \\ 1:
169 : [ret] "={$2}" (-> usize)
169 : [ret] "={$2}" (-> usize),
170170 : [number] "{$2}" (@enumToInt(number)),
171171 [arg1] "{$4}" (arg1),
172172 [arg2] "{$5}" (arg2),
......@@ -174,7 +174,7 @@ pub fn syscall7(
174174 [arg4] "{$7}" (arg4),
175175 [arg5] "r" (arg5),
176176 [arg6] "r" (arg6),
177 [arg7] "r" (arg7)
177 [arg7] "r" (arg7),
178178 : "memory", "cc", "$7"
179179 );
180180}
......@@ -185,7 +185,7 @@ pub extern fn clone(func: fn (arg: usize) callconv(.C) u8, stack: usize, flags:
185185pub fn restore() callconv(.Naked) void {
186186 return asm volatile ("syscall"
187187 :
188 : [number] "{$2}" (@enumToInt(SYS.sigreturn))
188 : [number] "{$2}" (@enumToInt(SYS.sigreturn)),
189189 : "memory", "cc", "$7"
190190 );
191191}
......@@ -193,7 +193,7 @@ pub fn restore() callconv(.Naked) void {
193193pub fn restore_rt() callconv(.Naked) void {
194194 return asm volatile ("syscall"
195195 :
196 : [number] "{$2}" (@enumToInt(SYS.rt_sigreturn))
196 : [number] "{$2}" (@enumToInt(SYS.rt_sigreturn)),
197197 : "memory", "cc", "$7"
198198 );
199199}
lib/std/os/linux/powerpc.zig+15-15
......@@ -6,8 +6,8 @@ pub fn syscall0(number: SYS) usize {
66 \\ bns+ 1f
77 \\ neg 3, 3
88 \\ 1:
9 : [ret] "={r3}" (-> usize)
10 : [number] "{r0}" (@enumToInt(number))
9 : [ret] "={r3}" (-> usize),
10 : [number] "{r0}" (@enumToInt(number)),
1111 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
1212 );
1313}
......@@ -18,9 +18,9 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
1818 \\ bns+ 1f
1919 \\ neg 3, 3
2020 \\ 1:
21 : [ret] "={r3}" (-> usize)
21 : [ret] "={r3}" (-> usize),
2222 : [number] "{r0}" (@enumToInt(number)),
23 [arg1] "{r3}" (arg1)
23 [arg1] "{r3}" (arg1),
2424 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
2525 );
2626}
......@@ -31,10 +31,10 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
3131 \\ bns+ 1f
3232 \\ neg 3, 3
3333 \\ 1:
34 : [ret] "={r3}" (-> usize)
34 : [ret] "={r3}" (-> usize),
3535 : [number] "{r0}" (@enumToInt(number)),
3636 [arg1] "{r3}" (arg1),
37 [arg2] "{r4}" (arg2)
37 [arg2] "{r4}" (arg2),
3838 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
3939 );
4040}
......@@ -45,11 +45,11 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
4545 \\ bns+ 1f
4646 \\ neg 3, 3
4747 \\ 1:
48 : [ret] "={r3}" (-> usize)
48 : [ret] "={r3}" (-> usize),
4949 : [number] "{r0}" (@enumToInt(number)),
5050 [arg1] "{r3}" (arg1),
5151 [arg2] "{r4}" (arg2),
52 [arg3] "{r5}" (arg3)
52 [arg3] "{r5}" (arg3),
5353 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
5454 );
5555}
......@@ -60,12 +60,12 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
6060 \\ bns+ 1f
6161 \\ neg 3, 3
6262 \\ 1:
63 : [ret] "={r3}" (-> usize)
63 : [ret] "={r3}" (-> usize),
6464 : [number] "{r0}" (@enumToInt(number)),
6565 [arg1] "{r3}" (arg1),
6666 [arg2] "{r4}" (arg2),
6767 [arg3] "{r5}" (arg3),
68 [arg4] "{r6}" (arg4)
68 [arg4] "{r6}" (arg4),
6969 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
7070 );
7171}
......@@ -76,13 +76,13 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
7676 \\ bns+ 1f
7777 \\ neg 3, 3
7878 \\ 1:
79 : [ret] "={r3}" (-> usize)
79 : [ret] "={r3}" (-> usize),
8080 : [number] "{r0}" (@enumToInt(number)),
8181 [arg1] "{r3}" (arg1),
8282 [arg2] "{r4}" (arg2),
8383 [arg3] "{r5}" (arg3),
8484 [arg4] "{r6}" (arg4),
85 [arg5] "{r7}" (arg5)
85 [arg5] "{r7}" (arg5),
8686 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
8787 );
8888}
......@@ -101,14 +101,14 @@ pub fn syscall6(
101101 \\ bns+ 1f
102102 \\ neg 3, 3
103103 \\ 1:
104 : [ret] "={r3}" (-> usize)
104 : [ret] "={r3}" (-> usize),
105105 : [number] "{r0}" (@enumToInt(number)),
106106 [arg1] "{r3}" (arg1),
107107 [arg2] "{r4}" (arg2),
108108 [arg3] "{r5}" (arg3),
109109 [arg4] "{r6}" (arg4),
110110 [arg5] "{r7}" (arg5),
111 [arg6] "{r8}" (arg6)
111 [arg6] "{r8}" (arg6),
112112 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
113113 );
114114}
......@@ -121,7 +121,7 @@ pub const restore = restore_rt;
121121pub fn restore_rt() callconv(.Naked) void {
122122 return asm volatile ("sc"
123123 :
124 : [number] "{r0}" (@enumToInt(SYS.rt_sigreturn))
124 : [number] "{r0}" (@enumToInt(SYS.rt_sigreturn)),
125125 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
126126 );
127127}
lib/std/os/linux/powerpc64.zig+15-15
......@@ -6,8 +6,8 @@ pub fn syscall0(number: SYS) usize {
66 \\ bns+ 1f
77 \\ neg 3, 3
88 \\ 1:
9 : [ret] "={r3}" (-> usize)
10 : [number] "{r0}" (@enumToInt(number))
9 : [ret] "={r3}" (-> usize),
10 : [number] "{r0}" (@enumToInt(number)),
1111 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
1212 );
1313}
......@@ -18,9 +18,9 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
1818 \\ bns+ 1f
1919 \\ neg 3, 3
2020 \\ 1:
21 : [ret] "={r3}" (-> usize)
21 : [ret] "={r3}" (-> usize),
2222 : [number] "{r0}" (@enumToInt(number)),
23 [arg1] "{r3}" (arg1)
23 [arg1] "{r3}" (arg1),
2424 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
2525 );
2626}
......@@ -31,10 +31,10 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
3131 \\ bns+ 1f
3232 \\ neg 3, 3
3333 \\ 1:
34 : [ret] "={r3}" (-> usize)
34 : [ret] "={r3}" (-> usize),
3535 : [number] "{r0}" (@enumToInt(number)),
3636 [arg1] "{r3}" (arg1),
37 [arg2] "{r4}" (arg2)
37 [arg2] "{r4}" (arg2),
3838 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
3939 );
4040}
......@@ -45,11 +45,11 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
4545 \\ bns+ 1f
4646 \\ neg 3, 3
4747 \\ 1:
48 : [ret] "={r3}" (-> usize)
48 : [ret] "={r3}" (-> usize),
4949 : [number] "{r0}" (@enumToInt(number)),
5050 [arg1] "{r3}" (arg1),
5151 [arg2] "{r4}" (arg2),
52 [arg3] "{r5}" (arg3)
52 [arg3] "{r5}" (arg3),
5353 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
5454 );
5555}
......@@ -60,12 +60,12 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
6060 \\ bns+ 1f
6161 \\ neg 3, 3
6262 \\ 1:
63 : [ret] "={r3}" (-> usize)
63 : [ret] "={r3}" (-> usize),
6464 : [number] "{r0}" (@enumToInt(number)),
6565 [arg1] "{r3}" (arg1),
6666 [arg2] "{r4}" (arg2),
6767 [arg3] "{r5}" (arg3),
68 [arg4] "{r6}" (arg4)
68 [arg4] "{r6}" (arg4),
6969 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
7070 );
7171}
......@@ -76,13 +76,13 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
7676 \\ bns+ 1f
7777 \\ neg 3, 3
7878 \\ 1:
79 : [ret] "={r3}" (-> usize)
79 : [ret] "={r3}" (-> usize),
8080 : [number] "{r0}" (@enumToInt(number)),
8181 [arg1] "{r3}" (arg1),
8282 [arg2] "{r4}" (arg2),
8383 [arg3] "{r5}" (arg3),
8484 [arg4] "{r6}" (arg4),
85 [arg5] "{r7}" (arg5)
85 [arg5] "{r7}" (arg5),
8686 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
8787 );
8888}
......@@ -101,14 +101,14 @@ pub fn syscall6(
101101 \\ bns+ 1f
102102 \\ neg 3, 3
103103 \\ 1:
104 : [ret] "={r3}" (-> usize)
104 : [ret] "={r3}" (-> usize),
105105 : [number] "{r0}" (@enumToInt(number)),
106106 [arg1] "{r3}" (arg1),
107107 [arg2] "{r4}" (arg2),
108108 [arg3] "{r5}" (arg3),
109109 [arg4] "{r6}" (arg4),
110110 [arg5] "{r7}" (arg5),
111 [arg6] "{r8}" (arg6)
111 [arg6] "{r8}" (arg6),
112112 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
113113 );
114114}
......@@ -121,7 +121,7 @@ pub const restore = restore_rt;
121121pub fn restore_rt() callconv(.Naked) void {
122122 return asm volatile ("sc"
123123 :
124 : [number] "{r0}" (@enumToInt(SYS.rt_sigreturn))
124 : [number] "{r0}" (@enumToInt(SYS.rt_sigreturn)),
125125 : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
126126 );
127127}
lib/std/os/linux/riscv64.zig+15-15
......@@ -2,63 +2,63 @@ usingnamespace @import("../bits/linux.zig");
22
33pub fn syscall0(number: SYS) usize {
44 return asm volatile ("ecall"
5 : [ret] "={x10}" (-> usize)
6 : [number] "{x17}" (@enumToInt(number))
5 : [ret] "={x10}" (-> usize),
6 : [number] "{x17}" (@enumToInt(number)),
77 : "memory"
88 );
99}
1010
1111pub fn syscall1(number: SYS, arg1: usize) usize {
1212 return asm volatile ("ecall"
13 : [ret] "={x10}" (-> usize)
13 : [ret] "={x10}" (-> usize),
1414 : [number] "{x17}" (@enumToInt(number)),
15 [arg1] "{x10}" (arg1)
15 [arg1] "{x10}" (arg1),
1616 : "memory"
1717 );
1818}
1919
2020pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
2121 return asm volatile ("ecall"
22 : [ret] "={x10}" (-> usize)
22 : [ret] "={x10}" (-> usize),
2323 : [number] "{x17}" (@enumToInt(number)),
2424 [arg1] "{x10}" (arg1),
25 [arg2] "{x11}" (arg2)
25 [arg2] "{x11}" (arg2),
2626 : "memory"
2727 );
2828}
2929
3030pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
3131 return asm volatile ("ecall"
32 : [ret] "={x10}" (-> usize)
32 : [ret] "={x10}" (-> usize),
3333 : [number] "{x17}" (@enumToInt(number)),
3434 [arg1] "{x10}" (arg1),
3535 [arg2] "{x11}" (arg2),
36 [arg3] "{x12}" (arg3)
36 [arg3] "{x12}" (arg3),
3737 : "memory"
3838 );
3939}
4040
4141pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
4242 return asm volatile ("ecall"
43 : [ret] "={x10}" (-> usize)
43 : [ret] "={x10}" (-> usize),
4444 : [number] "{x17}" (@enumToInt(number)),
4545 [arg1] "{x10}" (arg1),
4646 [arg2] "{x11}" (arg2),
4747 [arg3] "{x12}" (arg3),
48 [arg4] "{x13}" (arg4)
48 [arg4] "{x13}" (arg4),
4949 : "memory"
5050 );
5151}
5252
5353pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
5454 return asm volatile ("ecall"
55 : [ret] "={x10}" (-> usize)
55 : [ret] "={x10}" (-> usize),
5656 : [number] "{x17}" (@enumToInt(number)),
5757 [arg1] "{x10}" (arg1),
5858 [arg2] "{x11}" (arg2),
5959 [arg3] "{x12}" (arg3),
6060 [arg4] "{x13}" (arg4),
61 [arg5] "{x14}" (arg5)
61 [arg5] "{x14}" (arg5),
6262 : "memory"
6363 );
6464}
......@@ -73,14 +73,14 @@ pub fn syscall6(
7373 arg6: usize,
7474) usize {
7575 return asm volatile ("ecall"
76 : [ret] "={x10}" (-> usize)
76 : [ret] "={x10}" (-> usize),
7777 : [number] "{x17}" (@enumToInt(number)),
7878 [arg1] "{x10}" (arg1),
7979 [arg2] "{x11}" (arg2),
8080 [arg3] "{x12}" (arg3),
8181 [arg4] "{x13}" (arg4),
8282 [arg5] "{x14}" (arg5),
83 [arg6] "{x15}" (arg6)
83 [arg6] "{x15}" (arg6),
8484 : "memory"
8585 );
8686}
......@@ -92,7 +92,7 @@ pub const restore = restore_rt;
9292pub fn restore_rt() callconv(.Naked) void {
9393 return asm volatile ("ecall"
9494 :
95 : [number] "{x17}" (@enumToInt(SYS.rt_sigreturn))
95 : [number] "{x17}" (@enumToInt(SYS.rt_sigreturn)),
9696 : "memory"
9797 );
9898}
lib/std/os/linux/sparc64.zig+19-19
......@@ -14,9 +14,9 @@ pub fn syscall_pipe(fd: *[2]i32) usize {
1414 \\ st %%o1, [%%g3+4]
1515 \\ clr %%o0
1616 \\2:
17 : [ret] "={o0}" (-> usize)
17 : [ret] "={o0}" (-> usize),
1818 : [number] "{g1}" (@enumToInt(SYS.pipe)),
19 [arg] "r" (fd)
19 [arg] "r" (fd),
2020 : "memory", "g3"
2121 );
2222}
......@@ -38,8 +38,8 @@ pub fn syscall_fork() usize {
3838 \\ dec %%o1
3939 \\ and %%o1, %%o0, %%o0
4040 \\ 2:
41 : [ret] "={o0}" (-> usize)
42 : [number] "{g1}" (@enumToInt(SYS.fork))
41 : [ret] "={o0}" (-> usize),
42 : [number] "{g1}" (@enumToInt(SYS.fork)),
4343 : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
4444 );
4545}
......@@ -51,8 +51,8 @@ pub fn syscall0(number: SYS) usize {
5151 \\ nop
5252 \\ neg %%o0
5353 \\ 1:
54 : [ret] "={o0}" (-> usize)
55 : [number] "{g1}" (@enumToInt(number))
54 : [ret] "={o0}" (-> usize),
55 : [number] "{g1}" (@enumToInt(number)),
5656 : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
5757 );
5858}
......@@ -64,9 +64,9 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
6464 \\ nop
6565 \\ neg %%o0
6666 \\ 1:
67 : [ret] "={o0}" (-> usize)
67 : [ret] "={o0}" (-> usize),
6868 : [number] "{g1}" (@enumToInt(number)),
69 [arg1] "{o0}" (arg1)
69 [arg1] "{o0}" (arg1),
7070 : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
7171 );
7272}
......@@ -78,10 +78,10 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
7878 \\ nop
7979 \\ neg %%o0
8080 \\ 1:
81 : [ret] "={o0}" (-> usize)
81 : [ret] "={o0}" (-> usize),
8282 : [number] "{g1}" (@enumToInt(number)),
8383 [arg1] "{o0}" (arg1),
84 [arg2] "{o1}" (arg2)
84 [arg2] "{o1}" (arg2),
8585 : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
8686 );
8787}
......@@ -93,11 +93,11 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
9393 \\ nop
9494 \\ neg %%o0
9595 \\ 1:
96 : [ret] "={o0}" (-> usize)
96 : [ret] "={o0}" (-> usize),
9797 : [number] "{g1}" (@enumToInt(number)),
9898 [arg1] "{o0}" (arg1),
9999 [arg2] "{o1}" (arg2),
100 [arg3] "{o2}" (arg3)
100 [arg3] "{o2}" (arg3),
101101 : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
102102 );
103103}
......@@ -109,12 +109,12 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
109109 \\ nop
110110 \\ neg %%o0
111111 \\ 1:
112 : [ret] "={o0}" (-> usize)
112 : [ret] "={o0}" (-> usize),
113113 : [number] "{g1}" (@enumToInt(number)),
114114 [arg1] "{o0}" (arg1),
115115 [arg2] "{o1}" (arg2),
116116 [arg3] "{o2}" (arg3),
117 [arg4] "{o3}" (arg4)
117 [arg4] "{o3}" (arg4),
118118 : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
119119 );
120120}
......@@ -126,13 +126,13 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
126126 \\ nop
127127 \\ neg %%o0
128128 \\ 1:
129 : [ret] "={o0}" (-> usize)
129 : [ret] "={o0}" (-> usize),
130130 : [number] "{g1}" (@enumToInt(number)),
131131 [arg1] "{o0}" (arg1),
132132 [arg2] "{o1}" (arg2),
133133 [arg3] "{o2}" (arg3),
134134 [arg4] "{o3}" (arg4),
135 [arg5] "{o4}" (arg5)
135 [arg5] "{o4}" (arg5),
136136 : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
137137 );
138138}
......@@ -152,14 +152,14 @@ pub fn syscall6(
152152 \\ nop
153153 \\ neg %%o0
154154 \\ 1:
155 : [ret] "={o0}" (-> usize)
155 : [ret] "={o0}" (-> usize),
156156 : [number] "{g1}" (@enumToInt(number)),
157157 [arg1] "{o0}" (arg1),
158158 [arg2] "{o1}" (arg2),
159159 [arg3] "{o2}" (arg3),
160160 [arg4] "{o3}" (arg4),
161161 [arg5] "{o4}" (arg5),
162 [arg6] "{o5}" (arg6)
162 [arg6] "{o5}" (arg6),
163163 : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
164164 );
165165}
......@@ -174,7 +174,7 @@ pub const restore = restore_rt;
174174pub fn restore_rt() callconv(.C) void {
175175 return asm volatile ("t 0x6d"
176176 :
177 : [number] "{g1}" (@enumToInt(SYS.rt_sigreturn))
177 : [number] "{g1}" (@enumToInt(SYS.rt_sigreturn)),
178178 : "memory", "xcc", "o0", "o1", "o2", "o3", "o4", "o5", "o7"
179179 );
180180}
lib/std/os/linux/start_pie.zig+5-5
......@@ -30,13 +30,13 @@ fn getDynamicSymbol() [*]elf.Dyn {
3030 \\ call 1f
3131 \\ 1: pop %[ret]
3232 \\ lea _DYNAMIC-1b(%[ret]), %[ret]
33 : [ret] "=r" (-> [*]elf.Dyn)
33 : [ret] "=r" (-> [*]elf.Dyn),
3434 ),
3535 .x86_64 => asm volatile (
3636 \\ .weak _DYNAMIC
3737 \\ .hidden _DYNAMIC
3838 \\ lea _DYNAMIC(%%rip), %[ret]
39 : [ret] "=r" (-> [*]elf.Dyn)
39 : [ret] "=r" (-> [*]elf.Dyn),
4040 ),
4141 // Work around the limited offset range of `ldr`
4242 .arm => asm volatile (
......@@ -47,7 +47,7 @@ fn getDynamicSymbol() [*]elf.Dyn {
4747 \\ b 2f
4848 \\ 1: .word _DYNAMIC-1b
4949 \\ 2:
50 : [ret] "=r" (-> [*]elf.Dyn)
50 : [ret] "=r" (-> [*]elf.Dyn),
5151 ),
5252 // A simple `adr` is not enough as it has a limited offset range
5353 .aarch64 => asm volatile (
......@@ -55,13 +55,13 @@ fn getDynamicSymbol() [*]elf.Dyn {
5555 \\ .hidden _DYNAMIC
5656 \\ adrp %[ret], _DYNAMIC
5757 \\ add %[ret], %[ret], #:lo12:_DYNAMIC
58 : [ret] "=r" (-> [*]elf.Dyn)
58 : [ret] "=r" (-> [*]elf.Dyn),
5959 ),
6060 .riscv64 => asm volatile (
6161 \\ .weak _DYNAMIC
6262 \\ .hidden _DYNAMIC
6363 \\ lla %[ret], _DYNAMIC
64 : [ret] "=r" (-> [*]elf.Dyn)
64 : [ret] "=r" (-> [*]elf.Dyn),
6565 ),
6666 else => {
6767 @compileError("PIE startup is not yet supported for this target!");
lib/std/os/linux/thumb.zig+16-16
......@@ -15,8 +15,8 @@ pub fn syscall0(number: SYS) usize {
1515 \\ ldr r7, [%[tmp]]
1616 \\ svc #0
1717 \\ ldr r7, [%[tmp], #4]
18 : [ret] "={r0}" (-> usize)
19 : [tmp] "{r1}" (buf)
18 : [ret] "={r0}" (-> usize),
19 : [tmp] "{r1}" (buf),
2020 : "memory"
2121 );
2222}
......@@ -30,9 +30,9 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
3030 \\ ldr r7, [%[tmp]]
3131 \\ svc #0
3232 \\ ldr r7, [%[tmp], #4]
33 : [ret] "={r0}" (-> usize)
33 : [ret] "={r0}" (-> usize),
3434 : [tmp] "{r1}" (buf),
35 [arg1] "{r0}" (arg1)
35 [arg1] "{r0}" (arg1),
3636 : "memory"
3737 );
3838}
......@@ -46,10 +46,10 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
4646 \\ ldr r7, [%[tmp]]
4747 \\ svc #0
4848 \\ ldr r7, [%[tmp], #4]
49 : [ret] "={r0}" (-> usize)
49 : [ret] "={r0}" (-> usize),
5050 : [tmp] "{r2}" (buf),
5151 [arg1] "{r0}" (arg1),
52 [arg2] "{r1}" (arg2)
52 [arg2] "{r1}" (arg2),
5353 : "memory"
5454 );
5555}
......@@ -63,11 +63,11 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
6363 \\ ldr r7, [%[tmp]]
6464 \\ svc #0
6565 \\ ldr r7, [%[tmp], #4]
66 : [ret] "={r0}" (-> usize)
66 : [ret] "={r0}" (-> usize),
6767 : [tmp] "{r3}" (buf),
6868 [arg1] "{r0}" (arg1),
6969 [arg2] "{r1}" (arg2),
70 [arg3] "{r2}" (arg3)
70 [arg3] "{r2}" (arg3),
7171 : "memory"
7272 );
7373}
......@@ -81,12 +81,12 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
8181 \\ ldr r7, [%[tmp]]
8282 \\ svc #0
8383 \\ ldr r7, [%[tmp], #4]
84 : [ret] "={r0}" (-> usize)
84 : [ret] "={r0}" (-> usize),
8585 : [tmp] "{r4}" (buf),
8686 [arg1] "{r0}" (arg1),
8787 [arg2] "{r1}" (arg2),
8888 [arg3] "{r2}" (arg3),
89 [arg4] "{r3}" (arg4)
89 [arg4] "{r3}" (arg4),
9090 : "memory"
9191 );
9292}
......@@ -100,13 +100,13 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
100100 \\ ldr r7, [%[tmp]]
101101 \\ svc #0
102102 \\ ldr r7, [%[tmp], #4]
103 : [ret] "={r0}" (-> usize)
103 : [ret] "={r0}" (-> usize),
104104 : [tmp] "{r5}" (buf),
105105 [arg1] "{r0}" (arg1),
106106 [arg2] "{r1}" (arg2),
107107 [arg3] "{r2}" (arg3),
108108 [arg4] "{r3}" (arg4),
109 [arg5] "{r4}" (arg5)
109 [arg5] "{r4}" (arg5),
110110 : "memory"
111111 );
112112}
......@@ -128,14 +128,14 @@ pub fn syscall6(
128128 \\ ldr r7, [%[tmp]]
129129 \\ svc #0
130130 \\ ldr r7, [%[tmp], #4]
131 : [ret] "={r0}" (-> usize)
131 : [ret] "={r0}" (-> usize),
132132 : [tmp] "{r6}" (buf),
133133 [arg1] "{r0}" (arg1),
134134 [arg2] "{r1}" (arg2),
135135 [arg3] "{r2}" (arg3),
136136 [arg4] "{r3}" (arg4),
137137 [arg5] "{r4}" (arg5),
138 [arg6] "{r5}" (arg6)
138 [arg6] "{r5}" (arg6),
139139 : "memory"
140140 );
141141}
......@@ -148,7 +148,7 @@ pub fn restore() callconv(.Naked) void {
148148 \\ mov r7, %[number]
149149 \\ svc #0
150150 :
151 : [number] "I" (@enumToInt(SYS.sigreturn))
151 : [number] "I" (@enumToInt(SYS.sigreturn)),
152152 );
153153}
154154
......@@ -157,7 +157,7 @@ pub fn restore_rt() callconv(.Naked) void {
157157 \\ mov r7, %[number]
158158 \\ svc #0
159159 :
160 : [number] "I" (@enumToInt(SYS.rt_sigreturn))
160 : [number] "I" (@enumToInt(SYS.rt_sigreturn)),
161161 : "memory"
162162 );
163163}
lib/std/os/linux/tls.zig+6-6
......@@ -131,7 +131,7 @@ pub fn setThreadPointer(addr: usize) void {
131131 // Update the %gs selector
132132 asm volatile ("movl %[gs_val], %%gs"
133133 :
134 : [gs_val] "r" (gdt_entry_number << 3 | 3)
134 : [gs_val] "r" (gdt_entry_number << 3 | 3),
135135 );
136136 },
137137 .x86_64 => {
......@@ -142,7 +142,7 @@ pub fn setThreadPointer(addr: usize) void {
142142 asm volatile (
143143 \\ msr tpidr_el0, %[addr]
144144 :
145 : [addr] "r" (addr)
145 : [addr] "r" (addr),
146146 );
147147 },
148148 .arm, .thumb => {
......@@ -153,7 +153,7 @@ pub fn setThreadPointer(addr: usize) void {
153153 asm volatile (
154154 \\ mv tp, %[addr]
155155 :
156 : [addr] "r" (addr)
156 : [addr] "r" (addr),
157157 );
158158 },
159159 .mips, .mipsel => {
......@@ -164,21 +164,21 @@ pub fn setThreadPointer(addr: usize) void {
164164 asm volatile (
165165 \\ mr 2, %[addr]
166166 :
167 : [addr] "r" (addr)
167 : [addr] "r" (addr),
168168 );
169169 },
170170 .powerpc64, .powerpc64le => {
171171 asm volatile (
172172 \\ mr 13, %[addr]
173173 :
174 : [addr] "r" (addr)
174 : [addr] "r" (addr),
175175 );
176176 },
177177 .sparcv9 => {
178178 asm volatile (
179179 \\ mov %[addr], %%g7
180180 :
181 : [addr] "r" (addr)
181 : [addr] "r" (addr),
182182 );
183183 },
184184 else => @compileError("Unsupported architecture"),
lib/std/os/linux/x86_64.zig+15-15
......@@ -2,63 +2,63 @@ usingnamespace @import("../bits/linux.zig");
22
33pub fn syscall0(number: SYS) usize {
44 return asm volatile ("syscall"
5 : [ret] "={rax}" (-> usize)
6 : [number] "{rax}" (@enumToInt(number))
5 : [ret] "={rax}" (-> usize),
6 : [number] "{rax}" (@enumToInt(number)),
77 : "rcx", "r11", "memory"
88 );
99}
1010
1111pub fn syscall1(number: SYS, arg1: usize) usize {
1212 return asm volatile ("syscall"
13 : [ret] "={rax}" (-> usize)
13 : [ret] "={rax}" (-> usize),
1414 : [number] "{rax}" (@enumToInt(number)),
15 [arg1] "{rdi}" (arg1)
15 [arg1] "{rdi}" (arg1),
1616 : "rcx", "r11", "memory"
1717 );
1818}
1919
2020pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
2121 return asm volatile ("syscall"
22 : [ret] "={rax}" (-> usize)
22 : [ret] "={rax}" (-> usize),
2323 : [number] "{rax}" (@enumToInt(number)),
2424 [arg1] "{rdi}" (arg1),
25 [arg2] "{rsi}" (arg2)
25 [arg2] "{rsi}" (arg2),
2626 : "rcx", "r11", "memory"
2727 );
2828}
2929
3030pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
3131 return asm volatile ("syscall"
32 : [ret] "={rax}" (-> usize)
32 : [ret] "={rax}" (-> usize),
3333 : [number] "{rax}" (@enumToInt(number)),
3434 [arg1] "{rdi}" (arg1),
3535 [arg2] "{rsi}" (arg2),
36 [arg3] "{rdx}" (arg3)
36 [arg3] "{rdx}" (arg3),
3737 : "rcx", "r11", "memory"
3838 );
3939}
4040
4141pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
4242 return asm volatile ("syscall"
43 : [ret] "={rax}" (-> usize)
43 : [ret] "={rax}" (-> usize),
4444 : [number] "{rax}" (@enumToInt(number)),
4545 [arg1] "{rdi}" (arg1),
4646 [arg2] "{rsi}" (arg2),
4747 [arg3] "{rdx}" (arg3),
48 [arg4] "{r10}" (arg4)
48 [arg4] "{r10}" (arg4),
4949 : "rcx", "r11", "memory"
5050 );
5151}
5252
5353pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
5454 return asm volatile ("syscall"
55 : [ret] "={rax}" (-> usize)
55 : [ret] "={rax}" (-> usize),
5656 : [number] "{rax}" (@enumToInt(number)),
5757 [arg1] "{rdi}" (arg1),
5858 [arg2] "{rsi}" (arg2),
5959 [arg3] "{rdx}" (arg3),
6060 [arg4] "{r10}" (arg4),
61 [arg5] "{r8}" (arg5)
61 [arg5] "{r8}" (arg5),
6262 : "rcx", "r11", "memory"
6363 );
6464}
......@@ -73,14 +73,14 @@ pub fn syscall6(
7373 arg6: usize,
7474) usize {
7575 return asm volatile ("syscall"
76 : [ret] "={rax}" (-> usize)
76 : [ret] "={rax}" (-> usize),
7777 : [number] "{rax}" (@enumToInt(number)),
7878 [arg1] "{rdi}" (arg1),
7979 [arg2] "{rsi}" (arg2),
8080 [arg3] "{rdx}" (arg3),
8181 [arg4] "{r10}" (arg4),
8282 [arg5] "{r8}" (arg5),
83 [arg6] "{r9}" (arg6)
83 [arg6] "{r9}" (arg6),
8484 : "rcx", "r11", "memory"
8585 );
8686}
......@@ -93,7 +93,7 @@ pub const restore = restore_rt;
9393pub fn restore_rt() callconv(.Naked) void {
9494 return asm volatile ("syscall"
9595 :
96 : [number] "{rax}" (@enumToInt(SYS.rt_sigreturn))
96 : [number] "{rax}" (@enumToInt(SYS.rt_sigreturn)),
9797 : "rcx", "r11", "memory"
9898 );
9999}
lib/std/os/windows.zig+3-3
......@@ -1723,15 +1723,15 @@ pub fn teb() *TEB {
17231723 return switch (builtin.target.cpu.arch) {
17241724 .i386 => asm volatile (
17251725 \\ movl %%fs:0x18, %[ptr]
1726 : [ptr] "=r" (-> *TEB)
1726 : [ptr] "=r" (-> *TEB),
17271727 ),
17281728 .x86_64 => asm volatile (
17291729 \\ movq %%gs:0x30, %[ptr]
1730 : [ptr] "=r" (-> *TEB)
1730 : [ptr] "=r" (-> *TEB),
17311731 ),
17321732 .aarch64 => asm volatile (
17331733 \\ mov %[ptr], x18
1734 : [ptr] "=r" (-> *TEB)
1734 : [ptr] "=r" (-> *TEB),
17351735 ),
17361736 else => @compileError("unsupported arch"),
17371737 };
lib/std/special/compiler_rt/clear_cache.zig+3-3
......@@ -88,7 +88,7 @@ pub fn clear_cache(start: usize, end: usize) callconv(.C) void {
8888 asm volatile (
8989 \\mrs %[x], ctr_el0
9090 \\
91 : [x] "=r" (ctr_el0)
91 : [x] "=r" (ctr_el0),
9292 );
9393 // The DC and IC instructions must use 64-bit registers so we don't use
9494 // uintptr_t in case this runs in an IPL32 environment.
......@@ -101,7 +101,7 @@ pub fn clear_cache(start: usize, end: usize) callconv(.C) void {
101101 while (addr < end) : (addr += dcache_line_size) {
102102 asm volatile ("dc cvau, %[addr]"
103103 :
104 : [addr] "r" (addr)
104 : [addr] "r" (addr),
105105 );
106106 }
107107 }
......@@ -114,7 +114,7 @@ pub fn clear_cache(start: usize, end: usize) callconv(.C) void {
114114 while (addr < end) : (addr += icache_line_size) {
115115 asm volatile ("ic ivau, %[addr]"
116116 :
117 : [addr] "r" (addr)
117 : [addr] "r" (addr),
118118 );
119119 }
120120 }
lib/std/start.zig+13-13
......@@ -98,7 +98,7 @@ fn exit2(code: usize) noreturn {
9898 asm volatile ("syscall"
9999 :
100100 : [number] "{rax}" (231),
101 [arg1] "{rdi}" (code)
101 [arg1] "{rdi}" (code),
102102 : "rcx", "r11", "memory"
103103 );
104104 },
......@@ -106,7 +106,7 @@ fn exit2(code: usize) noreturn {
106106 asm volatile ("svc #0"
107107 :
108108 : [number] "{r7}" (1),
109 [arg1] "{r0}" (code)
109 [arg1] "{r0}" (code),
110110 : "memory"
111111 );
112112 },
......@@ -114,7 +114,7 @@ fn exit2(code: usize) noreturn {
114114 asm volatile ("svc #0"
115115 :
116116 : [number] "{x8}" (93),
117 [arg1] "{x0}" (code)
117 [arg1] "{x0}" (code),
118118 : "memory", "cc"
119119 );
120120 },
......@@ -128,7 +128,7 @@ fn exit2(code: usize) noreturn {
128128 \\push $0
129129 \\syscall
130130 :
131 : [syscall_number] "{rbp}" (8)
131 : [syscall_number] "{rbp}" (8),
132132 : "rcx", "r11", "memory"
133133 );
134134 },
......@@ -137,7 +137,7 @@ fn exit2(code: usize) noreturn {
137137 .aarch64 => {
138138 asm volatile ("svc #0"
139139 :
140 : [exit] "{x0}" (0x08)
140 : [exit] "{x0}" (0x08),
141141 : "memory", "cc"
142142 );
143143 },
......@@ -208,34 +208,34 @@ fn _start() callconv(.Naked) noreturn {
208208 .x86_64 => {
209209 argc_argv_ptr = asm volatile (
210210 \\ xor %%rbp, %%rbp
211 : [argc] "={rsp}" (-> [*]usize)
211 : [argc] "={rsp}" (-> [*]usize),
212212 );
213213 },
214214 .i386 => {
215215 argc_argv_ptr = asm volatile (
216216 \\ xor %%ebp, %%ebp
217 : [argc] "={esp}" (-> [*]usize)
217 : [argc] "={esp}" (-> [*]usize),
218218 );
219219 },
220220 .aarch64, .aarch64_be, .arm, .armeb, .thumb => {
221221 argc_argv_ptr = asm volatile (
222222 \\ mov fp, #0
223223 \\ mov lr, #0
224 : [argc] "={sp}" (-> [*]usize)
224 : [argc] "={sp}" (-> [*]usize),
225225 );
226226 },
227227 .riscv64 => {
228228 argc_argv_ptr = asm volatile (
229229 \\ li s0, 0
230230 \\ li ra, 0
231 : [argc] "={sp}" (-> [*]usize)
231 : [argc] "={sp}" (-> [*]usize),
232232 );
233233 },
234234 .mips, .mipsel => {
235235 // The lr is already zeroed on entry, as specified by the ABI.
236236 argc_argv_ptr = asm volatile (
237237 \\ move $fp, $0
238 : [argc] "={sp}" (-> [*]usize)
238 : [argc] "={sp}" (-> [*]usize),
239239 );
240240 },
241241 .powerpc => {
......@@ -246,7 +246,7 @@ fn _start() callconv(.Naked) noreturn {
246246 \\ stwu 1,-16(1)
247247 \\ stw 0, 0(1)
248248 \\ mtlr 0
249 : [argc] "={r4}" (-> [*]usize)
249 : [argc] "={r4}" (-> [*]usize),
250250 :
251251 : "r0"
252252 );
......@@ -259,7 +259,7 @@ fn _start() callconv(.Naked) noreturn {
259259 \\ li 0, 0
260260 \\ stdu 0, -32(1)
261261 \\ mtlr 0
262 : [argc] "={r4}" (-> [*]usize)
262 : [argc] "={r4}" (-> [*]usize),
263263 :
264264 : "r0"
265265 );
......@@ -269,7 +269,7 @@ fn _start() callconv(.Naked) noreturn {
269269 argc_argv_ptr = asm (
270270 \\ mov %%g0, %%i6
271271 \\ add %%o6, 2175, %[argc]
272 : [argc] "=r" (-> [*]usize)
272 : [argc] "=r" (-> [*]usize),
273273 );
274274 },
275275 else => @compileError("unsupported arch"),
lib/std/valgrind.zig+4-4
......@@ -13,9 +13,9 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3:
1313 \\ roll $3, %%edi ; roll $13, %%edi
1414 \\ roll $29, %%edi ; roll $19, %%edi
1515 \\ xchgl %%ebx,%%ebx
16 : [_] "={edx}" (-> usize)
16 : [_] "={edx}" (-> usize),
1717 : [_] "{eax}" (&[_]usize{ request, a1, a2, a3, a4, a5 }),
18 [_] "0" (default)
18 [_] "0" (default),
1919 : "cc", "memory"
2020 );
2121 },
......@@ -24,9 +24,9 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3:
2424 \\ rolq $3, %%rdi ; rolq $13, %%rdi
2525 \\ rolq $61, %%rdi ; rolq $51, %%rdi
2626 \\ xchgq %%rbx,%%rbx
27 : [_] "={rdx}" (-> usize)
27 : [_] "={rdx}" (-> usize),
2828 : [_] "{rax}" (&[_]usize{ request, a1, a2, a3, a4, a5 }),
29 [_] "0" (default)
29 [_] "0" (default),
3030 : "cc", "memory"
3131 );
3232 },
lib/std/zig/parser_test.zig+15-29
......@@ -1,5 +1,5 @@
11test "zig fmt: preserves clobbers in inline asm with stray comma" {
2 try testTransform(
2 try testCanonical(
33 \\fn foo() void {
44 \\ asm volatile (""
55 \\ : [_] "" (-> type),
......@@ -13,20 +13,6 @@ test "zig fmt: preserves clobbers in inline asm with stray comma" {
1313 \\ );
1414 \\}
1515 \\
16 ,
17 \\fn foo() void {
18 \\ asm volatile (""
19 \\ : [_] "" (-> type)
20 \\ :
21 \\ : "clobber"
22 \\ );
23 \\ asm volatile (""
24 \\ :
25 \\ : [_] "" (type)
26 \\ : "clobber"
27 \\ );
28 \\}
29 \\
3016 );
3117}
3218
......@@ -508,15 +494,15 @@ test "zig fmt: asm expression with comptime content" {
508494 \\pub fn main() void {
509495 \\ asm volatile ("foo" ++ "bar");
510496 \\ asm volatile ("foo" ++ "bar"
511 \\ : [_] "" (x)
497 \\ : [_] "" (x),
512498 \\ );
513499 \\ asm volatile ("foo" ++ "bar"
514 \\ : [_] "" (x)
515 \\ : [_] "" (y)
500 \\ : [_] "" (x),
501 \\ : [_] "" (y),
516502 \\ );
517503 \\ asm volatile ("foo" ++ "bar"
518 \\ : [_] "" (x)
519 \\ : [_] "" (y)
504 \\ : [_] "" (x),
505 \\ : [_] "" (y),
520506 \\ : "h", "e", "l", "l", "o"
521507 \\ );
522508 \\}
......@@ -2058,11 +2044,11 @@ test "zig fmt: simple asm" {
20582044 \\ );
20592045 \\
20602046 \\ asm ("not real assembly"
2061 \\ : [a] "x" (x)
2047 \\ : [a] "x" (x),
20622048 \\ );
20632049 \\ asm ("not real assembly"
2064 \\ : [a] "x" (-> i32)
2065 \\ : [a] "x" (1)
2050 \\ : [a] "x" (-> i32),
2051 \\ : [a] "x" (1),
20662052 \\ );
20672053 \\ asm ("still not real assembly" ::: "a", "b");
20682054 \\}
......@@ -3712,9 +3698,9 @@ test "zig fmt: inline asm" {
37123698 try testCanonical(
37133699 \\pub fn syscall1(number: usize, arg1: usize) usize {
37143700 \\ return asm volatile ("syscall"
3715 \\ : [ret] "={rax}" (-> usize)
3701 \\ : [ret] "={rax}" (-> usize),
37163702 \\ : [number] "{rax}" (number),
3717 \\ [arg1] "{rdi}" (arg1)
3703 \\ [arg1] "{rdi}" (arg1),
37183704 \\ : "rcx", "r11"
37193705 \\ );
37203706 \\}
......@@ -3817,14 +3803,14 @@ test "zig fmt: inline asm parameter alignment" {
38173803 \\ \\ foo
38183804 \\ \\ bar
38193805 \\ : [_] "" (-> usize),
3820 \\ [_] "" (-> usize)
3806 \\ [_] "" (-> usize),
38213807 \\ );
38223808 \\ asm volatile (
38233809 \\ \\ foo
38243810 \\ \\ bar
38253811 \\ :
38263812 \\ : [_] "" (0),
3827 \\ [_] "" (0)
3813 \\ [_] "" (0),
38283814 \\ );
38293815 \\ asm volatile (
38303816 \\ \\ foo
......@@ -3834,9 +3820,9 @@ test "zig fmt: inline asm parameter alignment" {
38343820 \\ \\ foo
38353821 \\ \\ bar
38363822 \\ : [_] "" (-> usize),
3837 \\ [_] "" (-> usize)
3823 \\ [_] "" (-> usize),
38383824 \\ : [_] "" (0),
3839 \\ [_] "" (0)
3825 \\ [_] "" (0),
38403826 \\ : "", ""
38413827 \\ );
38423828 \\}
lib/std/zig/render.zig+4-4
......@@ -1944,13 +1944,13 @@ fn renderAsm(
19441944 try renderToken(ais, tree, comma, .newline); // ,
19451945 try renderExtraNewlineToken(ais, tree, tree.firstToken(next_asm_output));
19461946 } else if (asm_node.inputs.len == 0 and asm_node.first_clobber == null) {
1947 try renderAsmOutput(gpa, ais, tree, asm_output, .newline);
1947 try renderAsmOutput(gpa, ais, tree, asm_output, .comma);
19481948 ais.popIndent();
19491949 ais.setIndentDelta(indent_delta);
19501950 ais.popIndent();
19511951 return renderToken(ais, tree, asm_node.ast.rparen, space); // rparen
19521952 } else {
1953 try renderAsmOutput(gpa, ais, tree, asm_output, .newline);
1953 try renderAsmOutput(gpa, ais, tree, asm_output, .comma);
19541954 const comma_or_colon = tree.lastToken(asm_output) + 1;
19551955 ais.popIndent();
19561956 break :colon2 switch (token_tags[comma_or_colon]) {
......@@ -1976,13 +1976,13 @@ fn renderAsm(
19761976 try renderToken(ais, tree, first_token - 1, .newline); // ,
19771977 try renderExtraNewlineToken(ais, tree, first_token);
19781978 } else if (asm_node.first_clobber == null) {
1979 try renderAsmInput(gpa, ais, tree, asm_input, .newline);
1979 try renderAsmInput(gpa, ais, tree, asm_input, .comma);
19801980 ais.popIndent();
19811981 ais.setIndentDelta(indent_delta);
19821982 ais.popIndent();
19831983 return renderToken(ais, tree, asm_node.ast.rparen, space); // rparen
19841984 } else {
1985 try renderAsmInput(gpa, ais, tree, asm_input, .newline);
1985 try renderAsmInput(gpa, ais, tree, asm_input, .comma);
19861986 const comma_or_colon = tree.lastToken(asm_input) + 1;
19871987 ais.popIndent();
19881988 break :colon3 switch (token_tags[comma_or_colon]) {
lib/std/zig/system/x86.zig+2-2
......@@ -543,7 +543,7 @@ fn cpuid(leaf_id: u32, subid: u32) CpuidLeaf {
543543 :
544544 : [leaf_id] "{eax}" (leaf_id),
545545 [subid] "{ecx}" (subid),
546 [leaf_ptr] "r" (&cpuid_leaf)
546 [leaf_ptr] "r" (&cpuid_leaf),
547547 : "eax", "ebx", "ecx", "edx"
548548 );
549549
......@@ -555,7 +555,7 @@ fn getXCR0() u32 {
555555 return asm volatile (
556556 \\ xor %%ecx, %%ecx
557557 \\ xgetbv
558 : [ret] "={eax}" (-> u32)
558 : [ret] "={eax}" (-> u32),
559559 :
560560 : "eax", "edx", "ecx"
561561 );
test/behavior/asm.zig+15-15
......@@ -23,12 +23,12 @@ test "output constraint modifiers" {
2323 // This is only testing compilation.
2424 var a: u32 = 3;
2525 asm volatile (""
26 : [_] "=m,r" (a)
26 : [_] "=m,r" (a),
2727 :
2828 : ""
2929 );
3030 asm volatile (""
31 : [_] "=r,m" (a)
31 : [_] "=r,m" (a),
3232 :
3333 : ""
3434 );
......@@ -38,8 +38,8 @@ test "alternative constraints" {
3838 // Make sure we allow commas as a separator for alternative constraints.
3939 var a: u32 = 3;
4040 asm volatile (""
41 : [_] "=r,m" (a)
42 : [_] "r,m" (a)
41 : [_] "=r,m" (a),
42 : [_] "r,m" (a),
4343 : ""
4444 );
4545}
......@@ -47,42 +47,42 @@ test "alternative constraints" {
4747test "sized integer/float in asm input" {
4848 asm volatile (""
4949 :
50 : [_] "m" (@as(usize, 3))
50 : [_] "m" (@as(usize, 3)),
5151 : ""
5252 );
5353 asm volatile (""
5454 :
55 : [_] "m" (@as(i15, -3))
55 : [_] "m" (@as(i15, -3)),
5656 : ""
5757 );
5858 asm volatile (""
5959 :
60 : [_] "m" (@as(u3, 3))
60 : [_] "m" (@as(u3, 3)),
6161 : ""
6262 );
6363 asm volatile (""
6464 :
65 : [_] "m" (@as(i3, 3))
65 : [_] "m" (@as(i3, 3)),
6666 : ""
6767 );
6868 asm volatile (""
6969 :
70 : [_] "m" (@as(u121, 3))
70 : [_] "m" (@as(u121, 3)),
7171 : ""
7272 );
7373 asm volatile (""
7474 :
75 : [_] "m" (@as(i121, 3))
75 : [_] "m" (@as(i121, 3)),
7676 : ""
7777 );
7878 asm volatile (""
7979 :
80 : [_] "m" (@as(f32, 3.17))
80 : [_] "m" (@as(f32, 3.17)),
8181 : ""
8282 );
8383 asm volatile (""
8484 :
85 : [_] "m" (@as(f64, 3.17))
85 : [_] "m" (@as(f64, 3.17)),
8686 : ""
8787 );
8888}
......@@ -90,15 +90,15 @@ test "sized integer/float in asm input" {
9090test "struct/array/union types as input values" {
9191 asm volatile (""
9292 :
93 : [_] "m" (@as([1]u32, undefined))
93 : [_] "m" (@as([1]u32, undefined)),
9494 ); // fails
9595 asm volatile (""
9696 :
97 : [_] "m" (@as(struct { x: u32, y: u8 }, undefined))
97 : [_] "m" (@as(struct { x: u32, y: u8 }, undefined)),
9898 ); // fails
9999 asm volatile (""
100100 :
101 : [_] "m" (@as(union { x: u32, y: u8 }, undefined))
101 : [_] "m" (@as(union { x: u32, y: u8 }, undefined)),
102102 ); // fails
103103}
104104