]> gitweb.factorcode.org Git - factor.git/blobdiff - vm/atomic-gcc.hpp
io.streams.256color: faster by caching styles
[factor.git] / vm / atomic-gcc.hpp
index d6fd5a2b77cbaa803a58fad0ef86f5b74225efab..5716bdc60cbb5e278e8e0899b8535d06fd7cde96 100644 (file)
@@ -1,42 +1,39 @@
+#define FACTOR_FORCE_INLINE __attribute__((always_inline)) inline
 namespace factor {
-       namespace atomic {
-               __attribute__((always_inline))
-               inline static bool cas(volatile cell *ptr, cell old_val, cell new_val)
-               {
-                       return __sync_bool_compare_and_swap(ptr, old_val, new_val);
-               }
-               __attribute__((always_inline))
-               inline static bool cas(volatile fixnum *ptr, fixnum old_val, fixnum new_val)
-               {
-                       return __sync_bool_compare_and_swap(ptr, old_val, new_val);
-               }
+namespace atomic {
+__attribute__((always_inline)) inline static bool cas(volatile cell* ptr,
+                                                      cell old_val,
+                                                      cell new_val) {
+  return __sync_bool_compare_and_swap(ptr, old_val, new_val);
+}
+__attribute__((always_inline)) inline static bool cas(volatile fixnum* ptr,
+                                                      fixnum old_val,
+                                                      fixnum new_val) {
+  return __sync_bool_compare_and_swap(ptr, old_val, new_val);
+}
 
-               __attribute__((always_inline))
-               inline static cell add(volatile cell *ptr, cell val)
-               {
-                       return __sync_add_and_fetch(ptr, val);
-               }
-               __attribute__((always_inline))
-               inline static fixnum add(volatile fixnum *ptr, fixnum val)
-               {
-                       return __sync_add_and_fetch(ptr, val);
-               }
+__attribute__((always_inline)) inline static cell fetch_add(volatile cell* ptr,
+                                                            cell val) {
+  return __sync_fetch_and_add(ptr, val);
+}
+__attribute__((always_inline)) inline static fixnum fetch_add(
+    volatile fixnum* ptr, fixnum val) {
+  return __sync_fetch_and_add(ptr, val);
+}
 
-               __attribute__((always_inline))
-               inline static cell subtract(volatile cell *ptr, cell val)
-               {
-                       return __sync_sub_and_fetch(ptr, val);
-               }
-               __attribute__((always_inline))
-               inline static fixnum subtract(volatile fixnum *ptr, fixnum val)
-               {
-                       return __sync_sub_and_fetch(ptr, val);
-               }
+__attribute__((always_inline)) inline static cell fetch_subtract(
+    volatile cell* ptr, cell val) {
+  return __sync_fetch_and_sub(ptr, val);
+}
+__attribute__((always_inline)) inline static fixnum fetch_subtract(
+    volatile fixnum* ptr, fixnum val) {
+  return __sync_fetch_and_sub(ptr, val);
+}
 
-               __attribute__((always_inline))
-               inline static void fence()
-               {
-                       __sync_synchronize();
-               }
-       }
+__attribute__((always_inline)) inline static void fence() {
+  __sync_synchronize();
+}
 }
+}
+
+#include "atomic.hpp"