Index: libcfa/src/bits/defs.hfa
===================================================================
--- libcfa/src/bits/defs.hfa	(revision c84b4be20d06963eb1b538cfb902b7ba61e4644d)
+++ libcfa/src/bits/defs.hfa	(revision dca580212e17dd47149961ae07496513513fa920)
@@ -56,5 +56,38 @@
 // #define __CFA_NO_BIT_TEST_AND_SET__
 
-static inline bool bts(volatile unsigned long long int * target, unsigned long long int bit ) {
+#if defined( __i386 )
+static inline bool __atomic_bts(volatile unsigned long int * target, unsigned long int bit ) {
+	#if defined(__CFA_NO_BIT_TEST_AND_SET__)
+        unsigned long int mask = 1ul << bit;
+        unsigned long int ret = __atomic_fetch_or(target, mask, (int)__ATOMIC_RELAXED);
+        return (ret & mask) != 0;
+    #else
+        int result = 0;
+        asm volatile(
+            "LOCK btsl %[bit], %[target]\n\t"
+            : "=@ccc" (result)
+            : [target] "m" (*target), [bit] "r" (bit)
+        );
+        return result != 0;
+    #endif
+}
+
+static inline bool __atomic_btr(volatile unsigned long int * target, unsigned long int bit ) {
+	#if defined(__CFA_NO_BIT_TEST_AND_SET__)
+        unsigned long int mask = 1ul << bit;
+        unsigned long int ret = __atomic_fetch_and(target, ~mask, (int)__ATOMIC_RELAXED);
+        return (ret & mask) != 0;
+	#else
+        int result = 0;
+        asm volatile(
+            "LOCK btrl %[bit], %[target]\n\t"
+            :"=@ccc" (result)
+            : [target] "m" (*target), [bit] "r" (bit)
+        );
+        return result != 0;
+    #endif
+}
+#elif defined( __x86_64 )
+static inline bool __atomic_bts(volatile unsigned long long int * target, unsigned long long int bit ) {
 	#if defined(__CFA_NO_BIT_TEST_AND_SET__)
         unsigned long long int mask = 1ul << bit;
@@ -72,5 +105,5 @@
 }
 
-static inline bool btr(volatile unsigned long long int * target, unsigned long long int bit ) {
+static inline bool __atomic_btr(volatile unsigned long long int * target, unsigned long long int bit ) {
 	#if defined(__CFA_NO_BIT_TEST_AND_SET__)
         unsigned long long int mask = 1ul << bit;
@@ -87,2 +120,7 @@
     #endif
 }
+#elif defined( __ARM_ARCH )
+    #error __atomic_bts and __atomic_btr not implemented for arm
+#else
+	#error uknown hardware architecture
+#endif
