1 /* 2 * Copyright 2007, Hugo Santos. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef _FBSD_COMPAT_MACHINE_ATOMIC_H_ 6 #define _FBSD_COMPAT_MACHINE_ATOMIC_H_ 7 8 9 #include <KernelExport.h> 10 11 12 #define atomic_add_int(ptr, value) \ 13 atomic_add((int32 *)(ptr), value) 14 15 #define atomic_subtract_int(ptr, value) \ 16 atomic_add((int32 *)(ptr), -value) 17 18 #define atomic_load_int(ptr) \ 19 atomic_get((int32 *)ptr) 20 21 #define atomic_set_acq_32(ptr, value) \ 22 atomic_set_int(ptr, value) 23 24 #define atomic_set_int(ptr, value) \ 25 atomic_or((int32 *)(ptr), value) 26 27 #define atomic_readandclear_int(ptr) \ 28 atomic_set((int32 *)(ptr), 0) 29 30 #define atomic_cmpset_int(ptr, old, new) \ 31 (atomic_test_and_set((int32 *)(ptr), new, old) == (int32)old) 32 33 #define atomic_add_32 atomic_add_int 34 #define atomic_subtract_32 atomic_subtract_int 35 #define atomic_load_acq_32 atomic_load_int 36 #define atomic_store_rel_int atomic_set_acq_32 37 #define atomic_cmpset_acq_int atomic_cmpset_int 38 39 #define atomic_load_32(ptr) (*(volatile uint32 *)(ptr)) 40 #define atomic_set_32(ptr, val) atomic_set((int32 *)ptr, val) 41 #define atomic_fetchadd_32(ptr, val) atomic_add((int32 *)ptr, val) 42 43 #define mb() memory_full_barrier() 44 #define wmb() memory_write_barrier_inline() 45 #define rmb() memory_read_barrier() 46 47 #endif /* _FBSD_COMPAT_MACHINE_ATOMIC_H_ */ 48