diff options
author | Jun He <jun.he@arm.com> | 2021-07-09 16:49:06 +0800 |
---|---|---|
committer | Jun He <jun.he@arm.com> | 2021-08-12 15:45:41 +0800 |
commit | ab9a57280d7d56a76a9e9a2d860fe205eb45221f (patch) | |
tree | 7145e2b23bc135a6facbd77026fb62528729d6ae | |
parent | f2db8f77ce469ce00e33657b981e41a1bd1daf16 (diff) | |
download | snappy-git-ab9a57280d7d56a76a9e9a2d860fe205eb45221f.tar.gz |
Fix SSE3 and BMI2 compile error
After SHUFFLE code blocks are refactored, "tmmintrin.h"
is missed, and bmi2 code part will have build failure
as type conflicts.
Signed-off-by: Jun He <jun.he@arm.com>
Change-Id: I7800cd7e050f4d349e5a227206b14b9c566e547f
-rw-r--r-- | snappy-internal.h | 35 | ||||
-rw-r--r-- | snappy.cc | 21 |
2 files changed, 33 insertions, 23 deletions
diff --git a/snappy-internal.h b/snappy-internal.h index f1aafa9..71d19c0 100644 --- a/snappy-internal.h +++ b/snappy-internal.h @@ -33,13 +33,44 @@ #include "snappy-stubs-internal.h" +#if !defined(SNAPPY_HAVE_BMI2) +// __BMI2__ is defined by GCC and Clang. Visual Studio doesn't target BMI2 +// specifically, but it does define __AVX2__ when AVX2 support is available. +// Fortunately, AVX2 was introduced in Haswell, just like BMI2. +// +// BMI2 is not defined as a subset of AVX2 (unlike SSSE3 and AVX above). So, +// GCC and Clang can build code with AVX2 enabled but BMI2 disabled, in which +// case issuing BMI2 instructions results in a compiler error. +#if defined(__BMI2__) || (defined(_MSC_VER) && defined(__AVX2__)) +#define SNAPPY_HAVE_BMI2 1 +#else +#define SNAPPY_HAVE_BMI2 0 +#endif +#endif // !defined(SNAPPY_HAVE_BMI2) + +#if SNAPPY_HAVE_BMI2 +// Please do not replace with <x86intrin.h>. or with headers that assume more +// advanced SSE versions without checking with all the OWNERS. +#include <immintrin.h> +#endif + +#if SNAPPY_HAVE_SSSE3 +#include <tmmintrin.h> +#endif +#if SNAPPY_HAVE_NEON +#include <arm_neon.h> +#endif + namespace snappy { namespace internal { +#if (SNAPPY_HAVE_SSSE3 || SNAPPY_HAVE_NEON) +#define SNAPPY_HAVE_VECTOR_BYTE_SHUFFLE 1 +#endif #if SNAPPY_HAVE_VECTOR_BYTE_SHUFFLE #if SNAPPY_HAVE_SSSE3 using V128 = __m128i; -#else +#elif SNAPPY_HAVE_NEON using V128 = uint8x16_t; #endif @@ -72,7 +103,7 @@ inline V128 V128_Shuffle(V128 input, V128 shuffle_mask) { inline V128 V128_DupChar(char c) { return _mm_set1_epi8(c); } -#else +#elif SNAPPY_HAVE_NEON inline V128 V128_Load(const V128* src) { return vld1q_u8(reinterpret_cast<const uint8_t*>(src)); } @@ -30,27 +30,6 @@ #include "snappy-sinksource.h" #include "snappy.h" -#if !defined(SNAPPY_HAVE_BMI2) -// __BMI2__ is defined by GCC and Clang. Visual Studio doesn't target BMI2 -// specifically, but it does define __AVX2__ when AVX2 support is available. -// Fortunately, AVX2 was introduced in Haswell, just like BMI2. -// -// BMI2 is not defined as a subset of AVX2 (unlike SSSE3 and AVX above). So, -// GCC and Clang can build code with AVX2 enabled but BMI2 disabled, in which -// case issuing BMI2 instructions results in a compiler error. -#if defined(__BMI2__) || (defined(_MSC_VER) && defined(__AVX2__)) -#define SNAPPY_HAVE_BMI2 1 -#else -#define SNAPPY_HAVE_BMI2 0 -#endif -#endif // !defined(SNAPPY_HAVE_BMI2) - -#if SNAPPY_HAVE_BMI2 -// Please do not replace with <x86intrin.h>. or with headers that assume more -// advanced SSE versions without checking with all the OWNERS. -#include <immintrin.h> -#endif - #include <algorithm> #include <array> #include <cstddef> |