diff options
author | weidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0> | 2010-07-07 22:46:18 +0000 |
---|---|---|
committer | weidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0> | 2010-07-07 22:46:18 +0000 |
commit | 83f195aa17878ca7d4c8c03b2b871df7bfbe5fb0 (patch) | |
tree | d56925f3aa0a89a54957762199893dfc84d62d78 | |
parent | 987106e079fcc3d30f32122eb33df59fe9dd86dd (diff) | |
download | cryptopp-83f195aa17878ca7d4c8c03b2b871df7bfbe5fb0.tar.gz |
add AESNI and CLMUL detection
git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@503 57ff6487-cd31-0410-9ec3-f628ee90f5f0
-rwxr-xr-x | cpu.cpp | 4 | ||||
-rwxr-xr-x | cpu.h | 16 | ||||
-rw-r--r-- | validat1.cpp | 2 |
3 files changed, 20 insertions, 2 deletions
@@ -145,7 +145,7 @@ static bool TrySSE2() } bool g_x86DetectionDone = false; -bool g_hasISSE = false, g_hasSSE2 = false, g_hasSSSE3 = false, g_hasMMX = false, g_isP4 = false; +bool g_hasISSE = false, g_hasSSE2 = false, g_hasSSSE3 = false, g_hasMMX = false, g_hasAESNI = false, g_hasCLMUL = false, g_isP4 = false; word32 g_cacheLineSize = CRYPTOPP_L1_CACHE_LINE_SIZE; void DetectX86Features() @@ -160,6 +160,8 @@ void DetectX86Features() if ((cpuid1[3] & (1 << 26)) != 0) g_hasSSE2 = TrySSE2(); g_hasSSSE3 = g_hasSSE2 && (cpuid1[2] & (1<<9)); + g_hasAESNI = (cpuid1[2] & (1<<25)) != 0; + g_hasCLMUL = (cpuid1[2] & (1<<1)) != 0; if ((cpuid1[3] & (1 << 25)) != 0) g_hasISSE = true; @@ -28,6 +28,8 @@ extern CRYPTOPP_DLL bool g_hasSSE2; extern CRYPTOPP_DLL bool g_hasISSE; extern CRYPTOPP_DLL bool g_hasMMX; extern CRYPTOPP_DLL bool g_hasSSSE3; +extern CRYPTOPP_DLL bool g_hasAESNI; +extern CRYPTOPP_DLL bool g_hasCLMUL; extern CRYPTOPP_DLL bool g_isP4; extern CRYPTOPP_DLL word32 g_cacheLineSize; CRYPTOPP_DLL void CRYPTOPP_API DetectX86Features(); @@ -70,6 +72,20 @@ inline bool HasSSSE3() return g_hasSSSE3; } +inline bool HasAESNI() +{ + if (!g_x86DetectionDone) + DetectX86Features(); + return g_hasAESNI; +} + +inline bool HasCLMUL() +{ + if (!g_x86DetectionDone) + DetectX86Features(); + return g_hasCLMUL; +} + inline bool IsP4() { if (!g_x86DetectionDone) diff --git a/validat1.cpp b/validat1.cpp index 680314c..dafeb52 100644 --- a/validat1.cpp +++ b/validat1.cpp @@ -251,7 +251,7 @@ bool TestSettings() else cout << "passed: "; - cout << "hasMMX == " << hasMMX << ", hasISSE == " << hasISSE << ", hasSSE2 == " << hasSSE2 << ", hasSSSE3 == " << hasSSSE3 << ", isP4 == " << isP4 << ", cacheLineSize == " << cacheLineSize; + cout << "hasMMX == " << hasMMX << ", hasISSE == " << hasISSE << ", hasSSE2 == " << hasSSE2 << ", hasSSSE3 == " << hasSSSE3 << ", hasAESNI == " << HasAESNI() << ", hasCLMUL == " << HasCLMUL() << ", isP4 == " << isP4 << ", cacheLineSize == " << cacheLineSize; if (!pass) { |