summaryrefslogtreecommitdiff
path: root/cpu.h
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2016-09-18 21:06:41 -0400
committerJeffrey Walton <noloader@gmail.com>2016-09-18 21:06:41 -0400
commitfb6a11ff08b9277e9f7a2fecae83027d3e0e60df (patch)
treea2b9a3e238f67ac6e541828eebebbbe607713d47 /cpu.h
parentf19e97ad5c0a7bc5e1b11010cfc4d35e91c658e5 (diff)
downloadcryptopp-git-fb6a11ff08b9277e9f7a2fecae83027d3e0e60df.tar.gz
Remove library supplied aesenc, aesdec and friends (Issue 206)
Diffstat (limited to 'cpu.h')
-rw-r--r--cpu.h95
1 files changed, 9 insertions, 86 deletions
diff --git a/cpu.h b/cpu.h
index 43d64146..34e383bd 100644
--- a/cpu.h
+++ b/cpu.h
@@ -63,103 +63,26 @@
# include <emmintrin.h>
# endif
-#if CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE
-
// GCC 5.3/i686 fails to declare __m128 in the headers we use when compiling with -std=c++11 or -std=c++14.
// Consequently, our _mm_shuffle_epi8, _mm_extract_epi32, etc fails to compile.
-#if defined(__has_include)
-# if __has_include(<xmmintrin.h>)
-# include <xmmintrin.h>
-# endif
+#if (CRYPTOPP_GCC_VERSION >= 40800)
+# include <x86intrin.h>
#endif
// PUSHFB needs Clang 3.3 and Apple Clang 5.0.
-#if !defined(__GNUC__) || defined(__SSSE3__)|| defined(__INTEL_COMPILER) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 50000)
-#include <tmmintrin.h>
-#else
-NAMESPACE_BEGIN(CryptoPP)
-__inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm_shuffle_epi8 (__m128i a, __m128i b)
-{
- asm ("pshufb %1, %0" : "+x"(a) : "xm"(b));
- return a;
-}
-NAMESPACE_END
+#if (defined(__SSE3__) || defined(__SSSE3__)) || defined(__INTEL_COMPILER) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 50000)
+# include <tmmintrin.h>
#endif // tmmintrin.h
// PEXTRD needs Clang 3.3 and Apple Clang 5.0.
-#if !defined(__GNUC__) || defined(__SSE4_1__)|| defined(__INTEL_COMPILER) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 50000)
-#include <smmintrin.h>
-#else
-NAMESPACE_BEGIN(CryptoPP)
-__inline int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm_extract_epi32 (__m128i a, const int i)
-{
- int r;
- asm ("pextrd %2, %1, %0" : "=rm"(r) : "x"(a), "i"(i));
- return r;
-}
-__inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm_insert_epi32 (__m128i a, int b, const int i)
-{
- asm ("pinsrd %2, %1, %0" : "+x"(a) : "rm"(b), "i"(i));
- return a;
-}
-NAMESPACE_END
+#if (defined(__SSE4_1__) || defined(__SSE4_1__)) || defined(__INTEL_COMPILER) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 50000)
+# include <smmintrin.h>
#endif // smmintrin.h
-// AES needs Clang 2.8 and Apple Clang 4.6. PCLMUL needs Clang 3.4 and Apple Clang 6.0
-#if !defined(__GNUC__) || (defined(__AES__) && defined(__PCLMUL__)) || defined(__INTEL_COMPILER) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30400) || (CRYPTOPP_APPLE_CLANG_VERSION >= 60000)
-#include <wmmintrin.h>
-#else
-NAMESPACE_BEGIN(CryptoPP)
-__inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm_clmulepi64_si128 (__m128i a, __m128i b, const int i)
-{
- asm ("pclmulqdq %2, %1, %0" : "+x"(a) : "xm"(b), "i"(i));
- return a;
-}
-__inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm_aeskeygenassist_si128 (__m128i a, const int i)
-{
- __m128i r;
- asm ("aeskeygenassist %2, %1, %0" : "=x"(r) : "xm"(a), "i"(i));
- return r;
-}
-__inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm_aesimc_si128 (__m128i a)
-{
- __m128i r;
- asm ("aesimc %1, %0" : "=x"(r) : "xm"(a));
- return r;
-}
-__inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm_aesenc_si128 (__m128i a, __m128i b)
-{
- asm ("aesenc %1, %0" : "+x"(a) : "xm"(b));
- return a;
-}
-__inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm_aesenclast_si128 (__m128i a, __m128i b)
-{
- asm ("aesenclast %1, %0" : "+x"(a) : "xm"(b));
- return a;
-}
-__inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm_aesdec_si128 (__m128i a, __m128i b)
-{
- asm ("aesdec %1, %0" : "+x"(a) : "xm"(b));
- return a;
-}
-__inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm_aesdeclast_si128 (__m128i a, __m128i b)
-{
- asm ("aesdeclast %1, %0" : "+x"(a) : "xm"(b));
- return a;
-}
-NAMESPACE_END
+// AES and CLMUL need Clang 2.8 and Apple Clang 4.6. CLMUL needs Clang 3.4 and Apple Clang 6.0
+#if (defined(__AES__) || defined(__PCLMUL__)) || defined(__INTEL_COMPILER) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30400) || (CRYPTOPP_APPLE_CLANG_VERSION >= 60000)
+# include <wmmintrin.h>
#endif // wmmintrin.h
-#endif // CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE
#if (CRYPTOPP_BOOL_SSE4_INTRINSICS_AVAILABLE) && ((__SUNPRO_CC >= 0x5110) || defined(__clang__) || defined(__INTEL_COMPILER))
# include <emmintrin.h> // _mm_set_epi64x