X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=include%2Furcu%2Farch.h;h=d3914da27d41e9caf5158b2351ccc78b4b4b8ee8;hb=5ee141704eaf9f77795fd573873d4bea5f136c71;hp=620743c0f68fb33dd004d3266bcf900e2a96b898;hpb=9260f372503da28b709498280ebca39f4331d1e1;p=userspace-rcu.git diff --git a/include/urcu/arch.h b/include/urcu/arch.h index 620743c..d3914da 100644 --- a/include/urcu/arch.h +++ b/include/urcu/arch.h @@ -64,15 +64,25 @@ #define URCU_ARCH_AMD64 1 #include -#elif (defined(__i486__) || defined(__i586__) || defined(__i686__)) - -#define URCU_ARCH_X86 1 -#include - #elif (defined(__i386__) || defined(__i386)) #define URCU_ARCH_X86 1 + +/* + * URCU_ARCH_X86_NO_CAS enables a compat layer that will detect the presence of + * the cmpxchg instructions at runtime and provide a compat mode based on a + * pthread mutex when it isn't. + * + * __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 was introduced in GCC 4.3 and Clang 3.3, + * building with older compilers will result in the compat layer always being + * used on x86-32. + */ +#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 +#define URCU_ARCH_X86_NO_CAS 1 +/* For backwards compat */ #define URCU_ARCH_I386 1 +#endif + #include #elif (defined(__powerpc64__) || defined(__ppc64__))