diff --git a/src/lib.rs b/src/lib.rs index bfbf73b..197d889 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -20,6 +20,44 @@ extern crate std; pub use platform::*; +#[cfg(target_pointer_width = "64")] +#[path="macros/64.rs"] +pub mod macros; + +#[cfg(all(target_pointer_width = "32", + target_endian = "big", + any(target_arch = "arm", + target_arch = "mips", + target_arch = "powerpc", + target_arch = "xtensa")))] +#[path="macros/32be-align.rs"] +pub mod macros; + +#[cfg(all(target_pointer_width = "32", + target_endian = "big", + not(any(target_arch = "arm", + target_arch = "mips", + target_arch = "powerpc", + target_arch = "xtensa"))))] +#[path="macros/32be.rs"] +pub mod macros; + +#[cfg(all(target_pointer_width = "32", + target_endian = "little", + any(target_arch = "arm", + target_arch = "mips", + target_arch = "powerpc", + target_arch = "xtensa")))] +#[path="macros/32le-align.rs"] +pub mod macros; + +#[cfg(all(target_pointer_width = "32", + target_endian = "little", + not(any(target_arch = "arm", + target_arch = "mips", + target_arch = "powerpc", + target_arch = "xtensa"))))] +#[path="macros/32le.rs"] pub mod macros; #[cfg(all(target_os = "linux", diff --git a/src/macros.rs b/src/macros.rs deleted file mode 100644 index 92ce784..0000000 --- a/src/macros.rs +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2014 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -#[macro_export] -macro_rules! syscall { - ($nr:ident) - => ( ::sc::syscall0( - ::sc::nr::$nr) ); - - ($nr:ident, $a1:expr) - => ( ::sc::syscall1( - ::sc::nr::$nr, - $a1 as usize) ); - - ($nr:ident, $a1:expr, $a2:expr) - => ( ::sc::syscall2( - ::sc::nr::$nr, - $a1 as usize, $a2 as usize) ); - - ($nr:ident, $a1:expr, $a2:expr, $a3:expr) - => ( ::sc::syscall3( - ::sc::nr::$nr, - $a1 as usize, $a2 as usize, $a3 as usize) ); - - ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr) - => ( ::sc::syscall4( - ::sc::nr::$nr, - $a1 as usize, $a2 as usize, $a3 as usize, - $a4 as usize) ); - - ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) - => ( ::sc::syscall5( - ::sc::nr::$nr, - $a1 as usize, $a2 as usize, $a3 as usize, - $a4 as usize, $a5 as usize) ); - - ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) - => ( ::sc::syscall6( - ::sc::nr::$nr, - $a1 as usize, $a2 as usize, $a3 as usize, - $a4 as usize, $a5 as usize, $a6 as usize) ); - - ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr, $a7:expr) - => ( ::sc::syscall7( - ::sc::nr::$nr, - $a1 as usize, $a2 as usize, $a3 as usize, - $a4 as usize, $a5 as usize, $a6 as usize, - $a7 as usize) ); -} diff --git a/src/macros/32be-align.rs b/src/macros/32be-align.rs new file mode 100644 index 0000000..9560921 --- /dev/null +++ b/src/macros/32be-align.rs @@ -0,0 +1,462 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[macro_export] +macro_rules! syscall { + ($nr:ident, u64, $a1:expr) + => ( ::sc::syscall2( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, + 0, + ($a2 >> 32) as usize, $a2 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + 0, + ($a3 >> 32) as usize, $a3 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + 0, + ($a2 >> 32) as usize, $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + $a3 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, + 0, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + 0, + ($a4 >> 32) as usize, $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + 0, + ($a3 >> 32) as usize, $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + 0, + ($a2 >> 32) as usize, $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + 0, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + 0, + ($a2 >> 32) as usize, $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + 0, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + 0, + ($a4 >> 32) as usize, $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + 0, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + 0, + ($a4 >> 32) as usize, $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + 0, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize, + $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + 0, + ($a5 >> 32) as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + 0, + ($a2 >> 32) as usize, $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall9( + ::sc::nr::$nr, + $a1 as usize, + 0, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + 0, + ($a4 >> 32) as usize, $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, :expr, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + 0, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + $a4 as usize, + ($a5 >> 32) as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize, + 0, + ($a5 >> 32) as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + 0, + ($a4 >> 32) as usize, $a4 as usize, + ($a5 >> 32) as usize, $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + 0, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + 0, + ($a4 >> 32) as usize, $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + ($a5 >> 32) as usize, $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + 0, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + 0, + ($a4 >> 32) as usize, $a4 as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, u64, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + ($a5 >> 32) as usize, $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, u64, $a6:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, + 0, + ($a6 >> 32) as usize, $a6 as usize) ); + + + ($nr:ident) + => ( ::sc::syscall0( + ::sc::nr::$nr) ); + + ($nr:ident, $a1:expr) + => ( ::sc::syscall1( + ::sc::nr::$nr, + $a1 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr) + => ( ::sc::syscall2( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr, $a7:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize, + $a7 as usize) ); +} diff --git a/src/macros/32be.rs b/src/macros/32be.rs new file mode 100644 index 0000000..f358419 --- /dev/null +++ b/src/macros/32be.rs @@ -0,0 +1,436 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[macro_export] +macro_rules! syscall { + ($nr:ident, u64, $a1:expr) + => ( ::sc::syscall2( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + $a3 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize, + $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + ($a5 >> 32) as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, :expr, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + $a4 as usize, + ($a5 >> 32) as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize, + ($a5 >> 32) as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize, + ($a5 >> 32) as usize, $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + ($a5 >> 32) as usize, $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + ($a1 >> 32) as usize, $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + ($a2 >> 32) as usize, $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + ($a3 >> 32) as usize, $a3 as usize, + $a4 as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + ($a4 >> 32) as usize, $a4 as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, u64, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + ($a5 >> 32) as usize, $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, u64, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, + ($a6 >> 32) as usize, $a6 as usize) ); + + + ($nr:ident) + => ( ::sc::syscall0( + ::sc::nr::$nr) ); + + ($nr:ident, $a1:expr) + => ( ::sc::syscall1( + ::sc::nr::$nr, + $a1 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr) + => ( ::sc::syscall2( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr, $a7:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize, + $a7 as usize) ); +} diff --git a/src/macros/32le-align.rs b/src/macros/32le-align.rs new file mode 100644 index 0000000..cd50211 --- /dev/null +++ b/src/macros/32le-align.rs @@ -0,0 +1,462 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[macro_export] +macro_rules! syscall { + ($nr:ident, u64, $a1:expr) + => ( ::sc::syscall2( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, ($a2 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, + 0, + $a2 as usize, ($a2 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, ($a3 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + 0, + $a3 as usize, ($a3 >> 32) as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + 0, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, ($a3 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, + 0, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + 0, + $a4 as usize, ($a4 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + 0, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, ($a4 >> 32) as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + 0, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, ($a4 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + 0, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, ($a4 >> 32) as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + 0, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + 0, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + 0, + $a4 as usize, ($a4 >> 32) as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, ($a4 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + 0, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + 0, + $a4 as usize, ($a4 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + 0, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, ($a4 >> 32) as usize, + $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + 0, + $a5 as usize, ($a5 >> 32) as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + 0, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall9( + ::sc::nr::$nr, + $a1 as usize, + 0, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + 0, + $a4 as usize, ($a4 >> 32) as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, :expr, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + 0, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, ($a5 >> 32) as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, ($a4 >> 32) as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, + 0, + $a5 as usize, ($a5 >> 32) as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + 0, + $a4 as usize, ($a4 >> 32) as usize, + $a5 as usize, ($a5 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + 0, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + 0, + $a4 as usize, ($a4 >> 32) as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, ($a5 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + 0, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + 0, + $a4 as usize, ($a4 >> 32) as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, u64, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, ($a5 >> 32) as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, u64, $a6:expr) + => ( ::sc::syscall8( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, + 0, + $a6 as usize, ($a6 >> 32) as usize) ); + + + ($nr:ident) + => ( ::sc::syscall0( + ::sc::nr::$nr) ); + + ($nr:ident, $a1:expr) + => ( ::sc::syscall1( + ::sc::nr::$nr, + $a1 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr) + => ( ::sc::syscall2( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr, $a7:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize, + $a7 as usize) ); +} diff --git a/src/macros/32le.rs b/src/macros/32le.rs new file mode 100644 index 0000000..5b5fb89 --- /dev/null +++ b/src/macros/32le.rs @@ -0,0 +1,436 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[macro_export] +macro_rules! syscall { + ($nr:ident, u64, $a1:expr) + => ( ::sc::syscall2( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, ($a2 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, ($a2 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, ($a3 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, ($a3 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + $a4 as usize, ($a4 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, ($a4 >> 32) as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, ($a4 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, ($a4 >> 32) as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + $a4 as usize, ($a4 >> 32) as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, ($a4 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, ($a4 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, ($a4 >> 32) as usize, + $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, ($a5 >> 32) as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + $a4 as usize, ($a4 >> 32) as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, :expr, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, ($a5 >> 32) as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, ($a4 >> 32) as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, + $a5 as usize, ($a5 >> 32) as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, ($a4 >> 32) as usize, + $a5 as usize, ($a5 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, ($a4 >> 32) as usize, + $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, ($a5 >> 32) as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, ($a1 >> 32) as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, ($a2 >> 32) as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, ($a3 >> 32) as usize, + $a4 as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, ($a4 >> 32) as usize, + $a5 as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, u64, $a5:expr, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, ($a5 >> 32) as usize, + $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, u64, $a6:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, + $a2 as usize, + $a3 as usize, + $a4 as usize, + $a5 as usize, + $a6 as usize, ($a6 >> 32) as usize) ); + + + ($nr:ident) + => ( ::sc::syscall0( + ::sc::nr::$nr) ); + + ($nr:ident, $a1:expr) + => ( ::sc::syscall1( + ::sc::nr::$nr, + $a1 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr) + => ( ::sc::syscall2( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr, $a7:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize, + $a7 as usize) ); +} diff --git a/src/macros/64.rs b/src/macros/64.rs new file mode 100644 index 0000000..25be891 --- /dev/null +++ b/src/macros/64.rs @@ -0,0 +1,322 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[macro_export] +macro_rules! syscall { + ($nr:ident, u64, $a1:expr) + => ( ::sc::syscall1( + ::sc::nr::$nr, + $a1 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr) + => ( ::sc::syscall2( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr) + => ( ::sc::syscall2( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr) + => ( ::sc::syscall2( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, u64, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, :expr, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, u64, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, u64, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize) ); + + ($nr:ident, $a1:expr, u64, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, u64, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, u64, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, u64, $a5:expr, $a6:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, u64, $a6:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize) ); + + + ($nr:ident) + => ( ::sc::syscall0( + ::sc::nr::$nr) ); + + ($nr:ident, $a1:expr) + => ( ::sc::syscall1( + ::sc::nr::$nr, + $a1 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr) + => ( ::sc::syscall2( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr) + => ( ::sc::syscall3( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr) + => ( ::sc::syscall4( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) + => ( ::sc::syscall5( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) + => ( ::sc::syscall6( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize) ); + + ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr, $a7:expr) + => ( ::sc::syscall7( + ::sc::nr::$nr, + $a1 as usize, $a2 as usize, $a3 as usize, + $a4 as usize, $a5 as usize, $a6 as usize, + $a7 as usize) ); +} diff --git a/src/platform/linux-mips/mod.rs b/src/platform/linux-mips/mod.rs index b8c5466..45e2744 100644 --- a/src/platform/linux-mips/mod.rs +++ b/src/platform/linux-mips/mod.rs @@ -139,3 +139,55 @@ pub unsafe fn syscall6(mut nr: usize, : "volatile"); if a4 == 0 { nr } else { -(nr as isize) as usize } } + +#[inline(always)] +pub unsafe fn syscall7(mut nr: usize, + a1: usize, + a2: usize, + a3: usize, + mut a4: usize, + a5: usize, + a6: usize, + a7: usize) + -> usize { + asm!(".set noat + subu $$29,28 + sw $5, 16($$29) + sw $6, 20($$29) + sw $7, 24($$29) + syscall + addiu $$29,28 + .set at" + : "+{$2}"(nr) "+{$7}"(a4) + : "{$4}"(a1) "{$5}"(a2) "{$6}"(a3) "r"(a5) "r"(a6) "r"(a7) + : "$8" "$9" "$10" "$11" "$12" "$13" "$14" "$15" "$24" "$25" "memory" + : "volatile"); + if a4 == 0 { nr } else { -(nr as isize) as usize } +} + +#[inline(always)] +pub unsafe fn syscall8(mut nr: usize, + a1: usize, + a2: usize, + a3: usize, + mut a4: usize, + a5: usize, + a6: usize, + a7: usize, + a8: usize) + -> usize { + asm!(".set noat + subu $$29,32 + sw $5, 16($$29) + sw $6, 20($$29) + sw $7, 24($$29) + sw $8, 28($$29) + syscall + addiu $$29,32 + .set at" + : "+{$2}"(nr) "+{$7}"(a4) + : "{$4}"(a1) "{$5}"(a2) "{$6}"(a3) "r"(a5) "r"(a6) "r"(a7) "r"(a8) + : "$8" "$9" "$10" "$11" "$12" "$13" "$14" "$15" "$24" "$25" "memory" + : "volatile"); + if a4 == 0 { nr } else { -(nr as isize) as usize } +} diff --git a/src/platform/linux-powerpc/mod.rs b/src/platform/linux-powerpc/mod.rs index d7a7312..6021486 100644 --- a/src/platform/linux-powerpc/mod.rs +++ b/src/platform/linux-powerpc/mod.rs @@ -134,3 +134,25 @@ pub unsafe fn syscall6(mut n: usize, : "volatile"); a1 } + +#[inline(always)] +pub unsafe fn syscall7(mut n: usize, + mut a1: usize, + mut a2: usize, + mut a3: usize, + mut a4: usize, + mut a5: usize, + mut a6: usize, + mut a7: usize) + -> usize { + asm!("sc + bns+ 1f + neg $1, $1 + 1:" + : "+{r0}"(n) "+{r3}"(a1) "+{r4}"(a2) "+{r5}"(a3) "+{r6}"(a4) + "+{r7}"(a5) "+{r8}"(a6) "+{r9}"(a7) + : + : "cr0" "memory" "r9" "r10" "r11" "r12" + : "volatile"); + a1 +} diff --git a/src/platform/linux-powerpc64/mod.rs b/src/platform/linux-powerpc64/mod.rs index 7c311df..03e6556 100644 --- a/src/platform/linux-powerpc64/mod.rs +++ b/src/platform/linux-powerpc64/mod.rs @@ -131,3 +131,25 @@ pub unsafe fn syscall6(mut n: usize, : "volatile"); a1 } + +#[inline(always)] +pub unsafe fn syscall7(mut n: usize, + mut a1: usize, + mut a2: usize, + mut a3: usize, + mut a4: usize, + mut a5: usize, + mut a6: usize, + mut a7: usize) + -> usize { + asm!("sc + bns+ 1f + neg $1, $1 + 1:" + : "+{r0}"(n) "+{r3}"(a1) "+{r4}"(a2) "+{r5}"(a3) "+{r6}"(a4) + "+{r7}"(a5) "+{r8}"(a6) "+{r9}"(a7) + : + : "cr0" "memory" "r9" "r10" "r11" "r12" + : "volatile"); + a1 +}