]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
cmake: Test for 16-byte atomic support on IBM Z
authorUlrich Weigand <ulrich.weigand@de.ibm.com>
Sun, 29 Sep 2019 14:22:52 +0000 (16:22 +0200)
committerUlrich Weigand <ulrich.weigand@de.ibm.com>
Sun, 29 Sep 2019 14:22:52 +0000 (16:22 +0200)
On IBM Z the Boost tagged pointer implementation cannot use
"pointer compression" as there are no unused bits in an address;
the whole 64-bit address space is available to user space code.

Instead, Boost uses 16-byte atomics.  This is always supported
on IBM Z, but depending on the particular compiler (version)
it may require linking against libatomic.  The existing checks
in CheckCxxAtomic.cmake do not catch this, however, as they only
test for (up to) 8-byte atomic support.

Fixed by adding a test for 16-byte atomic support on IBM Z.

Signed-off-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
cmake/modules/CheckCxxAtomic.cmake

index 074e4db891a23186ec4821e197bfa0adeaf062df..68efa15314b9d9d3d27dead99b314b1f2fe49c51 100644 (file)
@@ -15,7 +15,13 @@ int main() {
   std::atomic<uint16_t> w2;
   std::atomic<uint32_t> w4;
   std::atomic<uint64_t> w8;
-  return w1 + w2 + w4 + w8;
+#ifdef __s390x__
+  // Boost needs 16-byte atomics for tagged pointers.
+  std::atomic<unsigned __int128> w16;
+#else
+  #define w16 0
+#endif
+  return w1 + w2 + w4 + w8 + w16;
 }
 " ${var})
 endfunction(check_cxx_atomics)