aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/utils
diff options
context:
space:
mode:
authorJack Lloyd <[email protected]>2015-09-21 17:23:45 -0400
committerJack Lloyd <[email protected]>2015-09-21 17:23:45 -0400
commitb999079ebdfd1c9bd288763ae06dfdf6a31325e0 (patch)
treeb68ccafd36b7d9c9b07042e31ddd44908876584f /src/lib/utils
parent4a82605e745cf9a288806b31929ec0fe7c0c1bdc (diff)
Move check for SIMD instructions to CPUID
Avoids needing to include simd_32 to see if SIMD is disabled. This had caused a build break on Linux x86-32 as SSE2 must be enabled on a per-file basis.
Diffstat (limited to 'src/lib/utils')
-rw-r--r--src/lib/utils/cpuid.cpp13
-rw-r--r--src/lib/utils/cpuid.h2
-rw-r--r--src/lib/utils/simd/simd_altivec/simd_altivec.h2
-rw-r--r--src/lib/utils/simd/simd_scalar/simd_scalar.h2
-rw-r--r--src/lib/utils/simd/simd_sse2/simd_sse2.h2
5 files changed, 15 insertions, 6 deletions
diff --git a/src/lib/utils/cpuid.cpp b/src/lib/utils/cpuid.cpp
index 218b6553c..c98829789 100644
--- a/src/lib/utils/cpuid.cpp
+++ b/src/lib/utils/cpuid.cpp
@@ -157,6 +157,19 @@ bool altivec_check_pvr_emul()
}
+bool CPUID::has_simd_32()
+ {
+#if defined(BOTAN_HAS_SIMD_SSE2)
+ return CPUID::has_sse2();
+#elif defined(BOTAN_HAS_SIMD_ALTIVEC)
+ return CPUID::has_altivec();
+#elif defined(BOTAN_HAS_SIMD_SCALAR)
+ return true;
+#else
+ return false;
+#endif
+ }
+
void CPUID::print(std::ostream& o)
{
o << "CPUID flags: ";
diff --git a/src/lib/utils/cpuid.h b/src/lib/utils/cpuid.h
index 5d8093753..36c301c2f 100644
--- a/src/lib/utils/cpuid.h
+++ b/src/lib/utils/cpuid.h
@@ -118,6 +118,8 @@ class BOTAN_DLL CPUID
static bool has_rdseed()
{ return x86_processor_flags_has(CPUID_RDSEED_BIT); }
+ static bool has_simd_32();
+
static void print(std::ostream& o);
private:
enum CPUID_bits {
diff --git a/src/lib/utils/simd/simd_altivec/simd_altivec.h b/src/lib/utils/simd/simd_altivec/simd_altivec.h
index 32533aafb..0a77d60fa 100644
--- a/src/lib/utils/simd/simd_altivec/simd_altivec.h
+++ b/src/lib/utils/simd/simd_altivec/simd_altivec.h
@@ -22,8 +22,6 @@ namespace Botan {
class SIMD_Altivec
{
public:
- static bool enabled() { return CPUID::has_altivec(); }
-
SIMD_Altivec(const u32bit B[4])
{
m_reg = (__vector unsigned int){B[0], B[1], B[2], B[3]};
diff --git a/src/lib/utils/simd/simd_scalar/simd_scalar.h b/src/lib/utils/simd/simd_scalar/simd_scalar.h
index 379e2d6a8..28d72c615 100644
--- a/src/lib/utils/simd/simd_scalar/simd_scalar.h
+++ b/src/lib/utils/simd/simd_scalar/simd_scalar.h
@@ -21,8 +21,6 @@ template<typename T, size_t N>
class SIMD_Scalar
{
public:
- static bool enabled() { return true; }
-
static size_t size() { return N; }
SIMD_Scalar() { /* uninitialized */ }
diff --git a/src/lib/utils/simd/simd_sse2/simd_sse2.h b/src/lib/utils/simd/simd_sse2/simd_sse2.h
index 61989eb8e..9e85bd45b 100644
--- a/src/lib/utils/simd/simd_sse2/simd_sse2.h
+++ b/src/lib/utils/simd/simd_sse2/simd_sse2.h
@@ -18,8 +18,6 @@ namespace Botan {
class SIMD_SSE2
{
public:
- static bool enabled() { return CPUID::has_sse2(); }
-
SIMD_SSE2(const u32bit B[4])
{
reg = _mm_loadu_si128(reinterpret_cast<const __m128i*>(B));