Skip to content

Commit

Permalink
liblzma: Use a single macro to select CLMUL CRC to build
Browse files Browse the repository at this point in the history
This way it's clearer that two things cannot be selected
at the same time.
  • Loading branch information
Larhzu committed Jun 11, 2024
1 parent d3bc9c9 commit 0ed3a72
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 18 deletions.
4 changes: 2 additions & 2 deletions src/liblzma/check/crc32_fast.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
#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(CRC_E2K_CLMUL)
# define BUILDING_CRC32_CLMUL
# define BUILDING_CRC_CLMUL 32
# include "crc_e2k_clmul.h"
#elif defined(CRC32_ARM64)
# include "crc32_arm64.h"
Expand Down
4 changes: 2 additions & 2 deletions src/liblzma/check/crc64_fast.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
#include "crc_common.h"

#if defined(CRC_X86_CLMUL)
# define BUILDING_CRC64_CLMUL
# define BUILDING_CRC_CLMUL 64
# include "crc_x86_clmul.h"
#elif defined(CRC_E2K_CLMUL)
# define BUILDING_CRC64_CLMUL
# define BUILDING_CRC_CLMUL 64
# include "crc_e2k_clmul.h"
#endif

Expand Down
14 changes: 8 additions & 6 deletions src/liblzma/check/crc_e2k_clmul.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,8 @@
/// (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.
//
// Authors: Ilya Kurdyukov
// Hans Jansen
Expand All @@ -32,6 +30,10 @@
#endif
#define LZMA_CRC_E2K_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>


Expand Down Expand Up @@ -182,7 +184,7 @@ crc_simd_body(const uint8_t *buf, const size_t size, __m128i *v0, __m128i *v1,
}


#ifdef BUILDING_CRC32_CLMUL
#if BUILDING_CRC_CLMUL == 32
static uint32_t
crc32_arch_optimized(const uint8_t *buf, size_t size, uint32_t crc)
{
Expand Down Expand Up @@ -211,7 +213,7 @@ crc32_arch_optimized(const uint8_t *buf, size_t size, uint32_t crc)
#endif


#ifdef BUILDING_CRC64_CLMUL
#if BUILDING_CRC_CLMUL == 64
static uint64_t
crc64_arch_optimized(const uint8_t *buf, size_t size, uint64_t crc)
{
Expand Down
18 changes: 10 additions & 8 deletions src/liblzma/check/crc_x86_clmul.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,8 @@
/// (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
Expand All @@ -37,6 +35,10 @@
#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)
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 0ed3a72

Please sign in to comment.