Handle rdtscp
[akaros.git] / user / parlib / include / riscv / arch.h
index 7f9f88c..c40f6a6 100644 (file)
@@ -10,7 +10,7 @@
 static __inline void
 set_stack_pointer(void* sp)
 {
-       asm volatile ("move sp, %0" : : "r"(sp));
+       asm volatile ("move sp, %0" : : "r"(sp) : "memory");
 }
 
 static __inline void
@@ -27,11 +27,23 @@ read_tsc(void)
        return (uint64_t)cycles;
 }
 
+static __inline uint64_t
+read_tscp(void)
+{
+       return read_tsc();
+}
+
+static __inline uint64_t
+read_tsc_serialized(void)
+{
+       return read_tsc();
+}
+
 static __inline void
 cpu_relax(void)
 {
-       long ctr = 8;
-       asm volatile("1: addi %0, %0, -1; bnez %0, 1b" : "=&r"(ctr) : : "memory");
+       long ctr;
+       asm volatile("li %0, 8; 1: addi %0, %0, -1; bnez %0, 1b" : "=r"(ctr) : : "memory");
 }
 
 #endif /* PARLIB_ARCH_H */