Botan  1.10.9
Static Public Member Functions | List of all members
Botan::CPUID Class Reference

#include <cpuid.h>

Static Public Member Functions

static size_t cache_line_size ()
 
static bool has_aes_ni ()
 
static bool has_altivec ()
 
static bool has_avx ()
 
static bool has_movbe ()
 
static bool has_pcmuludq ()
 
static bool has_rdrand ()
 
static bool has_rdtsc ()
 
static bool has_sse2 ()
 
static bool has_sse41 ()
 
static bool has_sse42 ()
 
static bool has_ssse3 ()
 
static void initialize ()
 

Detailed Description

A class handling runtime CPU feature detection

Definition at line 18 of file cpuid.h.

Member Function Documentation

static size_t Botan::CPUID::cache_line_size ( )
inlinestatic

Return a best guess of the cache line size

Definition at line 29 of file cpuid.h.

Referenced by Botan::prefetch_readonly(), and Botan::prefetch_readwrite().

29 { return cache_line; }
static bool Botan::CPUID::has_aes_ni ( )
inlinestatic

Check if the processor supports AES-NI

Definition at line 70 of file cpuid.h.

Referenced by Botan::AES_ISA_Engine::find_block_cipher().

71  { return x86_processor_flags_has(CPUID_AESNI_BIT); }
static bool Botan::CPUID::has_altivec ( )
inlinestatic

Check if the processor supports AltiVec/VMX

Definition at line 94 of file cpuid.h.

94 { return altivec_capable; }
static bool Botan::CPUID::has_avx ( )
inlinestatic

Check if the processor supports extended AVX vector instructions

Definition at line 64 of file cpuid.h.

65  { return x86_processor_flags_has(CPUID_AVX_BIT); }
static bool Botan::CPUID::has_movbe ( )
inlinestatic

Check if the processor supports MOVBE

Definition at line 82 of file cpuid.h.

83  { return x86_processor_flags_has(CPUID_MOVBE_BIT); }
static bool Botan::CPUID::has_pcmuludq ( )
inlinestatic

Check if the processor supports PCMULUDQ

Definition at line 76 of file cpuid.h.

77  { return x86_processor_flags_has(CPUID_PCMUL_BIT); }
static bool Botan::CPUID::has_rdrand ( )
inlinestatic

Check if the processor supports RDRAND

Definition at line 88 of file cpuid.h.

Referenced by Botan::Intel_Rdrand::poll().

89  { return x86_processor_flags_has(CPUID_RDRAND_BIT); }
static bool Botan::CPUID::has_rdtsc ( )
inlinestatic

Check if the processor supports RDTSC

Definition at line 34 of file cpuid.h.

Referenced by Botan::High_Resolution_Timestamp::poll().

35  { return x86_processor_flags_has(CPUID_RDTSC_BIT); }
static bool Botan::CPUID::has_sse2 ( )
inlinestatic

Check if the processor supports SSE2

Definition at line 40 of file cpuid.h.

Referenced by Botan::SIMD_Engine::find_block_cipher(), and Botan::SIMD_Engine::find_hash().

41  { return x86_processor_flags_has(CPUID_SSE2_BIT); }
static bool Botan::CPUID::has_sse41 ( )
inlinestatic

Check if the processor supports SSE4.1

Definition at line 52 of file cpuid.h.

53  { return x86_processor_flags_has(CPUID_SSE41_BIT); }
static bool Botan::CPUID::has_sse42 ( )
inlinestatic

Check if the processor supports SSE4.2

Definition at line 58 of file cpuid.h.

59  { return x86_processor_flags_has(CPUID_SSE42_BIT); }
static bool Botan::CPUID::has_ssse3 ( )
inlinestatic

Check if the processor supports SSSE3

Definition at line 46 of file cpuid.h.

Referenced by Botan::SIMD_Engine::find_block_cipher().

47  { return x86_processor_flags_has(CPUID_SSSE3_BIT); }
void Botan::CPUID::initialize ( )
static

Probe the CPU and see what extensions are supported

Definition at line 190 of file cpuid.cpp.

References CALL_CPUID.

Referenced by Botan::Library_State::initialize().

191  {
192  u32bit cpuid[4] = { 0 };
193  CALL_CPUID(1, cpuid);
194 
195  x86_processor_flags = (static_cast<u64bit>(cpuid[2]) << 32) | cpuid[3];
196 
197 #if defined(BOTAN_TARGET_ARCH_IS_X86_64)
198  /*
199  * If we don't have access to CPUID, we can still safely assume that
200  * any x86-64 processor has SSE2.
201  */
202  if(x86_processor_flags == 0)
203  x86_processor_flags |= (1 << CPUID_SSE2_BIT);
204 #endif
205 
206  cache_line = get_x86_cache_line_size();
207 
208  altivec_capable = false;
209 
210 #if defined(BOTAN_TARGET_CPU_IS_PPC_FAMILY)
211  if(altivec_check_sysctl() || altivec_check_pvr_emul())
212  altivec_capable = true;
213 #endif
214  }
unsigned long long u64bit
Definition: types.h:49
#define CALL_CPUID(type, out)
Definition: cpuid.cpp:81
unsigned int u32bit
Definition: types.h:32

The documentation for this class was generated from the following files: