Bug in return value or ros_arch_syscall() on SPARC
[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_arch_syscall(long _num, long _a0)
10 {
11         /* The args are slightly ghetto, but I don't want to fuck with sparc too
12          * much. */
13         register long num asm("g1") = _num;
14         register long a0 asm("o0") = _a0, a1 asm("o1") = 0;
15         register long a2 asm("o2") = 0,   a3 asm("o3") = 0;
16         register long a4 asm("o4") = 0;
17
18         asm volatile("ta 8" : "=r"(a0),"=r"(a1)
19                      : "r"(num),"0"(a0),"1"(a1),"r"(a2),"r"(a3),"r"(a4));
20
21         return a0;
22 }
23
24 #endif /* ifndef ROS_KERNEL */
25
26 #endif