From 7ec1fc0e0e27ed56c1d18d33af9711a17e9ec750 Mon Sep 17 00:00:00 2001 From: Darren Mo Date: Sat, 16 Aug 2014 17:32:54 -0700 Subject: [PATCH] Clang Love Summary: Added support for clang in Checksum.cpp preprocessor statements. Test Plan: The right code path is chosen using both gcc and clang now. Reviewed By: brianp@fb.com Subscribers: mathieubaudet, sroy, satadru FB internal diff: D1502289 --- folly/Checksum.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/folly/Checksum.cpp b/folly/Checksum.cpp index 3882a6e8..881fc7d2 100644 --- a/folly/Checksum.cpp +++ b/folly/Checksum.cpp @@ -24,8 +24,14 @@ namespace folly { namespace detail { -#if FOLLY_X64 && defined(__GNUC__) && defined(__GNUC_MINOR__) && \ - (((__GNUC__ * 100) + __GNUC_MINOR__) >= 407) +#ifndef __has_builtin + #define __has_builtin(x) 0 +#endif + +#if (__has_builtin(__builtin_ia32_crc32qi) && \ + __has_builtin(__builtin_ia32_crc32di)) || \ + (FOLLY_X64 && defined(__GNUC__) && defined(__GNUC_MINOR__) && \ + (((__GNUC__ * 100) + __GNUC_MINOR__) >= 407)) // Fast SIMD implementation of CRC-32C for x86 with SSE 4.2 uint32_t crc32c_hw(const uint8_t *data, size_t nbytes, -- 2.34.1