822ae2e48be5e2c60d485885ea800a07cf2361f1
[akaros.git] / kern / arch / sparc / ros / hart.h
1 #ifndef _ROS_ARCH_HART_H
2 #define _ROS_ARCH_HART_H
3
4 #define __RAMP__
5 double do_fdiv(double,double);
6 double do_fsqrt(double);
7 double do_recip(double);
8 double do_rsqrt(double);
9
10 static inline int
11 __hart_self()
12 {
13         int id;
14         asm ("mov %%asr13,%0" : "=r"(id));
15         return id;
16 }
17
18 static inline void
19 __hart_set_stack_pointer(void* sp)
20 {
21         __asm__ __volatile__ ("mov %0,%%sp" : : "r"(sp));
22 }
23
24 static inline void
25 __hart_relax()
26 {
27         // TODO: relax
28 }
29
30 static inline int
31 __hart_swap(int* addr, int val)
32 {
33         __asm__ __volatile__ ("swap [%2],%0" :"=r"(val) :"0"(val),"r"(addr) :"memory");
34         return val;
35 }
36
37 #endif