Add VectorStore(byte*, vector) overload

pull/730/head
Jeffrey Walton 2018-10-27 06:25:05 -04:00
parent 5e897710e8
commit 5dfa9086b7
No known key found for this signature in database
GPG Key ID: B36AB348921B1838
1 changed files with 32 additions and 15 deletions

View File

@ -75,6 +75,21 @@ inline T Reverse(const T& src)
return (T)vec_perm(src, src, mask);
}
/// \brief Permutes a vector
/// \tparam T vector type
/// \param vec the vector
/// \param mask vector mask
/// \returns vector
/// \details VectorPermute returns a new vector from vec based on
/// mask. mask is an uint8x16_p type vector. The return
/// vector is the same type as vec.
/// \since Crypto++ 6.0
template <class T1, class T2>
inline T1 VectorPermute(const T1& vec, const T2& mask)
{
return (T1)vec_perm(vec, vec, (uint8x16_p)mask);
}
/// \brief Permutes two vectors
/// \tparam T1 vector type
/// \tparam T2 vector type
@ -92,21 +107,6 @@ inline T1 VectorPermute(const T1& vec1, const T1& vec2, const T2& mask)
return (T1)vec_perm(vec1, vec2, (uint8x16_p)mask);
}
/// \brief Permutes a vector
/// \tparam T vector type
/// \param vec the vector
/// \param mask vector mask
/// \returns vector
/// \details VectorPermute returns a new vector from vec based on
/// mask. mask is an uint8x16_p type vector. The return
/// vector is the same type as vec.
/// \since Crypto++ 6.0
template <class T1, class T2>
inline T1 VectorPermute(const T1& vec, const T2& mask)
{
return (T1)vec_perm(vec, vec, (uint8x16_p)mask);
}
/// \brief AND two vectors
/// \tparam T1 vector type
/// \tparam T2 vector type
@ -546,6 +546,23 @@ inline void VectorStore(const T& src, byte dest[16])
#endif
}
/// \brief Stores a vector to a byte array
/// \tparam T vector type
/// \param src the vector
/// \param dest the byte array
/// \details Stores a vector in native endian format to a byte array.
/// \note VectorStore does not require an aligned array.
/// \since Crypto++ 6.0
template<class T>
inline void VectorStore(byte dest[16], const T& src)
{
#if defined(CRYPTOPP_XLC_VERSION)
vec_xst((uint8x16_p)src, 0, (byte*)dest);
#else
vec_vsx_st((uint8x16_p)src, 0, (byte*)dest);
#endif
}
/// \brief Stores a vector to a byte array
/// \tparam T vector type
/// \param src the vector