syscall_arch.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #define __SYSCALL_LL_E(x) \
  2. ((union { long long ll; long l[2]; }){ .ll = x }).l[0], \
  3. ((union { long long ll; long l[2]; }){ .ll = x }).l[1]
  4. #define __SYSCALL_LL_O(x) __SYSCALL_LL_E((x))
  5. #define SYSCALL_MMAP2_UNIT 8192ULL
  6. #ifndef __clang__
  7. static __inline long __syscall0(long n)
  8. {
  9. register unsigned long r11 __asm__("r11") = n;
  10. __asm__ __volatile__ ("l.sys 1"
  11. : "=r"(r11)
  12. : "r"(r11)
  13. : "memory", "r3", "r4", "r5", "r6", "r7", "r8",
  14. "r12", "r13", "r15", "r17", "r19", "r21",
  15. "r23", "r25", "r27", "r29", "r31");
  16. return r11;
  17. }
  18. static inline long __syscall1(long n, long a)
  19. {
  20. register unsigned long r11 __asm__("r11") = n;
  21. register unsigned long r3 __asm__("r3") = a;
  22. __asm__ __volatile__ ("l.sys 1"
  23. : "=r"(r11)
  24. : "r"(r11), "r"(r3)
  25. : "memory", "r4", "r5", "r6", "r7", "r8",
  26. "r12", "r13", "r15", "r17", "r19", "r21",
  27. "r23", "r25", "r27", "r29", "r31");
  28. return r11;
  29. }
  30. static inline long __syscall2(long n, long a, long b)
  31. {
  32. register unsigned long r11 __asm__("r11") = n;
  33. register unsigned long r3 __asm__("r3") = a;
  34. register unsigned long r4 __asm__("r4") = b;
  35. __asm__ __volatile__ ("l.sys 1"
  36. : "=r"(r11)
  37. : "r"(r11), "r"(r3), "r"(r4)
  38. : "memory", "r5", "r6", "r7", "r8",
  39. "r12", "r13", "r15", "r17", "r19", "r21",
  40. "r23", "r25", "r27", "r29", "r31");
  41. return r11;
  42. }
  43. static inline long __syscall3(long n, long a, long b, long c)
  44. {
  45. register unsigned long r11 __asm__("r11") = n;
  46. register unsigned long r3 __asm__("r3") = a;
  47. register unsigned long r4 __asm__("r4") = b;
  48. register unsigned long r5 __asm__("r5") = c;
  49. __asm__ __volatile__ ("l.sys 1"
  50. : "=r"(r11)
  51. : "r"(r11), "r"(r3), "r"(r4), "r"(r5)
  52. : "memory", "r6", "r7", "r8",
  53. "r12", "r13", "r15", "r17", "r19", "r21",
  54. "r23", "r25", "r27", "r29", "r31");
  55. return r11;
  56. }
  57. static inline long __syscall4(long n, long a, long b, long c, long d)
  58. {
  59. register unsigned long r11 __asm__("r11") = n;
  60. register unsigned long r3 __asm__("r3") = a;
  61. register unsigned long r4 __asm__("r4") = b;
  62. register unsigned long r5 __asm__("r5") = c;
  63. register unsigned long r6 __asm__("r6") = d;
  64. __asm__ __volatile__ ("l.sys 1"
  65. : "=r"(r11)
  66. : "r"(r11), "r"(r3), "r"(r4), "r"(r5), "r"(r6)
  67. : "memory", "r7", "r8",
  68. "r12", "r13", "r15", "r17", "r19", "r21",
  69. "r23", "r25", "r27", "r29", "r31");
  70. return r11;
  71. }
  72. static inline long __syscall5(long n, long a, long b, long c, long d, long e)
  73. {
  74. register unsigned long r11 __asm__("r11") = n;
  75. register unsigned long r3 __asm__("r3") = a;
  76. register unsigned long r4 __asm__("r4") = b;
  77. register unsigned long r5 __asm__("r5") = c;
  78. register unsigned long r6 __asm__("r6") = d;
  79. register unsigned long r7 __asm__("r7") = e;
  80. __asm__ __volatile__ ("l.sys 1"
  81. : "=r"(r11)
  82. : "r"(r11), "r"(r3), "r"(r4), "r"(r5), "r"(r6),
  83. "r"(r7)
  84. : "memory", "r8",
  85. "r12", "r13", "r15", "r17", "r19", "r21",
  86. "r23", "r25", "r27", "r29", "r31");
  87. return r11;
  88. }
  89. static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
  90. {
  91. register unsigned long r11 __asm__("r11") = n;
  92. register unsigned long r3 __asm__("r3") = a;
  93. register unsigned long r4 __asm__("r4") = b;
  94. register unsigned long r5 __asm__("r5") = c;
  95. register unsigned long r6 __asm__("r6") = d;
  96. register unsigned long r7 __asm__("r7") = e;
  97. register unsigned long r8 __asm__("r8") = f;
  98. __asm__ __volatile__ ("l.sys 1"
  99. : "=r"(r11)
  100. : "r"(r11), "r"(r3), "r"(r4), "r"(r5), "r"(r6),
  101. "r"(r7), "r"(r8)
  102. : "memory",
  103. "r12", "r13", "r15", "r17", "r19", "r21",
  104. "r23", "r25", "r27", "r29", "r31");
  105. return r11;
  106. }
  107. #else
  108. #undef SYSCALL_NO_INLINE
  109. #define SYSCALL_NO_INLINE
  110. #endif