]>
Commit | Line | Data |
---|---|---|
ea8adc8c XL |
1 | use super::error::{Error, Result}; |
2 | ||
3 | pub unsafe fn syscall0(mut a: usize) -> Result<usize> { | |
72b1a166 | 4 | llvm_asm!("swi $$0" |
ea8adc8c XL |
5 | : "={r0}"(a) |
6 | : "{r7}"(a) | |
7 | : "memory" | |
8 | : "volatile"); | |
9 | ||
10 | Error::demux(a) | |
11 | } | |
12 | ||
13 | pub unsafe fn syscall1(mut a: usize, b: usize) -> Result<usize> { | |
72b1a166 | 14 | llvm_asm!("swi $$0" |
ea8adc8c XL |
15 | : "={r0}"(a) |
16 | : "{r7}"(a), "{r0}"(b) | |
17 | : "memory" | |
18 | : "volatile"); | |
19 | ||
20 | Error::demux(a) | |
21 | } | |
22 | ||
23 | // Clobbers all registers - special for clone | |
24 | pub unsafe fn syscall1_clobber(mut a: usize, b: usize) -> Result<usize> { | |
72b1a166 | 25 | llvm_asm!("swi $$0" |
ea8adc8c XL |
26 | : "={r0}"(a) |
27 | : "{r7}"(a), "{r0}"(b) | |
28 | : "memory", "r0", "r1", "r2", "r3", "r4" | |
29 | : "volatile"); | |
30 | ||
31 | Error::demux(a) | |
32 | } | |
33 | ||
34 | pub unsafe fn syscall2(mut a: usize, b: usize, c: usize) -> Result<usize> { | |
72b1a166 | 35 | llvm_asm!("swi $$0" |
ea8adc8c XL |
36 | : "={r0}"(a) |
37 | : "{r7}"(a), "{r0}"(b), "{r1}"(c) | |
38 | : "memory" | |
39 | : "volatile"); | |
40 | ||
41 | Error::demux(a) | |
42 | } | |
43 | ||
44 | pub unsafe fn syscall3(mut a: usize, b: usize, c: usize, d: usize) -> Result<usize> { | |
72b1a166 | 45 | llvm_asm!("swi $$0" |
ea8adc8c XL |
46 | : "={r0}"(a) |
47 | : "{r7}"(a), "{r0}"(b), "{r1}"(c), "{r2}"(d) | |
48 | : "memory" | |
49 | : "volatile"); | |
50 | ||
51 | Error::demux(a) | |
52 | } | |
53 | ||
54 | pub unsafe fn syscall4(mut a: usize, b: usize, c: usize, d: usize, e: usize) -> Result<usize> { | |
72b1a166 | 55 | llvm_asm!("swi $$0" |
ea8adc8c XL |
56 | : "={r0}"(a) |
57 | : "{r7}"(a), "{r0}"(b), "{r1}"(c), "{r2}"(d), "{r3}"(e) | |
58 | : "memory" | |
59 | : "volatile"); | |
60 | ||
61 | Error::demux(a) | |
62 | } | |
63 | ||
64 | pub unsafe fn syscall5(mut a: usize, b: usize, c: usize, d: usize, e: usize, f: usize) | |
65 | -> Result<usize> { | |
72b1a166 | 66 | llvm_asm!("swi $$0" |
ea8adc8c XL |
67 | : "={r0}"(a) |
68 | : "{r7}"(a), "{r0}"(b), "{r1}"(c), "{r2}"(d), "{r3}"(e), "{r4}"(f) | |
69 | : "memory" | |
70 | : "volatile"); | |
71 | ||
72 | Error::demux(a) | |
73 | } |