13 #if (CRYPTOPP_ARM_NEON_AVAILABLE) 14 # include <arm_neon.h> 19 #if defined(CRYPTOPP_ARM_ACLE_AVAILABLE) 21 # include <arm_acle.h> 24 #ifdef CRYPTOPP_GNU_STYLE_INLINE_ASSEMBLY 29 #ifndef EXCEPTION_EXECUTE_HANDLER 30 # define EXCEPTION_EXECUTE_HANDLER 1 35 #ifdef CRYPTOPP_GNU_STYLE_INLINE_ASSEMBLY 37 typedef void (*SigHandler)(int);
39 static jmp_buf s_jmpSIGILL;
40 static void SigIllHandler(
int)
42 longjmp(s_jmpSIGILL, 1);
45 #endif // Not CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY 49 #if defined(CRYPTOPP_NO_CPU_FEATURE_PROBES) 51 #elif (CRYPTOPP_ARM_NEON_AVAILABLE) 52 # if defined(CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY) 53 volatile bool result =
true;
56 uint32_t v1[4] = {1,1,1,1};
57 uint32x4_t x1 = vld1q_u32(v1);
58 uint64_t v2[2] = {1,1};
59 uint64x2_t x2 = vld1q_u64(v2);
61 uint32x4_t x3 = vdupq_n_u32(2);
62 x3 = vsetq_lane_u32(vgetq_lane_u32(x1,0),x3,0);
63 x3 = vsetq_lane_u32(vgetq_lane_u32(x1,3),x3,3);
64 uint64x2_t x4 = vdupq_n_u64(2);
65 x4 = vsetq_lane_u64(vgetq_lane_u64(x2,0),x4,0);
66 x4 = vsetq_lane_u64(vgetq_lane_u64(x2,1),x4,1);
68 result = !!(vgetq_lane_u32(x3,0) | vgetq_lane_u64(x4,1));
70 __except (EXCEPTION_EXECUTE_HANDLER)
79 volatile bool result =
true;
81 volatile SigHandler oldHandler = signal(SIGILL, SigIllHandler);
82 if (oldHandler == SIG_ERR)
85 volatile sigset_t oldMask;
86 if (sigprocmask(0, NULLPTR, (sigset_t*)&oldMask))
89 if (setjmp(s_jmpSIGILL))
93 uint32_t v1[4] = {1,1,1,1};
94 uint32x4_t x1 = vld1q_u32(v1);
95 uint64_t v2[2] = {1,1};
96 uint64x2_t x2 = vld1q_u64(v2);
98 uint32x4_t x3 = {0,0,0,0};
99 x3 = vsetq_lane_u32(vgetq_lane_u32(x1,0),x3,0);
100 x3 = vsetq_lane_u32(vgetq_lane_u32(x1,3),x3,3);
101 uint64x2_t x4 = {0,0};
102 x4 = vsetq_lane_u64(vgetq_lane_u64(x2,0),x4,0);
103 x4 = vsetq_lane_u64(vgetq_lane_u64(x2,1),x4,1);
106 result = !!(vgetq_lane_u32(x3,0) | vgetq_lane_u64(x4,1));
109 sigprocmask(SIG_SETMASK, (sigset_t*)&oldMask, NULLPTR);
110 signal(SIGILL, oldHandler);
115 #endif // CRYPTOPP_ARM_NEON_AVAILABLE Library configuration file.
Crypto++ library namespace.