mirror of https://git.tukaani.org/xz.git
liblzma: Use a single macro to select CLMUL CRC to build
This way it's clearer that two things cannot be selected at the same time.
This commit is contained in:
parent
d8fb098617
commit
20014c2614
|
@ -15,7 +15,7 @@
|
||||||
#include "crc_common.h"
|
#include "crc_common.h"
|
||||||
|
|
||||||
#if defined(CRC_X86_CLMUL)
|
#if defined(CRC_X86_CLMUL)
|
||||||
# define BUILDING_CRC32_CLMUL
|
# define BUILDING_CRC_CLMUL 32
|
||||||
# include "crc_x86_clmul.h"
|
# include "crc_x86_clmul.h"
|
||||||
#elif defined(CRC32_ARM64)
|
#elif defined(CRC32_ARM64)
|
||||||
# include "crc32_arm64.h"
|
# include "crc32_arm64.h"
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include "crc_common.h"
|
#include "crc_common.h"
|
||||||
|
|
||||||
#if defined(CRC_X86_CLMUL)
|
#if defined(CRC_X86_CLMUL)
|
||||||
# define BUILDING_CRC64_CLMUL
|
# define BUILDING_CRC_CLMUL 64
|
||||||
# include "crc_x86_clmul.h"
|
# include "crc_x86_clmul.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -14,10 +14,8 @@
|
||||||
/// (URLs were checked on 2023-10-14).
|
/// (URLs were checked on 2023-10-14).
|
||||||
///
|
///
|
||||||
/// While this file has both CRC32 and CRC64 implementations, only one
|
/// 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
|
/// can be built at a time. The version to build is selected by defining
|
||||||
/// even with compilers with which lzma_always_inline expands to plain inline.
|
/// BUILDING_CRC_CLMUL to 32 or 64 before including this file.
|
||||||
/// The version to build is selected by defining BUILDING_CRC32_CLMUL or
|
|
||||||
/// BUILDING_CRC64_CLMUL before including this file.
|
|
||||||
///
|
///
|
||||||
/// FIXME: Builds for 32-bit x86 use the assembly .S files by default
|
/// FIXME: Builds for 32-bit x86 use the assembly .S files by default
|
||||||
/// unless configured with --disable-assembler. Even then the lookup table
|
/// unless configured with --disable-assembler. Even then the lookup table
|
||||||
|
@ -37,6 +35,10 @@
|
||||||
#endif
|
#endif
|
||||||
#define LZMA_CRC_X86_CLMUL_H
|
#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>
|
#include <immintrin.h>
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
#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 //
|
// x86 CLMUL CRC32 //
|
||||||
/////////////////////
|
/////////////////////
|
||||||
|
|
||||||
#ifdef BUILDING_CRC32_CLMUL
|
#if BUILDING_CRC_CLMUL == 32
|
||||||
|
|
||||||
crc_attr_target
|
crc_attr_target
|
||||||
static uint32_t
|
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);
|
v0 = _mm_xor_si128(v0, v1);
|
||||||
return ~(uint32_t)_mm_extract_epi32(v0, 2);
|
return ~(uint32_t)_mm_extract_epi32(v0, 2);
|
||||||
}
|
}
|
||||||
#endif // BUILDING_CRC32_CLMUL
|
#endif // BUILDING_CRC_CLMUL == 32
|
||||||
|
|
||||||
|
|
||||||
/////////////////////
|
/////////////////////
|
||||||
// x86 CLMUL CRC64 //
|
// 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
|
// MSVC (VS2015 - VS2022) produces bad 32-bit x86 code from the CLMUL CRC
|
||||||
// code when optimizations are enabled (release build). According to the bug
|
// 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)
|
# pragma optimize("", on)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // BUILDING_CRC64_CLMUL
|
#endif // BUILDING_CRC_CLMUL == 64
|
||||||
|
|
||||||
|
|
||||||
// Inlining this function duplicates the function body in crc32_resolve() and
|
// Inlining this function duplicates the function body in crc32_resolve() and
|
||||||
|
|
Loading…
Reference in New Issue