From 9450876a9df0abe967dd6f0751785b2e4e5981fc Mon Sep 17 00:00:00 2001 From: Nick Terrell Date: Tue, 21 Sep 2021 16:36:33 -0700 Subject: [PATCH] [huf] Fix compilation when DYNAMIC_BMI2=0 && BMI2 is supported * Fix compilation issues pointed out in PR #2790. * Add test cases to GitHub actions that test all combinations of `DYNAMIC_BMI2` BMI2 support. --- .github/workflows/dev-short-tests.yml | 12 ++++++++++++ lib/decompress/huf_decompress.c | 20 ++++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dev-short-tests.yml b/.github/workflows/dev-short-tests.yml index 5d7e54b51..056f5cbf1 100644 --- a/.github/workflows/dev-short-tests.yml +++ b/.github/workflows/dev-short-tests.yml @@ -200,6 +200,18 @@ jobs: make clean && make -j all MOREFLAGS="-Werror -DZSTD_NO_INLINE -DZSTD_STRIP_ERROR_STRINGS" make clean && make check MOREFLAGS="-Werror -DZSTD_NO_INLINE -DZSTD_STRIP_ERROR_STRINGS" + dynamic-bmi2: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: dynamic bmi2 tests + run: | + make clean && make -j check MOREFLAGS="-O0 -Werror -mbmi2" + make clean && make -j check MOREFLAGS="-O0 -Werror -DDYNAMIC_BMI2=1" + make clean && make -j check MOREFLAGS="-O0 -Werror -DDYNAMIC_BMI2=1 -mbmi2" + make clean && make -j check MOREFLAGS="-O0 -Werror -DDYNAMIC_BMI2=0" + make clean && make -j check MOREFLAGS="-O0 -Werror -DDYNAMIC_BMI2=0 -mbmi2" + test-variants: runs-on: ubuntu-latest steps: diff --git a/lib/decompress/huf_decompress.c b/lib/decompress/huf_decompress.c index 1dfa4b801..2efca7dd5 100644 --- a/lib/decompress/huf_decompress.c +++ b/lib/decompress/huf_decompress.c @@ -78,6 +78,18 @@ #endif #define HUF_ASM_DECL HUF_EXTERN_C +#if DYNAMIC_BMI2 || (HUF_ENABLE_ASM_X86_64_BMI2 && defined(__BMI2__)) +# define HUF_NEED_BMI2_FUNCTION 1 +#else +# define HUF_NEED_BMI2_FUNCTION 0 +#endif + +#if !(HUF_ENABLE_ASM_X86_64_BMI2 && defined(__BMI2__)) +# define HUF_NEED_DEFAULT_FUNCTION 1 +#else +# define HUF_NEED_DEFAULT_FUNCTION 0 +#endif + /* ************************************************************** * Error Management ****************************************************************/ @@ -653,7 +665,7 @@ HUF_decompress4X1_usingDTable_internal_body( } } -#if DYNAMIC_BMI2 +#if HUF_NEED_BMI2_FUNCTION static TARGET_ATTRIBUTE("bmi2") size_t HUF_decompress4X1_usingDTable_internal_bmi2(void* dst, size_t dstSize, void const* cSrc, size_t cSrcSize, HUF_DTable const* DTable) { @@ -661,11 +673,13 @@ size_t HUF_decompress4X1_usingDTable_internal_bmi2(void* dst, size_t dstSize, vo } #endif +#if HUF_NEED_DEFAULT_FUNCTION static size_t HUF_decompress4X1_usingDTable_internal_default(void* dst, size_t dstSize, void const* cSrc, size_t cSrcSize, HUF_DTable const* DTable) { return HUF_decompress4X1_usingDTable_internal_body(dst, dstSize, cSrc, cSrcSize, DTable); } +#endif #if HUF_ENABLE_ASM_X86_64_BMI2 @@ -1365,7 +1379,7 @@ HUF_decompress4X2_usingDTable_internal_body( } } -#if DYNAMIC_BMI2 +#if HUF_NEED_BMI2_FUNCTION static TARGET_ATTRIBUTE("bmi2") size_t HUF_decompress4X2_usingDTable_internal_bmi2(void* dst, size_t dstSize, void const* cSrc, size_t cSrcSize, HUF_DTable const* DTable) { @@ -1373,11 +1387,13 @@ size_t HUF_decompress4X2_usingDTable_internal_bmi2(void* dst, size_t dstSize, vo } #endif +#if HUF_NEED_DEFAULT_FUNCTION static size_t HUF_decompress4X2_usingDTable_internal_default(void* dst, size_t dstSize, void const* cSrc, size_t cSrcSize, HUF_DTable const* DTable) { return HUF_decompress4X2_usingDTable_internal_body(dst, dstSize, cSrc, cSrcSize, DTable); } +#endif #if HUF_ENABLE_ASM_X86_64_BMI2 -- 2.47.2