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.
This commit is contained in:
Jia Tan 2023-06-28 20:22:38 +08:00
parent 45e250a9e9
commit e3356a204c
1 changed files with 4 additions and 2 deletions

View File

@ -69,11 +69,13 @@ lzma_memcmplen(const uint8_t *buf1, const uint8_t *buf2,
while (len < limit) { while (len < limit) {
const uint64_t x = read64ne(buf1 + len) - read64ne(buf2 + len); const uint64_t x = read64ne(buf1 + len) - read64ne(buf2 + len);
if (x != 0) { 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; unsigned long tmp;
_BitScanForward64(&tmp, x); _BitScanForward64(&tmp, x);
len += (uint32_t)tmp >> 3; 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; len += (uint32_t)__builtin_ctzll(x) >> 3;
# endif # endif
return my_min(len, limit); return my_min(len, limit);