@@ -65,6 +65,9 @@ atomic_set_release(X,V) { smp_store_release(X,V); }
65
65
66
66
atomic_add(V,X) { __atomic_op(X,+,V); }
67
67
atomic_sub(V,X) { __atomic_op(X,-,V); }
68
+ atomic_and(V,X) { __atomic_op(X,&,V); }
69
+ atomic_or(V,X) { __atomic_op(X,|,V); }
70
+ atomic_xor(V,X) { __atomic_op(X,^,V); }
68
71
atomic_inc(X) { __atomic_op(X,+,1); }
69
72
atomic_dec(X) { __atomic_op(X,-,1); }
70
73
@@ -77,6 +80,21 @@ atomic_fetch_add_relaxed(V,X) __atomic_fetch_op{once}(X,+,V)
77
80
atomic_fetch_add_acquire(V,X) __atomic_fetch_op{acquire}(X,+,V)
78
81
atomic_fetch_add_release(V,X) __atomic_fetch_op{release}(X,+,V)
79
82
83
+ atomic_fetch_and(V,X) __atomic_fetch_op{mb}(X,&,V)
84
+ atomic_fetch_and_relaxed(V,X) __atomic_fetch_op{once}(X,&,V)
85
+ atomic_fetch_and_acquire(V,X) __atomic_fetch_op{acquire}(X,&,V)
86
+ atomic_fetch_and_release(V,X) __atomic_fetch_op{release}(X,&,V)
87
+
88
+ atomic_fetch_or(V,X) __atomic_fetch_op{mb}(X,|,V)
89
+ atomic_fetch_or_relaxed(V,X) __atomic_fetch_op{once}(X,|,V)
90
+ atomic_fetch_or_acquire(V,X) __atomic_fetch_op{acquire}(X,|,V)
91
+ atomic_fetch_or_release(V,X) __atomic_fetch_op{release}(X,|,V)
92
+
93
+ atomic_fetch_xor(V,X) __atomic_fetch_op{mb}(X,^,V)
94
+ atomic_fetch_xor_relaxed(V,X) __atomic_fetch_op{once}(X,^,V)
95
+ atomic_fetch_xor_acquire(V,X) __atomic_fetch_op{acquire}(X,^,V)
96
+ atomic_fetch_xor_release(V,X) __atomic_fetch_op{release}(X,^,V)
97
+
80
98
atomic_inc_return(X) __atomic_op_return{mb}(X,+,1)
81
99
atomic_inc_return_relaxed(X) __atomic_op_return{once}(X,+,1)
82
100
atomic_inc_return_acquire(X) __atomic_op_return{acquire}(X,+,1)
@@ -117,3 +135,6 @@ atomic_sub_and_test(V,X) __atomic_op_return{mb}(X,-,V) == 0
117
135
atomic_dec_and_test(X) __atomic_op_return{mb}(X,-,1) == 0
118
136
atomic_inc_and_test(X) __atomic_op_return{mb}(X,+,1) == 0
119
137
atomic_add_negative(V,X) __atomic_op_return{mb}(X,+,V) < 0
138
+ atomic_add_negative_relaxed(V,X) __atomic_op_return{once}(X,+,V) < 0
139
+ atomic_add_negative_acquire(V,X) __atomic_op_return{acquire}(X,+,V) < 0
140
+ atomic_add_negative_release(V,X) __atomic_op_return{release}(X,+,V) < 0
0 commit comments