syscall.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #ifndef __SYSCALL_H__
  2. #define __SYSCALL_H__
  3. #include "bits/syscall.h"
  4. #include "bits/errno.h"
  5. inline static long syscall0(int nr)
  6. {
  7. register long r7 asm("a7") = nr;
  8. register long r0 asm("a0");
  9. asm volatile ("ecall"
  10. : "=r"(r0)
  11. : "r"(r7)
  12. : "memory");
  13. return r0;
  14. }
  15. inline static long syscall1(int nr, long a1)
  16. {
  17. register long r7 asm("a7") = nr;
  18. register long r0 asm("a0") = a1;
  19. asm volatile ("ecall"
  20. : "=r"(r0)
  21. : "r"(r7), "r"(r0)
  22. : "memory");
  23. return r0;
  24. }
  25. inline static long syscall2(int nr, long a1, long a2)
  26. {
  27. register long r7 asm("a7") = nr;
  28. register long r0 asm("a0") = a1;
  29. register long r1 asm("a1") = a2;
  30. asm volatile ("ecall"
  31. : "=r"(r0)
  32. : "r"(r7), "r"(r0), "r"(r1)
  33. : "memory");
  34. return r0;
  35. }
  36. inline static long syscall3(int nr, long a1, long a2, long a3)
  37. {
  38. register long r7 asm("a7") = nr;
  39. register long r0 asm("a0") = a1;
  40. register long r1 asm("a1") = a2;
  41. register long r2 asm("a2") = a3;
  42. asm volatile ("ecall"
  43. : "=r"(r0)
  44. : "r"(r7), "r"(r0), "r"(r1), "r"(r2)
  45. : "memory");
  46. return r0;
  47. }
  48. inline static long syscall4(int nr, long a1, long a2, long a3, long a4)
  49. {
  50. register long r7 asm("a7") = nr;
  51. register long r0 asm("a0") = a1;
  52. register long r1 asm("a1") = a2;
  53. register long r2 asm("a2") = a3;
  54. register long r3 asm("a3") = a4;
  55. asm volatile ("ecall"
  56. : "=r"(r0)
  57. : "r"(r7), "r"(r0), "r"(r1), "r"(r2), "r"(r3)
  58. : "memory");
  59. return r0;
  60. }
  61. inline static long syscall5(int nr, long a1, long a2, long a3, long a4, long a5)
  62. {
  63. register long r7 asm("a7") = nr;
  64. register long r0 asm("a0") = a1;
  65. register long r1 asm("a1") = a2;
  66. register long r2 asm("a2") = a3;
  67. register long r3 asm("a3") = a4;
  68. register long r4 asm("a4") = a5;
  69. asm volatile ("ecall"
  70. : "=r"(r0)
  71. : "r"(r7), "r"(r0), "r"(r1), "r"(r2), "r"(r3), "r"(r4)
  72. : "memory");
  73. return r0;
  74. }
  75. inline static long syscall6(int nr, long a1, long a2, long a3, long a4,
  76. long a5, long a6)
  77. {
  78. register long r7 asm("a7") = nr;
  79. register long r0 asm("a0") = a1;
  80. register long r1 asm("a1") = a2;
  81. register long r2 asm("a2") = a3;
  82. register long r3 asm("a3") = a4;
  83. register long r4 asm("a4") = a5;
  84. register long r5 asm("a5") = a6;
  85. asm volatile ("ecall"
  86. : "=r"(r0)
  87. : "r"(r7), "r"(r0), "r"(r1), "r"(r2), "r"(r3), "r"(r4), "r"(r5)
  88. : "memory");
  89. return r0;
  90. }
  91. #endif