summaryrefslogtreecommitdiff
path: root/gcm.cpp
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2019-04-27 20:35:01 -0400
committerGitHub <noreply@github.com>2019-04-27 20:35:01 -0400
commit39418a85122fa7954cca6354be30a44d6335874e (patch)
treeeae89a92177cb1c2e96a44435821d4d65086b481 /gcm.cpp
parentd451751eb269ff1345c9937107788d678c70e36f (diff)
downloadcryptopp-git-39418a85122fa7954cca6354be30a44d6335874e.tar.gz
Use PowerPC unaligned loads and stores with Power8 (GH #825, PR #826)
Use PowerPC unaligned loads and stores with Power8. Formerly we were using Power7 as the floor because the IBM POWER Architecture manuals said unaligned loads and stores were available. However, some compilers generate bad code for unaligned loads and stores using `-march=power7`, so bump to a known good.
Diffstat (limited to 'gcm.cpp')
-rw-r--r--gcm.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/gcm.cpp b/gcm.cpp
index d1c3011c..c7c51071 100644
--- a/gcm.cpp
+++ b/gcm.cpp
@@ -75,8 +75,8 @@ extern void GCM_Xor16_SSE2(byte *a, const byte *b, const byte *c);
extern void GCM_Xor16_NEON(byte *a, const byte *b, const byte *c);
#endif
-#if CRYPTOPP_POWER7_AVAILABLE
-extern void GCM_Xor16_POWER7(byte *a, const byte *b, const byte *c);
+#if CRYPTOPP_POWER8_AVAILABLE
+extern void GCM_Xor16_POWER8(byte *a, const byte *b, const byte *c);
#endif
#if CRYPTOPP_CLMUL_AVAILABLE
@@ -213,11 +213,11 @@ void GCM_Base::SetKeyWithoutResync(const byte *userKey, size_t keylength, const
for (k=1; k<j; k++)
GCM_Xor16_NEON(mulTable+i*256*16+(j+k)*16, mulTable+i*256*16+j*16, mulTable+i*256*16+k*16);
else
-#elif CRYPTOPP_POWER7_AVAILABLE
- if (HasPower7())
+#elif CRYPTOPP_POWER8_AVAILABLE
+ if (HasPower8())
for (j=2; j<=0x80; j*=2)
for (k=1; k<j; k++)
- GCM_Xor16_POWER7(mulTable+i*256*16+(j+k)*16, mulTable+i*256*16+j*16, mulTable+i*256*16+k*16);
+ GCM_Xor16_POWER8(mulTable+i*256*16+(j+k)*16, mulTable+i*256*16+j*16, mulTable+i*256*16+k*16);
else
#endif
for (j=2; j<=0x80; j*=2)
@@ -277,13 +277,13 @@ void GCM_Base::SetKeyWithoutResync(const byte *userKey, size_t keylength, const
GCM_Xor16_NEON(mulTable+1024+i*256+(j+k)*16, mulTable+1024+i*256+j*16, mulTable+1024+i*256+k*16);
}
else
-#elif CRYPTOPP_POWER7_AVAILABLE
- if (HasPower7())
+#elif CRYPTOPP_POWER8_AVAILABLE
+ if (HasPower8())
for (j=2; j<=8; j*=2)
for (k=1; k<j; k++)
{
- GCM_Xor16_POWER7(mulTable+i*256+(j+k)*16, mulTable+i*256+j*16, mulTable+i*256+k*16);
- GCM_Xor16_POWER7(mulTable+1024+i*256+(j+k)*16, mulTable+1024+i*256+j*16, mulTable+1024+i*256+k*16);
+ GCM_Xor16_POWER8(mulTable+i*256+(j+k)*16, mulTable+i*256+j*16, mulTable+i*256+k*16);
+ GCM_Xor16_POWER8(mulTable+1024+i*256+(j+k)*16, mulTable+1024+i*256+j*16, mulTable+1024+i*256+k*16);
}
else
#endif
@@ -369,8 +369,8 @@ unsigned int GCM_Base::OptimalDataAlignment() const
HasSSE2() ? 16 :
#elif CRYPTOPP_ARM_NEON_AVAILABLE
HasNEON() ? 4 :
-#elif CRYPTOPP_POWER7_AVAILABLE
- HasPower7() ? 16 :
+#elif CRYPTOPP_POWER8_AVAILABLE
+ HasPower8() ? 16 :
#endif
GetBlockCipher().OptimalDataAlignment();
}