16 #ifdef CRYPTOPP_GNU_STYLE_INLINE_ASSEMBLY 21 #ifndef EXCEPTION_EXECUTE_HANDLER 22 # define EXCEPTION_EXECUTE_HANDLER 1 26 #if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64) 27 # if !defined(CRYPTOPP_NO_CPU_FEATURE_PROBES) && !CRYPTOPP_SSE2_ASM_AVAILABLE && CRYPTOPP_SSE2_INTRIN_AVAILABLE 28 # include <emmintrin.h> 33 extern const char SSE_SIMD_FNAME[] = __FILE__;
37 #ifndef CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY 39 typedef void (*SigHandler)(int);
44 static jmp_buf s_jmpNoSSE2;
45 static void SigIllHandlerSSE2(
int)
47 longjmp(s_jmpNoSSE2, 1);
50 #endif // Not CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY 56 #if CRYPTOPP_BOOL_X64 || defined(__APPLE__) 58 #elif defined(CRYPTOPP_NO_CPU_FEATURE_PROBES) 60 #elif defined(CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY) 63 # if CRYPTOPP_SSE2_ASM_AVAILABLE 65 # elif CRYPTOPP_SSE2_INTRIN_AVAILABLE 66 __m128i x = _mm_setzero_si128();
67 return _mm_cvtsi128_si32(x) == 0;
71 __except (EXCEPTION_EXECUTE_HANDLER)
79 volatile bool result =
true;
81 volatile SigHandler oldHandler = signal(SIGILL, SigIllHandlerSSE2);
82 if (oldHandler == SIG_ERR)
86 volatile sigset_t oldMask;
87 if (sigprocmask(0, NULLPTR, (sigset_t*)&oldMask))
91 if (setjmp(s_jmpNoSSE2))
95 # if CRYPTOPP_SSE2_ASM_AVAILABLE 96 __asm __volatile (
"por %xmm0, %xmm0");
97 # elif CRYPTOPP_SSE2_INTRIN_AVAILABLE 98 __m128i x = _mm_setzero_si128();
99 result = _mm_cvtsi128_si32(x) == 0;
104 sigprocmask(SIG_SETMASK, (sigset_t*)&oldMask, NULLPTR);
107 signal(SIGILL, oldHandler);
Library configuration file.
Functions for CPU features and intrinsics.
Crypto++ library namespace.