#ifndef _MACHINE_INSTR_H #define _MACHINE_INSTR_H static inline long __attribute__ ((unused)) compare_and_swap (volatile long *p, long oldval, long newval) { long ret, temp; __asm__ __volatile__ ( "1:\t" "ldq_l %0,%5\n\t" "cmpeq %0,%3,%2\n\t" "beq %2,2f\n\t" "mov %4,%2\n\t" "stq_c %2,%1\n\t" "beq %2,1b\n\t" "2:\t" : "=&r"(ret), "=m"(*p), "=&r"(temp) : "r"(oldval), "r"(newval), "m"(*p)); return ret; } #define STORE_ORDER_BARRIER() __asm__ __volatile__ ("wmb" : : : "memory"); #define MEMORY_BARRIER_AFTER_ATOMIC() __asm__ __volatile__ ("mb" : : : "memory"); #define MEMORY_BARRIER() __asm__ __volatile__ ( \ "mb" : : : "memory" ); #endif