Added back harts support
[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 #define __hart_self_on_entry (__hart_self())
11
12 static inline int
13 __hart_self()
14 {
15         int id;
16         asm ("mov %%asr13,%0" : "=r"(id));
17         return id;
18 }
19
20 static inline void
21 __hart_set_stack_pointer(void* sp)
22 {
23         __asm__ __volatile__ ("mov %0,%%sp" : : "r"(sp));
24 }
25
26 static inline void
27 __hart_relax()
28 {
29         // TODO: relax
30 }
31
32 static inline int
33 __hart_swap(int* addr, int val)
34 {
35         __asm__ __volatile__ ("swap [%2],%0" :"=r"(val) :"0"(val),"r"(addr) :"memory");
36         return val;
37 }
38
39 #endif