1#include <BeOSBuildCompatibility.h>
2
3#include <string.h>
4
5#include <OS.h>
6#include <SupportDefs.h>
7
8
9#if (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)) \
10	&& !defined(__clang__)
11
12
13void
14atomic_set(int32 *value, int32 newValue)
15{
16	*value = newValue;
17}
18
19
20int32
21atomic_get_and_set(int32 *value, int32 newValue)
22{
23	int32 oldValue = *value;
24	*value = newValue;
25	return oldValue;
26}
27
28
29int32
30atomic_test_and_set(int32 *value, int32 newValue, int32 testAgainst)
31{
32	int32 oldValue = *value;
33	if (oldValue == testAgainst)
34		*value = newValue;
35	return oldValue;
36}
37
38
39int32
40atomic_add(int32 *value, int32 addValue)
41{
42	int32 oldValue = *value;
43	*value += addValue;
44	return oldValue;
45}
46
47
48int32
49atomic_and(int32 *value, int32 andValue)
50{
51	int32 oldValue = *value;
52	*value &= andValue;
53	return oldValue;
54}
55
56
57int32
58atomic_or(int32 *value, int32 orValue)
59{
60	int32 oldValue = *value;
61	*value |= orValue;
62	return oldValue;
63}
64
65
66int32
67atomic_get(int32 *value)
68{
69	return *value;
70}
71
72
73void
74atomic_set64(int64 *value, int64 newValue)
75{
76	*value = newValue;
77}
78
79
80int64
81atomic_get_and_set64(int64 *value, int64 newValue)
82{
83	int64 oldValue = *value;
84	*value = newValue;
85	return oldValue;
86}
87
88int64
89atomic_test_and_set64(int64 *value, int64 newValue, int64 testAgainst)
90{
91	int64 oldValue = *value;
92	if (oldValue == testAgainst)
93		*value = newValue;
94	return oldValue;
95}
96
97int64
98atomic_add64(int64 *value, int64 addValue)
99{
100	int64 oldValue = *value;
101	*value += addValue;
102	return oldValue;
103}
104
105int64
106atomic_and64(int64 *value, int64 andValue)
107{
108	int64 oldValue = *value;
109	*value &= andValue;
110	return oldValue;
111}
112
113int64
114atomic_or64(int64 *value, int64 orValue)
115{
116	int64 oldValue = *value;
117	*value |= orValue;
118	return oldValue;
119}
120
121int64
122atomic_get64(int64 *value)
123{
124	return *value;
125}
126
127
128#endif	// __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)
129
130