summaryrefslogtreecommitdiff
path: root/usr/src/cmd/ast/libast/i386/FEATURE/aso
blob: 335c58017630697abbc0edd25840cc28130e9af1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/* : : generated from contrib/ast/src/lib/libast/features/aso by iffe version 2012-07-17 : : */
#ifndef _def_aso_ast
#define _def_aso_ast	1
#define _sys_types	1	/* #include <sys/types.h> ok */

#if defined (__GNUC__) && (__GNUC__ == 4)
/* <atomic.h> atomic_cas_64 */
#include <atomic.h>
#define _aso_cas8(p,o,n)	atomic_cas_8(p,o,n)
#define _aso_inc8(p)		(atomic_add_8_nv(p,1)-1)
#define _aso_dec8(p)		(atomic_add_8_nv(p,-1)+1)
#define _aso_cas16(p,o,n)	atomic_cas_16(p,o,n)
#define _aso_inc16(p)		(atomic_add_16_nv(p,1)-1)
#define _aso_dec16(p)		(atomic_add_16_nv(p,-1)+1)
#define _aso_cas32(p,o,n)	atomic_cas_32(p,o,n)
#define _aso_inc32(p)		(atomic_add_32_nv(p,1)-1)
#define _aso_dec32(p)		(atomic_add_32_nv(p,-1)+1)
#define _aso_cas64(p,o,n)	atomic_cas_64(p,o,n)
#define _aso_inc64(p)		(atomic_add_64_nv(p,1)-1)
#define _aso_dec64(p)		(atomic_add_64_nv(p,-1)+1)
#if _ast_sizeof_pointer == 8
#define _aso_casptr(p,o,n)	((void*)atomic_cas_64((uint64_t*)p,(uint64_t)o,(uint64_t)n))
#else
#define _aso_casptr(p,o,n)	((void*)atomic_cas_32((uint32_t*)p,(uint32_t)o,(uint32_t)n))
#endif

#else /* __GNUC__ == 4 */

/* gcc 4.1+ 64 bit memory atomic operations model */
#define _aso_cas8(p,o,n)	__sync_val_compare_and_swap(p,o,n)
#define _aso_inc8(p)		__sync_fetch_and_add(p,1)
#define _aso_dec8(p)		__sync_fetch_and_sub(p,1)
#define _aso_cas16(p,o,n)	__sync_val_compare_and_swap(p,o,n)
#define _aso_inc16(p)		__sync_fetch_and_add(p,1)
#define _aso_dec16(p)		__sync_fetch_and_sub(p,1)
#define _aso_cas32(p,o,n)	__sync_val_compare_and_swap(p,o,n)
#define _aso_inc32(p)		__sync_fetch_and_add(p,1)
#define _aso_dec32(p)		__sync_fetch_and_sub(p,1)
#define _aso_cas64(p,o,n)	__sync_val_compare_and_swap(p,o,n)
#define _aso_inc64(p)		__sync_fetch_and_add(p,1)
#define _aso_dec64(p)		__sync_fetch_and_sub(p,1)
#if _ast_sizeof_pointer == 8
#define _aso_casptr(p,o,n)	((void*)__sync_val_compare_and_swap(p,(uint64_t)o,(uint64_t)n))
#else
#define _aso_casptr(p,o,n)	((void*)__sync_val_compare_and_swap(p,(uint32_t)o,(uint32_t)n))
#endif

#endif /* __GNUC__ == 4 */

#endif