diff --git a/bench2.cpp b/bench2.cpp index df1a813c..5224c531 100644 --- a/bench2.cpp +++ b/bench2.cpp @@ -234,6 +234,10 @@ void Benchmark2(double t, double hertz) if (HasPMULL()) BenchMarkByName2("AES/GCM", 0, "AES/GCM"); else +#elif CRYPTOPP_POWER8_VMULL_AVAILABLE + if (HasPMULL()) + BenchMarkByName2("AES/GCM", 0, "AES/GCM"); + else #endif { BenchMarkByName2("AES/GCM", 0, "AES/GCM (2K tables)", MakeParameters(Name::TableSize(), 2048)); diff --git a/ppc-simd.h b/ppc-simd.h index 055e8364..b5b94397 100644 --- a/ppc-simd.h +++ b/ppc-simd.h @@ -336,9 +336,10 @@ inline T VectorRotateRight(const T& vec) template inline T VectorGetLow(const T& val) { - const T zero = {0}; - const uint8x16_p mask = {16,16,16,16, 16,16,16,16, 8,9,10,11, 12,13,14,15 }; - return (T)vec_perm(val, zero, mask); + //const T zero = {0}; + //const uint8x16_p mask = {16,16,16,16, 16,16,16,16, 8,9,10,11, 12,13,14,15 }; + //return (T)vec_perm(val, zero, mask); + return VectorShiftLeft<8>(VectorShiftRight<8>(val)); } /// \brief Extract a dword from a vector