summaryrefslogtreecommitdiffstats
path: root/lib/lz4.c
diff options
context:
space:
mode:
authorZeyi (Rice) Fan <zeyi@fb.com>2021-08-06 17:38:43 (GMT)
committerZeyi (Rice) Fan <zeyi@fb.com>2021-08-09 18:30:02 (GMT)
commit1a2e8f4e3077cdafbaf15278bfe393c64263215c (patch)
tree60a489083908abaca6842b165485b2112185ca17 /lib/lz4.c
parentaeac6227d20f485adde5874fb37d2d3be94d8c10 (diff)
downloadlz4-1a2e8f4e3077cdafbaf15278bfe393c64263215c.zip
lz4-1a2e8f4e3077cdafbaf15278bfe393c64263215c.tar.gz
lz4-1a2e8f4e3077cdafbaf15278bfe393c64263215c.tar.bz2
fix clang-cl _tzcnt_u64 not defined issue
Diffstat (limited to 'lib/lz4.c')
-rw-r--r--lib/lz4.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/lz4.c b/lib/lz4.c
index 405e977..5499547 100644
--- a/lib/lz4.c
+++ b/lib/lz4.c
@@ -516,8 +516,14 @@ static unsigned LZ4_NbCommonBytes (reg_t val)
if (LZ4_isLittleEndian()) {
if (sizeof(val) == 8) {
# if defined(_MSC_VER) && (_MSC_VER >= 1800) && defined(_M_AMD64) && !defined(LZ4_FORCE_SW_BITCOUNT)
+# if defined(__clang__) && (__clang_major__ < 10)
+ /* Avoid undefined clang-cl intrinics issue.
+ * See https://github.com/lz4/lz4/pull/1017 for details. */
+ return (unsigned)__builtin_ia32_tzcnt_u64(val) >> 3;
+# else
/* x64 CPUS without BMI support interpret `TZCNT` as `REP BSF` */
return (unsigned)_tzcnt_u64(val) >> 3;
+# endif
# elif defined(_MSC_VER) && defined(_WIN64) && !defined(LZ4_FORCE_SW_BITCOUNT)
unsigned long r = 0;
_BitScanForward64(&r, (U64)val);