authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-07-18 18:15:50-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-07-18 18:15:50-04:00
log70da0762f7aa2d800da4a238499fc3f31dc4d31f
tree335aaf342e118932a7c74f672991683a4b602cf9
parent03a3b1ca39e73c7edf615d26bb7647d7565a09f7
signaturelock-open Commit is signed but in an unrecognized format.

better riscv syscalls


1 files changed, 42 insertions(+), 84 deletions(-)

std/os/linux/riscv64.zig+42-84
......@@ -1,95 +1,62 @@
11pub fn syscall0(number: usize) usize {
2 return asm volatile (
3 \\ mv a7, %[number]
4 \\ ecall
5 \\ mv %[ret], a0
6 : [ret] "=r" (-> usize)
7 : [number] "r" (number)
2 return asm volatile ("ecall"
3 : [ret] "={x10}" (-> usize)
4 : [number] "{x17}" (number)
85 : "memory"
96 );
107}
118
129pub fn syscall1(number: usize, arg1: usize) usize {
13 return asm volatile (
14 \\ mv a7, %[number]
15 \\ mv a0, %[arg1]
16 \\ ecall
17 \\ mv %[ret], a0
18 : [ret] "=r" (-> usize)
19 : [number] "r" (number),
20 [arg1] "r" (arg1)
10 return asm volatile ("ecall"
11 : [ret] "={x10}" (-> usize)
12 : [number] "{x17}" (number),
13 [arg1] "{x10}" (arg1)
2114 : "memory"
2215 );
2316}
2417
2518pub fn syscall2(number: usize, arg1: usize, arg2: usize) usize {
26 return asm volatile (
27 \\ mv a7, %[number]
28 \\ mv a0, %[arg1]
29 \\ mv a1, %[arg2]
30 \\ ecall
31 \\ mv %[ret], a0
32 : [ret] "=r" (-> usize)
33 : [number] "r" (number),
34 [arg1] "r" (arg1),
35 [arg2] "r" (arg2)
19 return asm volatile ("ecall"
20 : [ret] "={x10}" (-> usize)
21 : [number] "{x17}" (number),
22 [arg1] "{x10}" (arg1),
23 [arg2] "{x11}" (arg2)
3624 : "memory"
3725 );
3826}
3927
4028pub fn syscall3(number: usize, arg1: usize, arg2: usize, arg3: usize) usize {
41 return asm volatile (
42 \\ mv a7, %[number]
43 \\ mv a0, %[arg1]
44 \\ mv a1, %[arg2]
45 \\ mv a2, %[arg3]
46 \\ ecall
47 \\ mv %[ret], a0
48 : [ret] "=r" (-> usize)
49 : [number] "r" (number),
50 [arg1] "r" (arg1),
51 [arg2] "r" (arg2),
52 [arg3] "r" (arg3)
29 return asm volatile ("ecall"
30 : [ret] "={x10}" (-> usize)
31 : [number] "{x17}" (number),
32 [arg1] "{x10}" (arg1),
33 [arg2] "{x11}" (arg2),
34 [arg3] "{x12}" (arg3)
5335 : "memory"
5436 );
5537}
5638
5739pub fn syscall4(number: usize, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
58 return asm volatile (
59 \\ mv a7, %[number]
60 \\ mv a0, %[arg1]
61 \\ mv a1, %[arg2]
62 \\ mv a2, %[arg3]
63 \\ mv a3, %[arg4]
64 \\ ecall
65 \\ mv %[ret], a0
66 : [ret] "=r" (-> usize)
67 : [number] "r" (number),
68 [arg1] "r" (arg1),
69 [arg2] "r" (arg2),
70 [arg3] "r" (arg3),
71 [arg4] "r" (arg4)
40 return asm volatile ("ecall"
41 : [ret] "={x10}" (-> usize)
42 : [number] "{x17}" (number),
43 [arg1] "{x10}" (arg1),
44 [arg2] "{x11}" (arg2),
45 [arg3] "{x12}" (arg3),
46 [arg4] "{x13}" (arg4)
7247 : "memory"
7348 );
7449}
7550
7651pub fn syscall5(number: usize, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
77 return asm volatile (
78 \\ mv a7, %[number]
79 \\ mv a0, %[arg1]
80 \\ mv a1, %[arg2]
81 \\ mv a2, %[arg3]
82 \\ mv a3, %[arg4]
83 \\ mv a4, %[arg5]
84 \\ ecall
85 \\ mv %[ret], a0
86 : [ret] "=r" (-> usize)
87 : [number] "r" (number),
88 [arg1] "r" (arg1),
89 [arg2] "r" (arg2),
90 [arg3] "r" (arg3),
91 [arg4] "r" (arg4),
92 [arg5] "r" (arg5)
52 return asm volatile ("ecall"
53 : [ret] "={x10}" (-> usize)
54 : [number] "{x17}" (number),
55 [arg1] "{x10}" (arg1),
56 [arg2] "{x11}" (arg2),
57 [arg3] "{x12}" (arg3),
58 [arg4] "{x13}" (arg4),
59 [arg5] "{x14}" (arg5)
9360 : "memory"
9461 );
9562}
......@@ -103,24 +70,15 @@ pub fn syscall6(
10370 arg5: usize,
10471 arg6: usize,
10572) usize {
106 return asm volatile (
107 \\ mv a7, %[number]
108 \\ mv a0, %[arg1]
109 \\ mv a1, %[arg2]
110 \\ mv a2, %[arg3]
111 \\ mv a3, %[arg4]
112 \\ mv a4, %[arg5]
113 \\ mv a5, %[arg6]
114 \\ ecall
115 \\ mv %[ret], a0
116 : [ret] "=r" (-> usize)
117 : [number] "r" (number),
118 [arg1] "r" (arg1),
119 [arg2] "r" (arg2),
120 [arg3] "r" (arg3),
121 [arg4] "r" (arg4),
122 [arg5] "r" (arg5),
123 [arg6] "r" (arg6)
73 return asm volatile ("ecall"
74 : [ret] "={x10}" (-> usize)
75 : [number] "{x17}" (number),
76 [arg1] "{x10}" (arg1),
77 [arg2] "{x11}" (arg2),
78 [arg3] "{x12}" (arg3),
79 [arg4] "{x13}" (arg4),
80 [arg5] "{x14}" (arg5),
81 [arg6] "{x15}" (arg6)
12482 : "memory"
12583 );
12684}