]> gitweb.factorcode.org Git - factor.git/blob - vm/atomic-gcc.hpp
vm: better organize atomics and sample counter
[factor.git] / vm / atomic-gcc.hpp
1 namespace factor {
2         namespace atomic {
3                 __attribute__((always_inline))
4                 inline static bool cas(volatile cell *ptr, cell old_val, cell new_val)
5                 {
6                         return __sync_bool_compare_and_swap(ptr, old_val, new_val);
7                 }
8                 __attribute__((always_inline))
9                 inline static bool cas(volatile fixnum *ptr, fixnum old_val, fixnum new_val)
10                 {
11                         return __sync_bool_compare_and_swap(ptr, old_val, new_val);
12                 }
13
14                 __attribute__((always_inline))
15                 inline static cell add(volatile cell *ptr, cell val)
16                 {
17                         return __sync_add_and_fetch(ptr, val);
18                 }
19                 __attribute__((always_inline))
20                 inline static fixnum add(volatile fixnum *ptr, fixnum val)
21                 {
22                         return __sync_add_and_fetch(ptr, val);
23                 }
24
25                 __attribute__((always_inline))
26                 inline static cell subtract(volatile cell *ptr, cell val)
27                 {
28                         return __sync_sub_and_fetch(ptr, val);
29                 }
30                 __attribute__((always_inline))
31                 inline static fixnum subtract(volatile fixnum *ptr, fixnum val)
32                 {
33                         return __sync_sub_and_fetch(ptr, val);
34                 }
35
36                 __attribute__((always_inline))
37                 inline static void fence()
38                 {
39                         __sync_synchronize();
40                 }
41         }
42 }