Add memory clobber to RISC-V set_stack_pointer
[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) : "memory");
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 uint64_t
31 read_tsc_serialized(void)
32 {
33         return read_tsc();
34 }
35
36 static __inline void
37 cpu_relax(void)
38 {
39         long ctr;
40         asm volatile("li %0, 8; 1: addi %0, %0, -1; bnez %0, 1b" : "=r"(ctr) : : "memory");
41 }
42
43 #endif /* PARLIB_ARCH_H */