]> gitweb.factorcode.org Git - factor.git/blob - vm/atomic-gcc.hpp
webapps.wiki: adding search bar
[factor.git] / vm / atomic-gcc.hpp
1 #define FACTOR_FORCE_INLINE __attribute__((always_inline)) inline
2 namespace factor {
3 namespace atomic {
4 __attribute__((always_inline)) inline static bool cas(volatile cell* ptr,
5                                                       cell old_val,
6                                                       cell new_val) {
7   return __sync_bool_compare_and_swap(ptr, old_val, new_val);
8 }
9 __attribute__((always_inline)) inline static bool cas(volatile fixnum* ptr,
10                                                       fixnum old_val,
11                                                       fixnum new_val) {
12   return __sync_bool_compare_and_swap(ptr, old_val, new_val);
13 }
14
15 __attribute__((always_inline)) inline static cell fetch_add(volatile cell* ptr,
16                                                             cell val) {
17   return __sync_fetch_and_add(ptr, val);
18 }
19 __attribute__((always_inline)) inline static fixnum fetch_add(
20     volatile fixnum* ptr, fixnum val) {
21   return __sync_fetch_and_add(ptr, val);
22 }
23
24 __attribute__((always_inline)) inline static cell fetch_subtract(
25     volatile cell* ptr, cell val) {
26   return __sync_fetch_and_sub(ptr, val);
27 }
28 __attribute__((always_inline)) inline static fixnum fetch_subtract(
29     volatile fixnum* ptr, fixnum val) {
30   return __sync_fetch_and_sub(ptr, val);
31 }
32
33 __attribute__((always_inline)) inline static void fence() {
34   __sync_synchronize();
35 }
36 }
37 }
38
39 #include "atomic.hpp"