mirror of
https://github.com/shadps4-emu/ext-cryptopp.git
synced 2025-02-19 21:00:50 +00:00
Port ppc_simd.h to Clang 3.8 (PR #900)
This commit is contained in:
parent
8f6e156394
commit
40f139074b
10
.travis.yml
10
.travis.yml
@ -566,6 +566,14 @@ jobs:
|
||||
- BUILD_MODE=ios
|
||||
- BUILD_JOBS=2
|
||||
- BUILD_ARCH=iPhoneSimulator
|
||||
- os: linux
|
||||
name: Linux with GCC (all)
|
||||
arch: ppc64le
|
||||
compiler: gcc
|
||||
- os: linux
|
||||
name: Linux with Clang (all)
|
||||
arch: ppc64le
|
||||
compiler: clang
|
||||
|
||||
before_install:
|
||||
- |
|
||||
@ -578,7 +586,7 @@ before_install:
|
||||
if [[ "$BUILD_OS" == "linux" ]] && [[ "$BUILD_MODE" == "autotools" ]]; then
|
||||
# https://github.com/travis-ci/travis-ci/issues/9037
|
||||
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A145
|
||||
sudo apt-get install -y autoconf automake libtool
|
||||
sudo apt-get -y install autoconf automake libtool
|
||||
fi
|
||||
|
||||
script:
|
||||
|
166
ppc_simd.h
166
ppc_simd.h
@ -116,6 +116,10 @@
|
||||
# pragma GCC diagnostic ignored "-Wdeprecated"
|
||||
#endif
|
||||
|
||||
// For Clang, which can't seem to match a signature
|
||||
#define CONST_VECTOR_CAST(x) ((const __vector unsigned char*)(x))
|
||||
#define VECTOR_CAST(x) ((__vector unsigned char*)(x))
|
||||
|
||||
NAMESPACE_BEGIN(CryptoPP)
|
||||
|
||||
#if defined(__ALTIVEC__) || defined(CRYPTOPP_DOXYGEN_PROCESSING)
|
||||
@ -262,14 +266,16 @@ inline uint32x4_p VecLoad(const byte src[16])
|
||||
{
|
||||
#if defined(_ARCH_PWR8)
|
||||
# if defined(early_xlc) || defined(early_xlC)
|
||||
return (uint32x4_p)vec_xlw4(0, (byte*)src);
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(__clang__)
|
||||
return (uint32x4_p)vec_xl(0, (byte*)src);
|
||||
# else
|
||||
return (uint32x4_p)vec_vsx_ld(0, (byte*)src);
|
||||
return (uint32x4_p)vec_xlw4(0, CONST_VECTOR_CAST(src));
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(later_clang)
|
||||
return (uint32x4_p)vec_xl(0, CONST_VECTOR_CAST(src));
|
||||
# elif defined(__VSX__)
|
||||
return (uint32x4_p)vec_vsx_ld(0, CONST_VECTOR_CAST(src));
|
||||
# else // Early Clang that claims to support Power8
|
||||
return (uint32x4_p)VecLoad_ALTIVEC(src);
|
||||
# endif
|
||||
#else
|
||||
return VecLoad_ALTIVEC(src);
|
||||
return (uint32x4_p)VecLoad_ALTIVEC(src);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -290,14 +296,16 @@ inline uint32x4_p VecLoad(int off, const byte src[16])
|
||||
{
|
||||
#if defined(_ARCH_PWR8)
|
||||
# if defined(early_xlc) || defined(early_xlC)
|
||||
return (uint32x4_p)vec_xlw4(off, (byte*)src);
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(__clang__)
|
||||
return (uint32x4_p)vec_xl(off, (byte*)src);
|
||||
# else
|
||||
return (uint32x4_p)vec_vsx_ld(off, (byte*)src);
|
||||
return (uint32x4_p)vec_xlw4(off, CONST_VECTOR_CAST(src));
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(later_clang)
|
||||
return (uint32x4_p)vec_xl(off, CONST_VECTOR_CAST(src));
|
||||
# elif defined(__VSX__)
|
||||
return (uint32x4_p)vec_vsx_ld(off, CONST_VECTOR_CAST(src));
|
||||
# else // Early Clang that claims to support Power8
|
||||
return (uint32x4_p)VecLoad_ALTIVEC(off, src);
|
||||
# endif
|
||||
#else
|
||||
return VecLoad_ALTIVEC(off, src);
|
||||
return (uint32x4_p)VecLoad_ALTIVEC(off, src);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -315,7 +323,7 @@ inline uint32x4_p VecLoad(int off, const byte src[16])
|
||||
/// \since Crypto++ 8.0
|
||||
inline uint32x4_p VecLoad(const word32 src[4])
|
||||
{
|
||||
return VecLoad((const byte*)src);
|
||||
return (uint32x4_p)VecLoad((const byte*)src);
|
||||
}
|
||||
|
||||
/// \brief Loads a vector from a word array
|
||||
@ -333,7 +341,7 @@ inline uint32x4_p VecLoad(const word32 src[4])
|
||||
/// \since Crypto++ 8.0
|
||||
inline uint32x4_p VecLoad(int off, const word32 src[4])
|
||||
{
|
||||
return VecLoad(off, (const byte*)src);
|
||||
return (uint32x4_p)VecLoad(off, (const byte*)src);
|
||||
}
|
||||
|
||||
#if defined(_ARCH_PWR8) || defined(CRYPTOPP_DOXYGEN_PROCESSING)
|
||||
@ -392,11 +400,14 @@ inline uint32x4_p VecLoadAligned(const byte src[16])
|
||||
{
|
||||
#if defined(_ARCH_PWR8)
|
||||
# if defined(early_xlc) || defined(early_xlC)
|
||||
return (uint32x4_p)vec_xlw4(0, (byte*)src);
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(__clang__)
|
||||
return (uint32x4_p)vec_xl(0, (byte*)src);
|
||||
# else
|
||||
return (uint32x4_p)vec_vsx_ld(0, (byte*)src);
|
||||
return (uint32x4_p)vec_xlw4(0, CONST_VECTOR_CAST(src));
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(later_clang)
|
||||
return (uint32x4_p)vec_xl(0, CONST_VECTOR_CAST(src));
|
||||
# elif defined(__VSX__)
|
||||
return (uint32x4_p)vec_vsx_ld(0, CONST_VECTOR_CAST(src));
|
||||
# else // Early Clang that claims to support Power8
|
||||
CRYPTOPP_ASSERT(((uintptr_t)src) % 16 == 0);
|
||||
return (uint32x4_p)vec_ld(0, (byte*)src);
|
||||
# endif
|
||||
#else // _ARCH_PWR8
|
||||
CRYPTOPP_ASSERT(((uintptr_t)src) % 16 == 0);
|
||||
@ -420,11 +431,14 @@ inline uint32x4_p VecLoadAligned(int off, const byte src[16])
|
||||
{
|
||||
#if defined(_ARCH_PWR8)
|
||||
# if defined(early_xlc) || defined(early_xlC)
|
||||
return (uint32x4_p)vec_xlw4(off, (byte*)src);
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(__clang__)
|
||||
return (uint32x4_p)vec_xl(off, (byte*)src);
|
||||
# else
|
||||
return (uint32x4_p)vec_vsx_ld(off, (byte*)src);
|
||||
return (uint32x4_p)vec_xlw4(off, CONST_VECTOR_CAST(src));
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(later_clangs)
|
||||
return (uint32x4_p)vec_xl(off, CONST_VECTOR_CAST(src));
|
||||
# elif defined(__VSX__)
|
||||
return (uint32x4_p)vec_vsx_ld(off, CONST_VECTOR_CAST(src));
|
||||
# else // Early Clang that claims to support Power8
|
||||
CRYPTOPP_ASSERT((((uintptr_t)src)+off) % 16 == 0);
|
||||
return (uint32x4_p)vec_ld(off, (byte*)src);
|
||||
# endif
|
||||
#else // _ARCH_PWR8
|
||||
CRYPTOPP_ASSERT((((uintptr_t)src)+off) % 16 == 0);
|
||||
@ -450,17 +464,23 @@ inline uint32x4_p VecLoadBE(const byte src[16])
|
||||
#if defined(_ARCH_PWR8)
|
||||
# if defined(early_xlc) || defined(early_xlC)
|
||||
# if (CRYPTOPP_BIG_ENDIAN)
|
||||
return (uint32x4_p)vec_xlw4(0, (byte*)src);
|
||||
return (uint32x4_p)vec_xlw4(0, CONST_VECTOR_CAST(src));
|
||||
# else
|
||||
return (uint32x4_p)VecReverse(vec_xlw4(0, (byte*)src));
|
||||
return (uint32x4_p)VecReverse(vec_xlw4(0, CONST_VECTOR_CAST(src));
|
||||
# endif
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(__clang__)
|
||||
return (uint32x4_p)vec_xl_be(0, (byte*)src);
|
||||
# else
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(later_clang)
|
||||
return (uint32x4_p)vec_xl_be(0, CONST_VECTOR_CAST(src));
|
||||
# elif defined(__VSX__)
|
||||
# if (CRYPTOPP_BIG_ENDIAN)
|
||||
return (uint32x4_p)vec_vsx_ld(0, (byte*)src);
|
||||
return (uint32x4_p)vec_vsx_ld(0, CONST_VECTOR_CAST(src));
|
||||
# else
|
||||
return (uint32x4_p)VecReverse(vec_vsx_ld(0, (byte*)src));
|
||||
return (uint32x4_p)VecReverse(vec_vsx_ld(0, CONST_VECTOR_CAST(src)));
|
||||
# endif
|
||||
# else // Early Clang that claims to support Power8
|
||||
# if (CRYPTOPP_BIG_ENDIAN)
|
||||
return (uint32x4_p)VecLoad((const byte*)src);
|
||||
# else
|
||||
return (uint32x4_p)VecReverse(VecLoad((const byte*)src));
|
||||
# endif
|
||||
# endif
|
||||
#else // _ARCH_PWR8
|
||||
@ -491,17 +511,23 @@ inline uint32x4_p VecLoadBE(int off, const byte src[16])
|
||||
#if defined(_ARCH_PWR8)
|
||||
# if defined(early_xlc) || defined(early_xlC)
|
||||
# if (CRYPTOPP_BIG_ENDIAN)
|
||||
return (uint32x4_p)vec_xlw4(off, (byte*)src);
|
||||
return (uint32x4_p)vec_xlw4(off, CONST_VECTOR_CAST(src));
|
||||
# else
|
||||
return (uint32x4_p)VecReverse(vec_xlw4(off, (byte*)src));
|
||||
return (uint32x4_p)VecReverse(vec_xlw4(off, CONST_VECTOR_CAST(src));
|
||||
# endif
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(__clang__)
|
||||
return (uint32x4_p)vec_xl_be(off, (byte*)src);
|
||||
# else
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(later_clangs)
|
||||
return (uint32x4_p)vec_xl_be(off, CONST_VECTOR_CAST(src));
|
||||
# elif defined(__VSX__)
|
||||
# if (CRYPTOPP_BIG_ENDIAN)
|
||||
return (uint32x4_p)vec_vsx_ld(off, (byte*)src);
|
||||
return (uint32x4_p)vec_vsx_ld(off, CONST_VECTOR_CAST(src));
|
||||
# else
|
||||
return (uint32x4_p)VecReverse(vec_vsx_ld(off, (byte*)src));
|
||||
return (uint32x4_p)VecReverse(vec_vsx_ld(off, CONST_VECTOR_CAST(src)));
|
||||
# endif
|
||||
# else // Early Clang that claims to support Power8
|
||||
# if (CRYPTOPP_BIG_ENDIAN)
|
||||
return (uint32x4_p)VecLoad(off, (const byte*)src);
|
||||
# else
|
||||
return (uint32x4_p)VecReverse(VecLoad(off, (const byte*)src));
|
||||
# endif
|
||||
# endif
|
||||
#else // _ARCH_PWR8
|
||||
@ -614,11 +640,13 @@ inline void VecStore(const T data, byte dest[16])
|
||||
{
|
||||
#if defined(_ARCH_PWR8)
|
||||
# if defined(early_xlc) || defined(early_xlC)
|
||||
vec_xstw4((uint8x16_p)data, 0, (byte*)dest);
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(__clang__)
|
||||
vec_xst((uint8x16_p)data, 0, (byte*)dest);
|
||||
# else
|
||||
vec_vsx_st((uint8x16_p)data, 0, (byte*)dest);
|
||||
vec_xstw4((uint8x16_p)data, 0, VECTOR_CAST(dest));
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(later_clang)
|
||||
vec_xst((uint8x16_p)data, 0, VECTOR_CAST(dest));
|
||||
# elif defined(__VSX__)
|
||||
vec_vsx_st((uint8x16_p)data, 0, VECTOR_CAST(dest));
|
||||
# else // Early Clang that claims to support Power8
|
||||
VecStore_ALTIVEC((uint8x16_p)data, 0, (byte*)dest);
|
||||
# endif
|
||||
#else
|
||||
VecStore_ALTIVEC((uint8x16_p)data, 0, (byte*)dest);
|
||||
@ -645,11 +673,13 @@ inline void VecStore(const T data, int off, byte dest[16])
|
||||
{
|
||||
#if defined(_ARCH_PWR8)
|
||||
# if defined(early_xlc) || defined(early_xlC)
|
||||
vec_xstw4((uint8x16_p)data, off, (byte*)dest);
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(__clang__)
|
||||
vec_xst((uint8x16_p)data, off, (byte*)dest);
|
||||
# else
|
||||
vec_vsx_st((uint8x16_p)data, off, (byte*)dest);
|
||||
vec_xstw4((uint8x16_p)data, off, VECTOR_CAST(dest));
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(later_clang)
|
||||
vec_xst((uint8x16_p)data, off, VECTOR_CAST(dest));
|
||||
# elif defined(__VSX__)
|
||||
vec_vsx_st((uint8x16_p)data, off, VECTOR_CAST(dest));
|
||||
# else // Early Clang that claims to support Power8
|
||||
VecStore_ALTIVEC((uint8x16_p)data, off, (byte*)dest);
|
||||
# endif
|
||||
#else
|
||||
VecStore_ALTIVEC((uint8x16_p)data, off, (byte*)dest);
|
||||
@ -761,17 +791,23 @@ inline void VecStoreBE(const T data, byte dest[16])
|
||||
#if defined(_ARCH_PWR8)
|
||||
# if defined(early_xlc) || defined(early_xlC)
|
||||
# if (CRYPTOPP_BIG_ENDIAN)
|
||||
vec_xstw4((uint8x16_p)data, 0, (byte*)dest);
|
||||
vec_xstw4((uint8x16_p)data, 0, VECTOR_CAST(dest));
|
||||
# else
|
||||
vec_xstw4((uint8x16_p)VecReverse(data), 0, (byte*)dest);
|
||||
vec_xstw4((uint8x16_p)VecReverse(data), 0, VECTOR_CAST(dest));
|
||||
# endif
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(__clang__)
|
||||
vec_xst_be((uint8x16_p)data, 0, (byte*)dest);
|
||||
# else
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(later_clang)
|
||||
vec_xst_be((uint8x16_p)data, 0, VECTOR_CAST(dest));
|
||||
# elif defined(__VSX__)
|
||||
# if (CRYPTOPP_BIG_ENDIAN)
|
||||
vec_vsx_st((uint8x16_p)data, 0, (byte*)dest);
|
||||
vec_vsx_st((uint8x16_p)data, 0, VECTOR_CAST(dest));
|
||||
# else
|
||||
vec_vsx_st((uint8x16_p)VecReverse(data), 0, (byte*)dest);
|
||||
vec_vsx_st((uint8x16_p)VecReverse(data), 0, VECTOR_CAST(dest));
|
||||
# endif
|
||||
# else // Early Clang that claims to support Power8
|
||||
# if (CRYPTOPP_BIG_ENDIAN)
|
||||
VecStore_ALTIVEC((uint8x16_p)data, 0, (byte*)dest);
|
||||
# else
|
||||
VecStore_ALTIVEC((uint8x16_p)VecReverse(data), 0, (byte*)dest);
|
||||
# endif
|
||||
# endif
|
||||
#else // _ARCH_PWR8
|
||||
@ -805,17 +841,23 @@ inline void VecStoreBE(const T data, int off, byte dest[16])
|
||||
#if defined(_ARCH_PWR8)
|
||||
# if defined(early_xlc) || defined(early_xlC)
|
||||
# if (CRYPTOPP_BIG_ENDIAN)
|
||||
vec_xstw4((uint8x16_p)data, off, (byte*)dest);
|
||||
vec_xstw4((uint8x16_p)data, off, VECTOR_CAST(dest));
|
||||
# else
|
||||
vec_xstw4((uint8x16_p)VecReverse(data), off, (byte*)dest);
|
||||
vec_xstw4((uint8x16_p)VecReverse(data), off, VECTOR_CAST(dest));
|
||||
# endif
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(__clang__)
|
||||
vec_xst_be((uint8x16_p)data, off, (byte*)dest);
|
||||
# else
|
||||
# elif defined(__xlc__) || defined(__xlC__) || defined(later_clang)
|
||||
vec_xst_be((uint8x16_p)data, off, VECTOR_CAST(dest));
|
||||
# elif defined(__VSX__)
|
||||
# if (CRYPTOPP_BIG_ENDIAN)
|
||||
vec_vsx_st((uint8x16_p)data, off, (byte*)dest);
|
||||
vec_vsx_st((uint8x16_p)data, off, VECTOR_CAST(dest));
|
||||
# else
|
||||
vec_vsx_st((uint8x16_p)VecReverse(data), off, (byte*)dest);
|
||||
vec_vsx_st((uint8x16_p)VecReverse(data), off, VECTOR_CAST(dest));
|
||||
# endif
|
||||
# else // Early Clang that claims to support Power8
|
||||
# if (CRYPTOPP_BIG_ENDIAN)
|
||||
VecStore_ALTIVEC((uint8x16_p)data, off, (byte*)dest);
|
||||
# else
|
||||
VecStore_ALTIVEC((uint8x16_p)VecReverse(data), off, (byte*)dest);
|
||||
# endif
|
||||
# endif
|
||||
#else // _ARCH_PWR8
|
||||
|
Loading…
x
Reference in New Issue
Block a user