diff options
author | Jeffrey Walton <noloader@gmail.com> | 2018-11-09 08:00:53 -0500 |
---|---|---|
committer | Jeffrey Walton <noloader@gmail.com> | 2018-11-09 08:00:53 -0500 |
commit | 092309b26687a033e6d95de5cdf065b3ef8cb584 (patch) | |
tree | a45538f41bfb59e93bb1bf2426be9d8b54c5e7f7 | |
parent | af9fb9d21eac2b088c16680a377b79d6a3aa41f5 (diff) | |
download | cryptopp-git-092309b26687a033e6d95de5cdf065b3ef8cb584.tar.gz |
Fix global optimization bug for ChaCha AVX2 under VS2017 (GH #735)
Also see https://github.com/weidai11/cryptopp/issues/649. The 649 issue is the one affecting AES. It appears to be the same problem.
-rw-r--r-- | chacha-avx.cpp | 21 | ||||
-rw-r--r-- | rijndael.cpp | 6 |
2 files changed, 21 insertions, 6 deletions
diff --git a/chacha-avx.cpp b/chacha-avx.cpp index 6c875c5f..0aba0a99 100644 --- a/chacha-avx.cpp +++ b/chacha-avx.cpp @@ -36,10 +36,21 @@ extern const char CHACHA_AVX_FNAME[] = __FILE__; # define MAYBE_CONST const
#endif
-#if (CRYPTOPP_AVX2_AVAILABLE)
+// VS2017 and global optimization bug. TODO, figure out when
+// we can re-enable full optimizations for VS2017. Also see
+// https://github.com/weidai11/cryptopp/issues/649 and
+// https://github.com/weidai11/cryptopp/issues/735. The
+// 649 issue affects AES but it is the same here. The 735
+// issue is ChaCha AVX2 cut-in where it surfaced again.
+#if (_MSC_VER >= 1910) && defined(NDEBUG)
+# pragma optimize("", off)
+# pragma optimize("ts", on)
+#endif
ANONYMOUS_NAMESPACE_BEGIN
+#if (CRYPTOPP_AVX2_AVAILABLE)
+
template <unsigned int R>
inline __m256i RotateLeft(const __m256i val)
{
@@ -62,10 +73,14 @@ inline __m256i RotateLeft<16>(const __m256i val) return _mm256_shuffle_epi8(val, mask);
}
+#endif CRYPTOPP_AVX2_AVAILABLE
+
ANONYMOUS_NAMESPACE_END
NAMESPACE_BEGIN(CryptoPP)
+#if (CRYPTOPP_AVX2_AVAILABLE)
+
void ChaCha_OperateKeystream_AVX2(const word32 *state, const byte* input, byte *output, unsigned int rounds)
{
MAYBE_CONST __m128i* state_mm = (MAYBE_CONST __m128i*)(state);
@@ -358,6 +373,6 @@ void ChaCha_OperateKeystream_AVX2(const word32 *state, const byte* input, byte * }
}
-NAMESPACE_END
-
#endif // CRYPTOPP_AVX2_AVAILABLE
+
+NAMESPACE_END
diff --git a/rijndael.cpp b/rijndael.cpp index f00cc277..3cc0a46b 100644 --- a/rijndael.cpp +++ b/rijndael.cpp @@ -88,10 +88,10 @@ being unloaded from L1 cache, until that round is finished. #include "misc.h"
#include "cpu.h"
-// MSVC bug, still don't know how to fix it. TODO, figure out
-// when we can re-enable optimizations for MSVC. Also see
+// VS2017 and global optimization bug. TODO, figure out when
+// we can re-enable full optimizations for VS2017. Also see
// https://github.com/weidai11/cryptopp/issues/649
-#if defined(_MSC_VER) && (_MSC_VER >= 1910)
+#if (_MSC_VER >= 1910) && defined(NDEBUG)
# pragma optimize("", off)
# pragma optimize("ts", on)
#endif
|