Skip to content

Commit

Permalink
don't use the clmul version on old msvc.
Browse files Browse the repository at this point in the history
  • Loading branch information
JonathanHenson committed Jan 23, 2024
1 parent 0cda5eb commit 73330e1
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 10 deletions.
3 changes: 2 additions & 1 deletion include/aws/checksums/private/crc64_priv.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ AWS_EXTERN_C_BEGIN

AWS_CHECKSUMS_API uint64_t aws_checksums_crc64xz_sw(const uint8_t *input, int length, uint64_t prev_crc64);

#if INTPTR_MAX == INT64_MAX && defined(AWS_HAVE_CLMUL)
#if INTPTR_MAX == INT64_MAX && defined(AWS_HAVE_CLMUL) && \
!(defined(_MSC_VER) && _MSC_VER < 1920)
uint64_t aws_checksums_crc64xz_intel_clmul(const uint8_t *input, int length, uint64_t previousCrc64);
#endif /* dINTPTR_MAX == INT64_MAX && defined(AWS_HAVE_CLMUL) */

Expand Down
3 changes: 2 additions & 1 deletion source/crc64.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,8 @@ static uint64_t (*s_crc64xz_fn_ptr)(const uint8_t *input, int length, uint64_t p
uint64_t aws_checksums_crc64xz(const uint8_t *input, int length, uint64_t previousCrc64) {

if (AWS_UNLIKELY(!s_crc64xz_fn_ptr)) {
#if INTPTR_MAX == INT64_MAX && defined(AWS_HAVE_CLMUL)
#if INTPTR_MAX == INT64_MAX && defined(AWS_HAVE_CLMUL) && \
!(defined(_MSC_VER) && _MSC_VER < 1920)
if (aws_cpu_has_feature(AWS_CPU_FEATURE_AVX512) && aws_cpu_has_feature(AWS_CPU_FEATURE_CLMUL) &&
aws_cpu_has_feature(AWS_CPU_FEATURE_VPCLMULQDQ)) {
s_crc64xz_fn_ptr = aws_checksums_crc64xz_intel_clmul;
Expand Down
11 changes: 3 additions & 8 deletions source/intel/intrin/crc64xz_clmul.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@

#include <aws/checksums/private/crc64_priv.h>

#if defined(AWS_HAVE_CLMUL) && INTPTR_MAX == INT64_MAX
// msvc compilers older than 2019 are missing some intrinsics. Gate those off.
#if defined(AWS_HAVE_CLMUL) && INTPTR_MAX == INT64_MAX && \
!(defined(_MSC_VER) && _MSC_VER < 1920)

# include <emmintrin.h>
# include <immintrin.h>
Expand All @@ -24,13 +26,6 @@
# define cmull_xmm_lo(xmm1, xmm2) _mm_clmulepi64_si128((xmm1), (xmm2), 0x00)
# define cmull_xmm_pair(xmm1, xmm2) _mm_xor_si128(cmull_xmm_hi((xmm1), (xmm2)), cmull_xmm_lo((xmm1), (xmm2)))

/* if older than visual studio 2019 RTW (16.0) */
# if defined(_MSC_VER) && _MSC_VER < 1920
static inline __m128i _mm_bsrli_si128(__m128i a, int count) {
return a >> count;
}
# endif /* #defined(_MSC_VER) && _MSC_VER < 1920 */

uint64_t aws_checksums_crc64xz_intel_clmul(const uint8_t *input, int length, const uint64_t previousCrc64) {
if (!input || length <= 0) {
return previousCrc64;
Expand Down

0 comments on commit 73330e1

Please sign in to comment.