From 5b89e774cc89b00bae587aa21abf2be42840c3fa Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Thu, 9 Aug 2018 00:06:42 -0400 Subject: Add Altivec vector extraction tests --- ppc-simd.h | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'ppc-simd.h') diff --git a/ppc-simd.h b/ppc-simd.h index 6fc52848..a6013e19 100644 --- a/ppc-simd.h +++ b/ppc-simd.h @@ -58,7 +58,7 @@ typedef __vector unsigned long long uint64x2_p; #endif // POWER8 datatypes #endif // ALTIVEC datatypes -// ALTIVEC and above +// Applies to all POWER machines #if defined(CRYPTOPP_ALTIVEC_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING) /// \brief Reverse a vector @@ -269,6 +269,22 @@ inline uint64x2_p VectorShiftRight<0, uint64x2_p>(const uint64x2_p& vec) } #endif +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); +} + +template +inline T VectorGetHigh(const T& val) +{ + const T zero = {0}; + const uint8x16_p mask = {16,16,16,16, 16,16,16,16, 0,1,2,3, 4,5,6,7 }; + return (T)vec_perm(val, zero, mask); +} + /// \brief Compare two vectors /// \tparam T1 vector type /// \tparam T2 vector type -- cgit v1.2.1