summaryrefslogtreecommitdiff
path: root/xts.cpp
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2020-04-11 12:37:03 -0400
committerJeffrey Walton <noloader@gmail.com>2020-04-11 12:37:03 -0400
commit80953e3fb585832f006bb34d283dc0f61415bb0d (patch)
tree75c78503ee45495d43dcb48cea8a5185e03ec5e8 /xts.cpp
parentd855d26b56f5651e16ccb3be5d84810628fd2798 (diff)
downloadcryptopp-git-80953e3fb585832f006bb34d283dc0f61415bb0d.tar.gz
Add Altivec Xor for XTS mode
Diffstat (limited to 'xts.cpp')
-rw-r--r--xts.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/xts.cpp b/xts.cpp
index d123a745..8cbc7bd1 100644
--- a/xts.cpp
+++ b/xts.cpp
@@ -34,6 +34,10 @@
# endif
#endif
+#if defined(__ALTIVEC__)
+# include "ppc_simd.h"
+#endif
+
ANONYMOUS_NAMESPACE_BEGIN
using namespace CryptoPP;
@@ -76,6 +80,10 @@ inline void XorBuffer(byte *output, const byte *input, const byte *mask, size_t
for (size_t i=0; i<count; i+=16)
vst1q_u8(output+i, veorq_u8(vld1q_u8(input+i), vld1q_u8(mask+i)));
+#elif defined(__ALTIVEC__)
+ for (size_t i=0; i<count; i+=16)
+ VecStore(VecXor(VecLoad(input+i), VecLoad(mask+i)), output+i);
+
#else
xorbuf(output, input, mask, count);
#endif