aboutsummaryrefslogtreecommitdiff
path: root/src/liblzma/common/memcmplen.h
diff options
context:
space:
mode:
authorJia Tan <jiat0218@gmail.com>2023-06-28 20:22:38 +0800
committerLasse Collin <lasse.collin@tukaani.org>2023-07-18 14:03:08 +0300
commit64ee0caaea06654b28afaee850fb187a11bf9cb2 (patch)
tree42f5c4e5604ce40d3cfc10cf0c8dc416f5a9a08b /src/liblzma/common/memcmplen.h
parentDocs: Add a new section to INSTALL for Tests. (diff)
downloadxz-64ee0caaea06654b28afaee850fb187a11bf9cb2.tar.xz
liblzma: Prevent warning for MSYS2 Windows build.
In lzma_memcmplen(), the <intrin.h> header file is only included if _MSC_VER and _M_X64 are both defined but _BitScanForward64() was previously used if _M_X64 was defined. GCC for MSYS2 defines _M_X64 but not _MSC_VER so _BitScanForward64() was used without including <intrin.h>. Now, lzma_memcmplen() will use __builtin_ctzll() for MSYS2 GCC builds as expected.
Diffstat (limited to '')
-rw-r--r--src/liblzma/common/memcmplen.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/liblzma/common/memcmplen.h b/src/liblzma/common/memcmplen.h
index db3fff60..4392c1cf 100644
--- a/src/liblzma/common/memcmplen.h
+++ b/src/liblzma/common/memcmplen.h
@@ -69,11 +69,13 @@ lzma_memcmplen(const uint8_t *buf1, const uint8_t *buf2,
while (len < limit) {
const uint64_t x = read64ne(buf1 + len) - read64ne(buf2 + len);
if (x != 0) {
-# if defined(_M_X64) // MSVC or Intel C compiler on Windows
+ // MSVC or Intel C compiler on Windows
+# if defined(_M_X64) && defined(_MSC_VER)
unsigned long tmp;
_BitScanForward64(&tmp, x);
len += (uint32_t)tmp >> 3;
-# else // GCC, clang, or Intel C compiler
+ // GCC, clang, or Intel C compiler
+# else
len += (uint32_t)__builtin_ctzll(x) >> 3;
# endif
return my_min(len, limit);