Use vec_revb when POWER9 is available

pull/748/head
Jeffrey Walton 2018-11-23 12:16:45 -05:00
parent 4020ba7058
commit 39aaec7c59
No known key found for this signature in database
GPG Key ID: B36AB348921B1838
2 changed files with 7 additions and 3 deletions

View File

@ -64,7 +64,7 @@ bool CPU_ProbePower8()
{ {
// POWER8 added 64-bit SIMD operations // POWER8 added 64-bit SIMD operations
const word64 x = W64LIT(0xffffffffffffffff); const word64 x = W64LIT(0xffffffffffffffff);
word64 w1[2] = {x, x}, w2[2] = {4, 6}, w3[2]; word64 w1[2] = {x, x}, w2[2] = {4, 6}, w3[2];
// Specifically call the VSX loads and stores with 64-bit types // Specifically call the VSX loads and stores with 64-bit types
#if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__)) #if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__))

View File

@ -123,8 +123,12 @@ inline uint32x4_p VecOne()
template <class T> template <class T>
inline T VecReverse(const T data) inline T VecReverse(const T data)
{ {
#if (_ARCH_PWR9)
return (T)vec_revb((uint8x16_p)data);
#else
const uint8x16_p mask = {15,14,13,12, 11,10,9,8, 7,6,5,4, 3,2,1,0}; const uint8x16_p mask = {15,14,13,12, 11,10,9,8, 7,6,5,4, 3,2,1,0};
return (T)vec_perm(data, data, mask); return (T)vec_perm(data, data, mask);
#endif
} }
//////////////////////// Loads //////////////////////// //////////////////////// Loads ////////////////////////
@ -723,7 +727,7 @@ inline void VecStoreBE(const T data, int off, byte dest[16])
template <class T> template <class T>
inline void VecStoreBE(const T data, word32 dest[4]) inline void VecStoreBE(const T data, word32 dest[4])
{ {
return VecStoreBE((uint8x16_p)data, (byte*)dest); return VecStoreBE((uint8x16_p)data, (byte*)dest);
} }
/// \brief Stores a vector to a word array /// \brief Stores a vector to a word array
@ -745,7 +749,7 @@ inline void VecStoreBE(const T data, word32 dest[4])
template <class T> template <class T>
inline void VecStoreBE(const T data, int off, word32 dest[4]) inline void VecStoreBE(const T data, int off, word32 dest[4])
{ {
return VecStoreBE((uint8x16_p)data, (byte*)dest); return VecStoreBE((uint8x16_p)data, (byte*)dest);
} }
//////////////////////// Miscellaneous //////////////////////// //////////////////////// Miscellaneous ////////////////////////