diff --git a/sys/riscv/include/atomic.h b/sys/riscv/include/atomic.h --- a/sys/riscv/include/atomic.h +++ b/sys/riscv/include/atomic.h @@ -37,10 +37,11 @@ #include -#define fence() __asm __volatile("fence" ::: "memory"); -#define mb() fence() -#define rmb() fence() -#define wmb() fence() +#define _fence(PRE, SUC) __asm __volatile("fence "#PRE","#SUC ::: "memory"); +#define fence() _fence(rw, rw) +#define mb() _fence(rw, rw) +#define rmb() _fence(r, r) +#define wmb() _fence(w, w) static __inline int atomic_cmpset_8(__volatile uint8_t *, uint8_t, uint8_t); static __inline int atomic_fcmpset_8(__volatile uint8_t *, uint8_t *, uint8_t);