]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
liblzma: Use a single macro to select CLMUL CRC to build
authorLasse Collin <lasse.collin@tukaani.org>
Tue, 11 Jun 2024 09:47:59 +0000 (12:47 +0300)
committerLasse Collin <lasse.collin@tukaani.org>
Sun, 16 Jun 2024 09:59:17 +0000 (12:59 +0300)
This way it's clearer that two things cannot be selected
at the same time.

src/liblzma/check/crc32_fast.c
src/liblzma/check/crc64_fast.c
src/liblzma/check/crc_x86_clmul.h

index f492cdff0fde73a284a2b31641dbc869c3755ead..094fe196a0c9b4954d4abe0a5dbbd4c0f19d22c6 100644 (file)
@@ -15,7 +15,7 @@
 #include "crc_common.h"
 
 #if defined(CRC_X86_CLMUL)
-#      define BUILDING_CRC32_CLMUL
+#      define BUILDING_CRC_CLMUL 32
 #      include "crc_x86_clmul.h"
 #elif defined(CRC32_ARM64)
 #      include "crc32_arm64.h"
index 43f3f3adbfc22a9d727f32faec43d07156256cce..e5d162a01a822ef5dcbac03d1c9d60e4474d8728 100644 (file)
@@ -14,7 +14,7 @@
 #include "crc_common.h"
 
 #if defined(CRC_X86_CLMUL)
-#      define BUILDING_CRC64_CLMUL
+#      define BUILDING_CRC_CLMUL 64
 #      include "crc_x86_clmul.h"
 #endif
 
index 6ff104f34a8799463aa0d180f78a51e14825ae13..8a1e3903ebd9efb55d7a6474895a8a06596ff102 100644 (file)
 /// (URLs were checked on 2023-10-14).
 ///
 /// While this file has both CRC32 and CRC64 implementations, only one
-/// should be built at a time to ensure that crc_simd_body() is inlined
-/// even with compilers with which lzma_always_inline expands to plain inline.
-/// The version to build is selected by defining BUILDING_CRC32_CLMUL or
-/// BUILDING_CRC64_CLMUL before including this file.
+/// can be built at a time. The version to build is selected by defining
+/// BUILDING_CRC_CLMUL to 32 or 64 before including this file.
 ///
 /// FIXME: Builds for 32-bit x86 use the assembly .S files by default
 /// unless configured with --disable-assembler. Even then the lookup table
 #endif
 #define LZMA_CRC_X86_CLMUL_H
 
+#if BUILDING_CRC_CLMUL != 32 && BUILDING_CRC_CLMUL != 64
+#      error BUILDING_CRC_CLMUL is undefined or has an invalid value
+#endif
+
 #include <immintrin.h>
 
 #if defined(_MSC_VER)
@@ -211,7 +213,7 @@ crc_simd_body(const uint8_t *buf, const size_t size, __m128i *v0, __m128i *v1,
 // x86 CLMUL CRC32 //
 /////////////////////
 
-#ifdef BUILDING_CRC32_CLMUL
+#if BUILDING_CRC_CLMUL == 32
 
 crc_attr_target
 static uint32_t
@@ -239,14 +241,14 @@ crc32_arch_optimized(const uint8_t *buf, size_t size, uint32_t crc)
        v0 = _mm_xor_si128(v0, v1);
        return ~(uint32_t)_mm_extract_epi32(v0, 2);
 }
-#endif // BUILDING_CRC32_CLMUL
+#endif // BUILDING_CRC_CLMUL == 32
 
 
 /////////////////////
 // x86 CLMUL CRC64 //
 /////////////////////
 
-#ifdef BUILDING_CRC64_CLMUL
+#if BUILDING_CRC_CLMUL == 64
 
 // MSVC (VS2015 - VS2022) produces bad 32-bit x86 code from the CLMUL CRC
 // code when optimizations are enabled (release build). According to the bug
@@ -309,7 +311,7 @@ crc64_arch_optimized(const uint8_t *buf, size_t size, uint64_t crc)
 #      pragma optimize("", on)
 #endif
 
-#endif // BUILDING_CRC64_CLMUL
+#endif // BUILDING_CRC_CLMUL == 64
 
 
 // Inlining this function duplicates the function body in crc32_resolve() and