diff --git a/config.compat b/config.compat index 4e7271a4..040701a5 100644 --- a/config.compat +++ b/config.compat @@ -510,6 +510,13 @@ NAMESPACE_END #define CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE 0 #endif +// AVX2 in MSC 18.00 +#if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_AVX) && (((_MSC_VER >= 1600) && !defined(_M_ARM)) || (defined(__RDRND__) || defined(__RDSEED__) || defined(__AVX__))) + #define CRYPTOPP_BOOL_AVX_AVAILABLE 1 +#else + #define CRYPTOPP_BOOL_AVX_AVAILABLE 0 +#endif + // Requires ARMv7 and ACLE 1.0. Testing shows ARMv7 is really ARMv7a under most toolchains. #if !defined(CRYPTOPP_BOOL_NEON_INTRINSICS_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) # if defined(__ARM_NEON__) || defined(__ARM_NEON) || defined(_M_ARM) diff --git a/config.h b/config.h index f0d43680..d73e2372 100644 --- a/config.h +++ b/config.h @@ -510,6 +510,13 @@ NAMESPACE_END #define CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE 0 #endif +// AVX2 in MSC 18.00 +#if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_AVX) && (((_MSC_VER >= 1600) && !defined(_M_ARM)) || (defined(__RDRND__) || defined(__RDSEED__) || defined(__AVX__))) + #define CRYPTOPP_BOOL_AVX_AVAILABLE 1 +#else + #define CRYPTOPP_BOOL_AVX_AVAILABLE 0 +#endif + // Requires ARMv7 and ACLE 1.0. Testing shows ARMv7 is really ARMv7a under most toolchains. #if !defined(CRYPTOPP_BOOL_NEON_INTRINSICS_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) # if defined(__ARM_NEON__) || defined(__ARM_NEON) || defined(_M_ARM) diff --git a/cpu.h b/cpu.h index 8d5b931a..6cef77bf 100644 --- a/cpu.h +++ b/cpu.h @@ -29,31 +29,30 @@ #if (CRYPTOPP_GCC_VERSION >= 40800) # include #endif +#if (CRYPTOPP_MSC_VERSION >= 1400) +# include +#endif // Baseline include #if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE || CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE # include // __m64, __m128i, _mm_set_epi64x #endif - -// PUSHFB needs Clang 3.3 and Apple Clang 5.0. -// #if (defined(__SSE3__) || defined(__SSSE3__)) || defined(__INTEL_COMPILER) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 50000) #if CRYPTOPP_BOOL_SSSE3_ASM_AVAILABLE # include // _mm_shuffle_pi8, _mm_shuffle_epi8 #endif // tmmintrin.h - -// PEXTRD needs Clang 3.3 and Apple Clang 5.0. -// #if (defined(__SSE4_1__) || defined(__SSE4_1__)) || defined(__INTEL_COMPILER) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 50000) #if CRYPTOPP_BOOL_SSE4_INTRINSICS_AVAILABLE # include // _mm_blend_epi16 # include // _mm_crc32_u{8|16|32} #endif // smmintrin.h - -// AES and CLMUL need Clang 2.8 and Apple Clang 4.6. CLMUL needs Clang 3.4 and Apple Clang 6.0 -// #if (defined(__AES__) || defined(__PCLMUL__)) || defined(__INTEL_COMPILER) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30400) || (CRYPTOPP_APPLE_CLANG_VERSION >= 60000) #if CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE -# include +# include // aesenc, aesdec, etc #endif // wmmintrin.h - +#if CRYPTOPP_BOOL_AVX_INTRINSICS_AVAILABLE +# include // RDRAND, RDSEED and AVX +#endif +#if CRYPTOPP_BOOL_AVX2_INTRINSICS_AVAILABLE +# include // AVX 512-bit extensions +#endif #endif // X86/X64/X32 Headers // Applies to both X86/X32/X64 and ARM32/ARM64. And we've got MIPS devices on the way.