23 #ifndef CRYPTOPP_CONFIG_ASM_H
24 #define CRYPTOPP_CONFIG_ASM_H
39 #if defined(__native_client__)
40 # undef CRYPTOPP_DISABLE_ASM
41 # define CRYPTOPP_DISABLE_ASM 1
50 #if defined(__clang__) || (defined(__APPLE__) && defined(__GNUC__)) || defined(__SUNPRO_CC)
51 # undef CRYPTOPP_DISABLE_MIXED_ASM
52 # define CRYPTOPP_DISABLE_MIXED_ASM 1
61 #if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64)
64 #if defined(CRYPTOPP_APPLE_CLANG_VERSION) && (CRYPTOPP_APPLE_CLANG_VERSION < 50000)
65 # define CRYPTOPP_DISABLE_ASM 1
70 #if defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x5100)
71 # define CRYPTOPP_DISABLE_ASM 1
75 #if !defined(CRYPTOPP_DISABLE_ASM)
77 #if (defined(_MSC_VER) && defined(_M_IX86)) || ((defined(__GNUC__) && (defined(__i386__)) || defined(__x86_64__)))
79 #define CRYPTOPP_X86_ASM_AVAILABLE 1
81 #if !defined(CRYPTOPP_DISABLE_SSE2) && (defined(_MSC_VER) || CRYPTOPP_GCC_VERSION >= 30300 || defined(__SSE2__))
82 #define CRYPTOPP_SSE2_ASM_AVAILABLE 1
85 #if !defined(CRYPTOPP_DISABLE_SSSE3) && (_MSC_VER >= 1500 || CRYPTOPP_GCC_VERSION >= 40300 || defined(__SSSE3__))
86 #define CRYPTOPP_SSSE3_ASM_AVAILABLE 1
90 #if defined(_MSC_VER) && defined(_M_X64)
91 #define CRYPTOPP_X64_MASM_AVAILABLE 1
94 #if defined(__GNUC__) && defined(__x86_64__)
95 #define CRYPTOPP_X64_ASM_AVAILABLE 1
99 #if !defined(CRYPTOPP_DISABLE_SSE2) && (defined(_MSC_VER) || CRYPTOPP_GCC_VERSION >= 30300 || defined(__SSE2__) || (__SUNPRO_CC >= 0x5100))
100 #define CRYPTOPP_SSE2_INTRIN_AVAILABLE 1
103 #if !defined(CRYPTOPP_DISABLE_SSSE3)
104 # if defined(__SSSE3__) || (_MSC_VER >= 1500) || \
105 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1000) || (__SUNPRO_CC >= 0x5110) || \
106 (CRYPTOPP_LLVM_CLANG_VERSION >= 20300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000)
107 #define CRYPTOPP_SSSE3_AVAILABLE 1
114 #if !defined(CRYPTOPP_DISABLE_SSE4) && defined(CRYPTOPP_SSSE3_AVAILABLE) && \
115 (defined(__SSE4_1__) || (CRYPTOPP_MSC_VERSION >= 1500) || \
116 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1000) || (__SUNPRO_CC >= 0x5110) || \
117 (CRYPTOPP_LLVM_CLANG_VERSION >= 20300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000))
118 #define CRYPTOPP_SSE41_AVAILABLE 1
121 #if !defined(CRYPTOPP_DISABLE_SSE4) && defined(CRYPTOPP_SSSE3_AVAILABLE) && \
122 (defined(__SSE4_2__) || (CRYPTOPP_MSC_VERSION >= 1500) || (__SUNPRO_CC >= 0x5110) || \
123 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1000) || \
124 (CRYPTOPP_LLVM_CLANG_VERSION >= 20300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000))
125 #define CRYPTOPP_SSE42_AVAILABLE 1
130 #if defined(CRYPTOPP_DISABLE_AESNI)
131 #define CRYPTOPP_DISABLE_CLMUL 1
135 #if !defined(CRYPTOPP_DISABLE_CLMUL) && defined(CRYPTOPP_SSE42_AVAILABLE) && \
136 (defined(__PCLMUL__) || (_MSC_FULL_VER >= 150030729) || (__SUNPRO_CC >= 0x5120) || \
137 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1110) || \
138 (CRYPTOPP_LLVM_CLANG_VERSION >= 30200) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300))
139 #define CRYPTOPP_CLMUL_AVAILABLE 1
143 #if !defined(CRYPTOPP_DISABLE_AESNI) && defined(CRYPTOPP_SSE42_AVAILABLE) && \
144 (defined(__AES__) || (_MSC_FULL_VER >= 150030729) || (__SUNPRO_CC >= 0x5120) || \
145 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1110) || \
146 (CRYPTOPP_LLVM_CLANG_VERSION >= 30200) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300))
147 #define CRYPTOPP_AESNI_AVAILABLE 1
151 #if !defined(CRYPTOPP_DISABLE_AVX) && defined(CRYPTOPP_SSE42_AVAILABLE) && \
152 (defined(__AVX2__) || (CRYPTOPP_MSC_VERSION >= 1800) || (__SUNPRO_CC >= 0x5130) || \
153 (CRYPTOPP_GCC_VERSION >= 40700) || (__INTEL_COMPILER >= 1400) || \
154 (CRYPTOPP_LLVM_CLANG_VERSION >= 30100) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40600))
155 #define CRYPTOPP_AVX_AVAILABLE 1
159 #if !defined(CRYPTOPP_DISABLE_AVX2) && defined(CRYPTOPP_AVX_AVAILABLE) && \
160 (defined(__AVX2__) || (CRYPTOPP_MSC_VERSION >= 1800) || (__SUNPRO_CC >= 0x5130) || \
161 (CRYPTOPP_GCC_VERSION >= 40900) || (__INTEL_COMPILER >= 1400) || \
162 (CRYPTOPP_LLVM_CLANG_VERSION >= 30100) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40600))
163 #define CRYPTOPP_AVX2_AVAILABLE 1
168 #if !defined(CRYPTOPP_DISABLE_SHANI) && defined(CRYPTOPP_SSE42_AVAILABLE) && \
169 (defined(__SHA__) || (CRYPTOPP_MSC_VERSION >= 1900) || (__SUNPRO_CC >= 0x5160) || \
170 (CRYPTOPP_GCC_VERSION >= 40900) || (__INTEL_COMPILER >= 1300) || \
171 (CRYPTOPP_LLVM_CLANG_VERSION >= 30400) || (CRYPTOPP_APPLE_CLANG_VERSION >= 50100))
172 #define CRYPTOPP_SHANI_AVAILABLE 1
177 #if !defined(CRYPTOPP_DISABLE_RDRAND) && defined(CRYPTOPP_AESNI_AVAILABLE)
178 #define CRYPTOPP_RDRAND_AVAILABLE 1
183 #if !defined(CRYPTOPP_DISABLE_RDSEED) && defined(CRYPTOPP_AESNI_AVAILABLE)
184 #define CRYPTOPP_RDSEED_AVAILABLE 1
188 #if !defined(CRYPTOPP_DISABLE_PADLOCK) && \
189 !(defined(__ANDROID__) || defined(ANDROID) || defined(__APPLE__)) && \
190 defined(CRYPTOPP_X86_ASM_AVAILABLE)
191 #define CRYPTOPP_PADLOCK_AVAILABLE 1
192 #define CRYPTOPP_PADLOCK_RNG_AVAILABLE 1
193 #define CRYPTOPP_PADLOCK_ACE_AVAILABLE 1
194 #define CRYPTOPP_PADLOCK_ACE2_AVAILABLE 1
195 #define CRYPTOPP_PADLOCK_PHE_AVAILABLE 1
196 #define CRYPTOPP_PADLOCK_PMM_AVAILABLE 1
201 #if defined(__ANDROID__) || defined(ANDROID)
202 # if (CRYPTOPP_BOOL_X86)
203 # undef CRYPTOPP_SSE41_AVAILABLE
204 # undef CRYPTOPP_SSE42_AVAILABLE
205 # undef CRYPTOPP_CLMUL_AVAILABLE
206 # undef CRYPTOPP_AESNI_AVAILABLE
207 # undef CRYPTOPP_SHANI_AVAILABLE
208 # undef CRYPTOPP_RDRAND_AVAILABLE
209 # undef CRYPTOPP_RDSEED_AVAILABLE
210 # undef CRYPTOPP_AVX_AVAILABLE
211 # undef CRYPTOPP_AVX2_AVAILABLE
213 # if (CRYPTOPP_BOOL_X64)
214 # undef CRYPTOPP_CLMUL_AVAILABLE
215 # undef CRYPTOPP_AESNI_AVAILABLE
216 # undef CRYPTOPP_SHANI_AVAILABLE
217 # undef CRYPTOPP_RDRAND_AVAILABLE
218 # undef CRYPTOPP_RDSEED_AVAILABLE
219 # undef CRYPTOPP_AVX_AVAILABLE
220 # undef CRYPTOPP_AVX2_AVAILABLE
225 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5130)
226 # undef CRYPTOPP_AESNI_AVAILABLE
231 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5150)
232 # undef CRYPTOPP_CLMUL_AVAILABLE
241 #if (CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARMV8)
245 #if (CRYPTOPP_BIG_ENDIAN)
246 # define CRYPTOPP_DISABLE_ASM 1
250 #if !defined(CRYPTOPP_DISABLE_ASM)
255 #if !defined(CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_NEON)
256 # if defined(__arm__) || defined(__ARM_NEON) || defined(__ARM_FEATURE_NEON) || defined(_M_ARM)
257 # if (CRYPTOPP_GCC_VERSION >= 40300) || (CRYPTOPP_LLVM_CLANG_VERSION >= 20800) || \
258 (CRYPTOPP_MSC_VERSION >= 1700)
259 # define CRYPTOPP_ARM_NEON_AVAILABLE 1
267 #if !defined(CRYPTOPP_ARM_ASIMD_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_ASIMD)
268 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64)
269 # if defined(__ARM_NEON) || defined(__ARM_FEATURE_NEON) || defined(__ARM_FEATURE_ASIMD) || \
270 (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || \
271 (CRYPTOPP_MSC_VERSION >= 1916)
272 # define CRYPTOPP_ARM_NEON_AVAILABLE 1
273 # define CRYPTOPP_ARM_ASIMD_AVAILABLE 1
281 #if !defined(CRYPTOPP_ARM_CRC32_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_CRC32)
282 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64)
283 # if defined(__ARM_FEATURE_CRC32) || (CRYPTOPP_GCC_VERSION >= 40800) || \
284 (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916)
285 # define CRYPTOPP_ARM_CRC32_AVAILABLE 1
293 #if !defined(CRYPTOPP_ARM_AES_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_AES)
294 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64)
295 # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \
296 (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916)
297 # define CRYPTOPP_ARM_AES_AVAILABLE 1
305 #if !defined(CRYPTOPP_ARM_PMULL_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_PMULL)
306 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64)
307 # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \
308 (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916)
309 # define CRYPTOPP_ARM_PMULL_AVAILABLE 1
317 #if !defined(CRYPTOPP_ARM_SHA_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_SHA)
318 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64)
319 # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \
320 (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916)
321 # define CRYPTOPP_ARM_SHA1_AVAILABLE 1
322 # define CRYPTOPP_ARM_SHA2_AVAILABLE 1
330 #if !defined(CRYPTOPP_ARM_SHA3_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_SHA)
331 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64)
332 # if defined(__ARM_FEATURE_SHA3) || (CRYPTOPP_GCC_VERSION >= 80000) || (CRYPTOPP_APPLE_CLANG_VERSION >= 120000) || (CRYPTOPP_LLVM_CLANG_VERSION >= 110000)
333 # define CRYPTOPP_ARM_SHA512_AVAILABLE 1
334 # define CRYPTOPP_ARM_SHA3_AVAILABLE 1
342 #if !defined(CRYPTOPP_ARM_SM3_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_SM3)
343 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64)
344 # if defined(__ARM_FEATURE_SM3) || (CRYPTOPP_GCC_VERSION >= 80000)
345 # define CRYPTOPP_ARM_SM3_AVAILABLE 1
346 # define CRYPTOPP_ARM_SM4_AVAILABLE 1
352 #if !defined(CRYPTOPP_ARM_NEON_HEADER)
353 # if defined(CRYPTOPP_ARM_NEON_AVAILABLE) || defined (CRYPTOPP_ARM_ASIMD_AVAILABLE)
354 # if !defined(_M_ARM64)
355 # define CRYPTOPP_ARM_NEON_HEADER 1
361 #if !defined(CRYPTOPP_ARM_ACLE_HEADER)
362 # if defined(__aarch32__) || defined(__aarch64__) || (__ARM_ARCH >= 8) || defined(__ARM_ACLE)
363 # define CRYPTOPP_ARM_ACLE_HEADER 1
371 #if defined(__APPLE__) && !defined(__ARM_FEATURE_CRC32)
372 # undef CRYPTOPP_ARM_ACLE_HEADER
377 #if defined(__ANDROID__) || defined(ANDROID)
378 # undef CRYPTOPP_ARM_ACLE_HEADER
383 #if defined(__ANDROID__) || defined(ANDROID)
384 # undef CRYPTOPP_ARM_CRC32_AVAILABLE
385 # undef CRYPTOPP_ARM_PMULL_AVAILABLE
386 # undef CRYPTOPP_ARM_AES_AVAILABLE
387 # undef CRYPTOPP_ARM_SHA1_AVAILABLE
388 # undef CRYPTOPP_ARM_SHA2_AVAILABLE
389 # undef CRYPTOPP_ARM_SHA3_AVAILABLE
390 # undef CRYPTOPP_ARM_SHA512_AVAILABLE
391 # undef CRYPTOPP_ARM_SM3_AVAILABLE
392 # undef CRYPTOPP_ARM_SM4_AVAILABLE
401 #if defined(__arm__) && defined(__linux__)
402 # if defined(__GNUC__) || defined(__clang__)
403 # define CRYPTOGAMS_ARM_AES 1
404 # define CRYPTOGAMS_ARM_SHA1 1
405 # define CRYPTOGAMS_ARM_SHA256 1
406 # define CRYPTOGAMS_ARM_SHA512 1
416 #if (CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64)
419 #if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_ALTIVEC)
422 #if !defined(CRYPTOPP_ALTIVEC_AVAILABLE)
423 # if defined(_ARCH_PWR4) || defined(__ALTIVEC__) || \
424 (CRYPTOPP_XLC_VERSION >= 100000) || (CRYPTOPP_GCC_VERSION >= 40001) || \
425 (CRYPTOPP_LLVM_CLANG_VERSION >= 20900)
426 # define CRYPTOPP_ALTIVEC_AVAILABLE 1
430 #if defined(CRYPTOPP_ALTIVEC_AVAILABLE)
433 #if !defined(CRYPTOPP_POWER7_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER7)
434 # if defined(_ARCH_PWR7) || (CRYPTOPP_XLC_VERSION >= 100000) || \
435 (CRYPTOPP_GCC_VERSION >= 40100) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30100)
436 # define CRYPTOPP_POWER7_AVAILABLE 1
440 #if defined(CRYPTOPP_POWER7_AVAILABLE)
443 #if !defined(CRYPTOPP_POWER8_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER8)
444 # if defined(_ARCH_PWR8) || (CRYPTOPP_XLC_VERSION >= 130000) || \
445 (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 70000)
446 # define CRYPTOPP_POWER8_AVAILABLE 1
450 #if !defined(CRYPTOPP_POWER8_AES_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER8_AES) && defined(CRYPTOPP_POWER8_AVAILABLE)
451 # if defined(__CRYPTO__) || defined(_ARCH_PWR8) || (CRYPTOPP_XLC_VERSION >= 130000) || \
452 (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 70000)
454 # define CRYPTOPP_POWER8_AES_AVAILABLE 1
455 # define CRYPTOPP_POWER8_VMULL_AVAILABLE 1
456 # define CRYPTOPP_POWER8_SHA_AVAILABLE 1
460 #if defined(CRYPTOPP_POWER8_AVAILABLE)
463 #if !defined(CRYPTOPP_POWER9_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER9)
464 # if defined(_ARCH_PWR9) || (CRYPTOPP_XLC_VERSION >= 130200) || \
465 (CRYPTOPP_GCC_VERSION >= 70000) || (CRYPTOPP_LLVM_CLANG_VERSION >= 80000)
466 # define CRYPTOPP_POWER9_AVAILABLE 1
Library configuration file.
Library configuration file.
Library configuration file.