From: khizmax Date: Mon, 19 Sep 2016 19:09:45 +0000 (+0300) Subject: gcc-4.8 does not supported std::atomic for 128-bit types X-Git-Tag: v2.2.0~126 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=libcds.git;a=commitdiff_plain;h=498ddefc0af22f069d38a993373eed2a297a6c86 gcc-4.8 does not supported std::atomic for 128-bit types --- diff --git a/cds/compiler/gcc/defs.h b/cds/compiler/gcc/defs.h index e2c3b764..99d8589c 100644 --- a/cds/compiler/gcc/defs.h +++ b/cds/compiler/gcc/defs.h @@ -104,7 +104,8 @@ // double-width CAS support #if CDS_BUILD_BITS == 64 -# ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 + // gcc-4.8 does not support 16-word (128bit) atomics +# if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 ) && CDS_COMPILER_VERSION >= 40900 # define CDS_DCAS_SUPPORT # endif #else diff --git a/test/stress/freelist/put_get.cpp b/test/stress/freelist/put_get.cpp index 08593617..15173a9b 100644 --- a/test/stress/freelist/put_get.cpp +++ b/test/stress/freelist/put_get.cpp @@ -164,6 +164,7 @@ namespace { typedef cds::intrusive::CachedFreeList cached_free_list; CDSSTRESS_FREELIST_F( CachedFreeList, cached_free_list ) +#ifdef CDS_DCAS_SUPPORT TEST_F( put_get, TaggetFreeList ) { struct tagged_ptr { @@ -179,5 +180,6 @@ namespace { else std::cout << "Double-width CAS is not supported\n"; } +#endif } // namespace diff --git a/test/stress/freelist/put_get_single.cpp b/test/stress/freelist/put_get_single.cpp index c7d33358..7775378e 100644 --- a/test/stress/freelist/put_get_single.cpp +++ b/test/stress/freelist/put_get_single.cpp @@ -144,6 +144,7 @@ namespace { typedef cds::intrusive::CachedFreeList cached_free_list; CDSSTRESS_FREELIST_F( CachedFreeList, cached_free_list ) +#ifdef CDS_DCAS_SUPPORT TEST_F( put_get_single, TaggetFreeList ) { struct tagged_ptr { @@ -159,5 +160,6 @@ namespace { else std::cout << "Double-width CAS is not supported\n"; } +#endif } // namespace