123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #ifndef __SYSCALL_H__
- #define __SYSCALL_H__
- #include "bits/syscall.h"
- #include "bits/errno.h"
- inline static long syscall0(int nr)
- {
- register long r7 asm("a7") = nr;
- register long r0 asm("a0");
- asm volatile ("ecall"
- : "=r"(r0)
- : "r"(r7)
- : "memory");
- return r0;
- }
- inline static long syscall1(int nr, long a1)
- {
- register long r7 asm("a7") = nr;
- register long r0 asm("a0") = a1;
- asm volatile ("ecall"
- : "=r"(r0)
- : "r"(r7), "r"(r0)
- : "memory");
- return r0;
- }
- inline static long syscall2(int nr, long a1, long a2)
- {
- register long r7 asm("a7") = nr;
- register long r0 asm("a0") = a1;
- register long r1 asm("a1") = a2;
- asm volatile ("ecall"
- : "=r"(r0)
- : "r"(r7), "r"(r0), "r"(r1)
- : "memory");
- return r0;
- }
- inline static long syscall3(int nr, long a1, long a2, long a3)
- {
- register long r7 asm("a7") = nr;
- register long r0 asm("a0") = a1;
- register long r1 asm("a1") = a2;
- register long r2 asm("a2") = a3;
- asm volatile ("ecall"
- : "=r"(r0)
- : "r"(r7), "r"(r0), "r"(r1), "r"(r2)
- : "memory");
- return r0;
- }
- inline static long syscall4(int nr, long a1, long a2, long a3, long a4)
- {
- register long r7 asm("a7") = nr;
- register long r0 asm("a0") = a1;
- register long r1 asm("a1") = a2;
- register long r2 asm("a2") = a3;
- register long r3 asm("a3") = a4;
- asm volatile ("ecall"
- : "=r"(r0)
- : "r"(r7), "r"(r0), "r"(r1), "r"(r2), "r"(r3)
- : "memory");
- return r0;
- }
- inline static long syscall5(int nr, long a1, long a2, long a3, long a4, long a5)
- {
- register long r7 asm("a7") = nr;
- register long r0 asm("a0") = a1;
- register long r1 asm("a1") = a2;
- register long r2 asm("a2") = a3;
- register long r3 asm("a3") = a4;
- register long r4 asm("a4") = a5;
- asm volatile ("ecall"
- : "=r"(r0)
- : "r"(r7), "r"(r0), "r"(r1), "r"(r2), "r"(r3), "r"(r4)
- : "memory");
- return r0;
- }
- inline static long syscall6(int nr, long a1, long a2, long a3, long a4,
- long a5, long a6)
- {
- register long r7 asm("a7") = nr;
- register long r0 asm("a0") = a1;
- register long r1 asm("a1") = a2;
- register long r2 asm("a2") = a3;
- register long r3 asm("a3") = a4;
- register long r4 asm("a4") = a5;
- register long r5 asm("a5") = a6;
- asm volatile ("ecall"
- : "=r"(r0)
- : "r"(r7), "r"(r0), "r"(r1), "r"(r2), "r"(r3), "r"(r4), "r"(r5)
- : "memory");
- return r0;
- }
- #endif
|