Added back harts support
[akaros.git] / kern / arch / sparc / ros / syscall.h
1 #ifndef _ROS_ARCH_SYSCALL_H
2 #define _ROS_ARCH_SYSCALL_H
3
4 #ifndef ROS_KERNEL
5
6 #include <errno.h>
7
8 static inline long __attribute__((always_inline))
9 __ros_syscall(long _num, long _a0, long _a1, long _a2, long _a3, long _a4)
10 {
11         register long num asm("g1") = _num;
12         register long a0 asm("o0") = _a0, a1 asm("o1") = _a1;
13         register long a2 asm("o2") = _a2, a3 asm("o3") = _a3;
14         register long a4 asm("o4") = _a4;
15
16         asm volatile("ta 8" : "=r"(a0),"=r"(a1)
17                      : "r"(num),"0"(a0),"1"(a1),"r"(a2),"r"(a3),"r"(a4));
18
19         // move a1, a2 into regular variables so they're volatile across
20         // procedure calls (of which errno is one)
21         long ret = a0, err = a1;
22         if(err != 0)
23                 errno = err;
24
25          return ret;
26 }
27
28 #endif /* ifndef ROS_KERNEL */
29
30 #endif