summaryrefslogtreecommitdiff
path: root/gcm_simd.cpp
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2022-03-29 21:06:48 -0400
committerJeffrey Walton <noloader@gmail.com>2022-03-29 21:06:48 -0400
commit003959567fbbdaa361bc057fe324ee34cfee4732 (patch)
tree8659a1c7a222c5dba3a40df448f909bdfeb846d8 /gcm_simd.cpp
parent9d055394d939d2abdd5bf9cb88baa4db97aa87a8 (diff)
downloadcryptopp-git-003959567fbbdaa361bc057fe324ee34cfee4732.tar.gz
Fix SIGIL on PowerPC during cpu feature probes (GH #1115)
Also see GH #1112
Diffstat (limited to 'gcm_simd.cpp')
-rw-r--r--gcm_simd.cpp53
1 files changed, 0 insertions, 53 deletions
diff --git a/gcm_simd.cpp b/gcm_simd.cpp
index 32823e12..90c6446b 100644
--- a/gcm_simd.cpp
+++ b/gcm_simd.cpp
@@ -154,59 +154,6 @@ bool CPU_ProbePMULL()
}
#endif // ARM32 or ARM64
-#if (CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64)
-bool CPU_ProbePMULL()
-{
-#if defined(CRYPTOPP_NO_CPU_FEATURE_PROBES)
- return false;
-#elif (CRYPTOPP_POWER8_VMULL_AVAILABLE)
- // longjmp and clobber warnings. Volatile is required.
- volatile bool result = true;
-
- volatile SigHandler oldHandler = signal(SIGILL, SigIllHandler);
- if (oldHandler == SIG_ERR)
- return false;
-
- volatile sigset_t oldMask;
- if (sigprocmask(0, NULLPTR, (sigset_t*)&oldMask))
- {
- signal(SIGILL, oldHandler);
- return false;
- }
-
- if (setjmp(s_jmpSIGILL))
- result = false;
- else
- {
- const uint64_t wa1[]={0,W64LIT(0x9090909090909090)},
- wb1[]={0,W64LIT(0xb0b0b0b0b0b0b0b0)};
- const uint64x2_p a1=VecLoad(wa1), b1=VecLoad(wb1);
-
- const uint8_t wa2[]={0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0},
- wb2[]={0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0};
- const uint32x4_p a2=VecLoad(wa2), b2=VecLoad(wb2);
-
- const uint64x2_p r1 = VecIntelMultiply11(a1, b1);
- const uint64x2_p r2 = VecIntelMultiply11((uint64x2_p)a2, (uint64x2_p)b2);
-
- const uint64_t wc1[]={W64LIT(0x5300530053005300), W64LIT(0x5300530053005300)},
- wc2[]={W64LIT(0x6c006c006c006c00), W64LIT(0x6c006c006c006c00)};
- const uint64x2_p c1=VecLoad(wc1), c2=VecLoad(wc2);
-
- result = !!(VecEqual(r1, c1) && VecEqual(r2, c2));
- }
-
- sigprocmask(SIG_SETMASK, (sigset_t*)&oldMask, NULLPTR);
- signal(SIGILL, oldHandler);
- return result;
-#else
- return false;
-#endif // CRYPTOPP_POWER8_VMULL_AVAILABLE
-}
-#endif // PPC32 or PPC64
-
// *************************** ARM NEON *************************** //
#if CRYPTOPP_ARM_NEON_AVAILABLE