1 #ifndef _MACHINE_INSTR_H
2 #define _MACHINE_INSTR_H
4 #include "toolbox/logging.h"
7 __attribute__ ((unused))
8 compare_and_swap (volatile long *p, long oldval, long newval)
11 /*dolog("compare_and_swap(%p [%d], %d, %d)", p, *p, oldval, newval);*/
13 __asm__ __volatile__ (
16 : "=&r"(ret), "=m"(*p)
17 : "r"(oldval), "r"(newval), "r"(p));
19 /*dolog("compare_and_swap() return=%d mem=%d", ret, *p);*/
23 #define STORE_ORDER_BARRIER() __asm__ __volatile__ ("wmb" : : : "memory");
24 #define MEMORY_BARRIER_AFTER_ATOMIC() __asm__ __volatile__ ("mb" : : : "memory");
25 #define MEMORY_BARRIER() __asm__ __volatile__ ( \
26 "membar 0x0F" : : : "memory" );