risc-v bugfix potpourri
[akaros.git] / user / parlib / include / riscv / arch.h
1 #ifndef PARLIB_ARCH_H
2 #define PARLIB_ARCH_H
3
4 #include <ros/common.h>
5
6 #define internal_function
7
8 #define ARCH_CL_SIZE 64
9
10 static __inline void
11 set_stack_pointer(void* sp)
12 {
13         asm volatile ("move sp, %0" : : "r"(sp));
14 }
15
16 static __inline void
17 breakpoint(void)
18 {
19         asm volatile ("break");
20 }
21
22 static __inline uint64_t
23 read_tsc(void)
24 {
25         unsigned long cycles;
26         asm ("rdcycle %0" : "=r"(cycles));
27         return (uint64_t)cycles;
28 }
29
30 static __inline void
31 cpu_relax(void)
32 {
33         long ctr;
34         asm volatile("li %0, 8; 1: addi %0, %0, -1; bnez %0, 1b" : "=r"(ctr) : : "memory");
35 }
36
37 #endif /* PARLIB_ARCH_H */