diff options
| author | Jeremy Soller <jackpot51@gmail.com> | 2016-12-20 11:17:09 -0700 |
|---|---|---|
| committer | Jeremy Soller <jackpot51@gmail.com> | 2016-12-20 11:17:09 -0700 |
| commit | 57bc1a982e20524bbaac892c04e537c8f714dce6 (patch) | |
| tree | c9c7caff6dd08527900752354344a48f6cc43852 /src/libstd/sys | |
| parent | 6d7c2ecf2e7b73f067c093ce9770ec187f9b3ea1 (diff) | |
| download | rust-57bc1a982e20524bbaac892c04e537c8f714dce6.tar.gz rust-57bc1a982e20524bbaac892c04e537c8f714dce6.zip | |
Add arm syscalls
Diffstat (limited to 'src/libstd/sys')
| -rw-r--r-- | src/libstd/sys/redox/syscall/arch/arm.rs | 72 | ||||
| -rw-r--r-- | src/libstd/sys/redox/syscall/arch/x86.rs (renamed from src/libstd/sys/redox/syscall/x86.rs) | 0 | ||||
| -rw-r--r-- | src/libstd/sys/redox/syscall/arch/x86_64.rs (renamed from src/libstd/sys/redox/syscall/x86_64.rs) | 0 | ||||
| -rw-r--r-- | src/libstd/sys/redox/syscall/mod.rs | 8 |
4 files changed, 78 insertions, 2 deletions
diff --git a/src/libstd/sys/redox/syscall/arch/arm.rs b/src/libstd/sys/redox/syscall/arch/arm.rs new file mode 100644 index 00000000000..6e8bc2c0e63 --- /dev/null +++ b/src/libstd/sys/redox/syscall/arch/arm.rs @@ -0,0 +1,72 @@ +use super::error::{Error, Result}; + +pub unsafe fn syscall0(mut a: usize) -> Result<usize> { + asm!("swi $$0" + : "={r0}"(a) + : "{r7}"(a) + : "memory" + : "volatile"); + + Error::demux(a) +} + +pub unsafe fn syscall1(mut a: usize, b: usize) -> Result<usize> { + asm!("swi $$0" + : "={r0}"(a) + : "{r7}"(a), "{r0}"(b) + : "memory" + : "volatile"); + + Error::demux(a) +} + +// Clobbers all registers - special for clone +pub unsafe fn syscall1_clobber(mut a: usize, b: usize) -> Result<usize> { + asm!("swi $$0" + : "={r0}"(a) + : "{r7}"(a), "{r0}"(b) + : "memory", "r0", "r1", "r2", "r3", "r4" + : "volatile"); + + Error::demux(a) +} + +pub unsafe fn syscall2(mut a: usize, b: usize, c: usize) -> Result<usize> { + asm!("swi $$0" + : "={r0}"(a) + : "{r7}"(a), "{r0}"(b), "{r1}"(c) + : "memory" + : "volatile"); + + Error::demux(a) +} + +pub unsafe fn syscall3(mut a: usize, b: usize, c: usize, d: usize) -> Result<usize> { + asm!("swi $$0" + : "={r0}"(a) + : "{r7}"(a), "{r0}"(b), "{r1}"(c), "{r2}"(d) + : "memory" + : "volatile"); + + Error::demux(a) +} + +pub unsafe fn syscall4(mut a: usize, b: usize, c: usize, d: usize, e: usize) -> Result<usize> { + asm!("swi $$0" + : "={r0}"(a) + : "{r7}"(a), "{r0}"(b), "{r1}"(c), "{r2}"(d), "{r3}"(e) + : "memory" + : "volatile"); + + Error::demux(a) +} + +pub unsafe fn syscall5(mut a: usize, b: usize, c: usize, d: usize, e: usize, f: usize) -> Result<usize> { + asm!("swi $$0" + : "={r0}"(a) + : "{r7}"(a), "{r0}"(b), "{r1}"(c), "{r2}"(d), "{r3}"(e), "{r4}"(f) + : "memory" + : "volatile"); + + Error::demux(a) +} diff --git a/src/libstd/sys/redox/syscall/x86.rs b/src/libstd/sys/redox/syscall/arch/x86.rs index 4bb6060c43e..4bb6060c43e 100644 --- a/src/libstd/sys/redox/syscall/x86.rs +++ b/src/libstd/sys/redox/syscall/arch/x86.rs diff --git a/src/libstd/sys/redox/syscall/x86_64.rs b/src/libstd/sys/redox/syscall/arch/x86_64.rs index 6c1f96adef9..6c1f96adef9 100644 --- a/src/libstd/sys/redox/syscall/x86_64.rs +++ b/src/libstd/sys/redox/syscall/arch/x86_64.rs diff --git a/src/libstd/sys/redox/syscall/mod.rs b/src/libstd/sys/redox/syscall/mod.rs index 77f98d5b36b..34a35b967b1 100644 --- a/src/libstd/sys/redox/syscall/mod.rs +++ b/src/libstd/sys/redox/syscall/mod.rs @@ -6,12 +6,16 @@ pub use self::flag::*; pub use self::number::*; pub use self::scheme::*; +#[cfg(target_arch = "arm")] +#[path="arch/arm.rs"] +mod arch; + #[cfg(target_arch = "x86")] -#[path="x86.rs"] +#[path="arch/x86.rs"] mod arch; #[cfg(target_arch = "x86_64")] -#[path="x86_64.rs"] +#[path="arch/x86_64.rs"] mod arch; /// Function definitions |
