Checkin of Andrews stuff needed to compile glibc
[akaros.git] / user / parlib / src / sparc / syscall.c
1 #include <parlib.h>
2 #include <errno.h>
3
4 intreg_t ros_syscall(uint16_t _num, intreg_t _a1,
5                 intreg_t _a2, intreg_t _a3,
6                 intreg_t _a4, intreg_t _a5)
7 {
8         register intreg_t num asm("g1") = _num;
9         register intreg_t a1 asm("o0") = _a1, a2 asm("o1") = _a2;
10         register intreg_t a3 asm("o2") = _a3, a4 asm("o3") = _a4;
11         register intreg_t a5 asm("o4") = _a5;
12
13         asm volatile("ta 8" : "=r"(a1),"=r"(a2)
14                      : "r"(num),"0"(a1),"1"(a2),"r"(a3),"r"(a4),"r"(a5));
15
16         // move a1, a2 into regular variables so they're volatile across
17         // procedure calls (of which errno is one)
18         intreg_t ret = a1, err = a2;
19         if(err != 0)
20                 errno = err;
21
22         return ret;
23 }