Cleanup: remove leftover manual pthread detection
[urcu.git] / urcu / arch / ppc.h
index 95393ea0be0ee89b888c64ad53322e41e30631c8..791529ebb1a08ff3db124103474522b77bf0ad15 100644 (file)
 
 #include <urcu/compiler.h>
 #include <urcu/config.h>
+#include <urcu/syscall-compat.h>
+#include <stdint.h>
 
 #ifdef __cplusplus
 extern "C" {
-#endif 
+#endif
 
 /* Include size of POWER5+ L3 cache lines: 256 bytes */
 #define CAA_CACHE_LINE_SIZE    256
@@ -58,6 +60,7 @@ extern "C" {
 #define cmm_smp_wmb()    __asm__ __volatile__ (LWSYNC_OPCODE:::"memory")
 
 #define mftbl()                                                \
+       __extension__                                   \
        ({                                              \
                unsigned long rval;                     \
                __asm__ __volatile__ ("mftbl %0" : "=r" (rval));        \
@@ -65,6 +68,7 @@ extern "C" {
        })
 
 #define mftbu()                                                \
+       __extension__                                   \
        ({                                              \
                unsigned long rval;                     \
                __asm__ __volatile__ ("mftbu %0" : "=r" (rval));        \
@@ -72,21 +76,24 @@ extern "C" {
        })
 
 #define mftb()                                         \
+       __extension__                                   \
        ({                                              \
                unsigned long long rval;                \
                __asm__ __volatile__ ("mftb %0" : "=r" (rval));         \
                rval;                                   \
        })
 
-typedef unsigned long long cycles_t;
+#define HAS_CAA_GET_CYCLES
+
+typedef uint64_t caa_cycles_t;
 
 #ifdef __powerpc64__
-static inline cycles_t caa_get_cycles(void)
+static inline caa_cycles_t caa_get_cycles(void)
 {
-       return (cycles_t) mftb();
+       return (caa_cycles_t) mftb();
 }
 #else
-static inline cycles_t caa_get_cycles(void)
+static inline caa_cycles_t caa_get_cycles(void)
 {
        unsigned long h, l;
 
@@ -96,12 +103,20 @@ static inline cycles_t caa_get_cycles(void)
                l = mftbl();
                cmm_barrier();
                if (mftbu() == h)
-                       return (((cycles_t) h) << 32) + l;
+                       return (((caa_cycles_t) h) << 32) + l;
        }
 }
 #endif
 
-#ifdef __cplusplus 
+/*
+ * On Linux, define the membarrier system call number if not yet available in
+ * the system headers.
+ */
+#if (defined(__linux__) && !defined(__NR_membarrier))
+#define __NR_membarrier                365
+#endif
+
+#ifdef __cplusplus
 }
 #endif
 
This page took 0.029626 seconds and 4 git commands to generate.