mirror of
https://git.tukaani.org/xz.git
synced 2025-04-15 04:00:50 +00:00
liblzma: Disable CLMUL CRC on old MSVC targeting 32-bit x86
On GitHub runners, VS 2019 16.11 (MSVC 19.29.30158) results in test failures. VS 2022 17.13 (MSVC 19.43.34808) works. In xz 5.6.x there was a #pragma-based workaround for MSVC builds for 32-bit x86. Another method was thought to work with the new rewritten CLMUL CRC. Apparently it doesn't. Keep it simple and disable CLMUL CRC with any non-recent MSVC when building for 32-bit x86. Fixes: 54eaea5ea49b ("liblzma: x86 CLMUL CRC: Rewrite") Fixes: https://github.com/tukaani-project/xz/issues/171 Reported-by: Andrew Murray
This commit is contained in:
parent
c5fd88dfc3
commit
b5a5d9e3f7
@ -134,10 +134,20 @@ extern const uint64_t lzma_crc64_table[4][256];
|
|||||||
// built and runtime detection is used even if compiler flags
|
// built and runtime detection is used even if compiler flags
|
||||||
// were set to allow CLMUL unconditionally.
|
// were set to allow CLMUL unconditionally.
|
||||||
//
|
//
|
||||||
// - This doesn't work with MSVC as I don't know how to detect
|
// - The unconditional use doesn't work with MSVC as I don't know
|
||||||
// the features here.
|
// how to detect the features here.
|
||||||
//
|
//
|
||||||
# if (defined(__SSSE3__) && defined(__SSE4_1__) && defined(__PCLMUL__) \
|
// Don't enable CLMUL at all on old MSVC that targets 32-bit x86.
|
||||||
|
// There seems to be a compiler bug that produces broken code
|
||||||
|
// in optimized (Release) builds. It results in crashing tests.
|
||||||
|
// It is known that VS 2019 16.11 (MSVC 19.29.30158) is broken
|
||||||
|
// and that VS 2022 17.13 (MSVC 19.43.34808) works.
|
||||||
|
# if defined(_MSC_FULL_VER) && _MSC_FULL_VER < 194334808 \
|
||||||
|
&& !defined(__INTEL_COMPILER) && !defined(__clang__) \
|
||||||
|
&& defined(_M_IX86)
|
||||||
|
// Old MSVC targeting 32-bit x86: Don't enable CLMUL at all.
|
||||||
|
# elif (defined(__SSSE3__) && defined(__SSE4_1__) \
|
||||||
|
&& defined(__PCLMUL__) \
|
||||||
&& !defined(HAVE_CRC_X86_ASM)) \
|
&& !defined(HAVE_CRC_X86_ASM)) \
|
||||||
|| (defined(__e2k__) && __iset__ >= 6)
|
|| (defined(__e2k__) && __iset__ >= 6)
|
||||||
# define CRC32_ARCH_OPTIMIZED 1
|
# define CRC32_ARCH_OPTIMIZED 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user