diff options
| author | Jeffrey Walton <noloader@gmail.com> | 2016-07-16 23:45:16 -0400 |
|---|---|---|
| committer | Jeffrey Walton <noloader@gmail.com> | 2016-07-16 23:45:16 -0400 |
| commit | 1cb906938dbe3efbbe49f3264a142ce1f21cec76 (patch) | |
| tree | e37ce75de58201f1af96c462083dc25790cd0eb0 /rijndael.cpp | |
| parent | 3c96be47d2e38f600d06557865eef1cd55bd2126 (diff) | |
| download | cryptopp-git-1cb906938dbe3efbbe49f3264a142ce1f21cec76.tar.gz | |
Fix SunCC 12.2 and 12.3 failed compile in rijndael.cpp due to std::swap(__m128i, __m128i)
Diffstat (limited to 'rijndael.cpp')
| -rw-r--r-- | rijndael.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/rijndael.cpp b/rijndael.cpp index 0546c2a9..9139c227 100644 --- a/rijndael.cpp +++ b/rijndael.cpp @@ -274,8 +274,15 @@ void Rijndael::Base::UncheckedSetKey(const byte *userKey, unsigned int keylen, c rk = m_key;
unsigned int i, j;
+#if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5120)
+ // __m128i is an unsigned long long[2], and support for swapping it was not formally added until C++11.
+ // SunCC 12.1 - 12.3 fail to consume the swap; while SunCC 12.4 consumes it without -std=c++11.
+ __m128i t = *(__m128i *)(rk);
+ *(__m128i *)(rk) = *(__m128i *)(rk+4*m_rounds);
+ *(__m128i *)(rk+4*m_rounds) = t;
+#else
std::swap(*(__m128i *)(void *)(rk), *(__m128i *)(void *)(rk+4*m_rounds));
-
+#endif
for (i = 4, j = 4*m_rounds-4; i < j; i += 4, j -= 4)
{
temp = _mm_aesimc_si128(*(__m128i *)(void *)(rk+i));
|
