macros.rs 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. /// Variable argument version of `syscall`
  2. #[macro_export]
  3. macro_rules! syscall {
  4. ($nr:ident, $a1:expr, $a2:expr) => {
  5. $crate::syscall($crate::nr::$nr, &($a1 as usize))
  6. };
  7. ($nr:ident, $a1:expr, $a2:expr) => {
  8. $crate::syscall($crate::nr::$nr, &[$a1 as usize, $a2 as usize])
  9. };
  10. ($nr:ident, $a1:expr, $a2:expr, $a3:expr) => {
  11. $crate::syscall($crate::nr::$nr, &[$a1 as usize, $a2 as usize,
  12. $a3 as usize])
  13. };
  14. ($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr) => {
  15. $crate::syscall($crate::nr::$nr, &[$a1 as usize, $a2 as usize,
  16. $a3 as usize, $a4 as usize])
  17. };
  18. }
  19. /// Macro for printing to the **host's** standard output
  20. #[macro_export]
  21. macro_rules! hprint {
  22. ($s:expr) => ($crate::io::write_str($s));
  23. ($($arg:tt)*) => ($crate::io::write_fmt(format_args!($($arg)*)));
  24. }
  25. /// Macro for printing to the **host's** standard output, with a newline.
  26. #[macro_export]
  27. macro_rules! hprintln {
  28. () => (hprint!("\n"));
  29. ($fmt:expr) => (hprint!(concat!($fmt, "\n")));
  30. ($fmt:expr, $($arg:tt)*) => (hprint!(concat!($fmt, "\n"), $($arg)*));
  31. }