Fix ChaCha NEON compile with MSVC compiler (GH #776)
parent
8baa2f7a27
commit
b70bc4865f
|
|
@ -70,6 +70,15 @@ ANONYMOUS_NAMESPACE_BEGIN
|
||||||
|
|
||||||
// ***************************** NEON ***************************** //
|
// ***************************** NEON ***************************** //
|
||||||
|
|
||||||
|
// Thanks to Peter Cordes, https://stackoverflow.com/q/54016821/608639
|
||||||
|
#if (CRYPTOPP_ARM_NEON_AVAILABLE)
|
||||||
|
# if defined(_MSC_VER)
|
||||||
|
# define PACK32x4(w,x,y,z) { ((w) + (word64(x) << 32)), ((y) + (word64(z) << 32)) }
|
||||||
|
# else
|
||||||
|
# define PACK32x4(w,x,y,z) { (w), (x), (y), (z) }
|
||||||
|
# endif
|
||||||
|
#endif // Microsoft workaround
|
||||||
|
|
||||||
#if (CRYPTOPP_ARM_NEON_AVAILABLE)
|
#if (CRYPTOPP_ARM_NEON_AVAILABLE)
|
||||||
|
|
||||||
template <unsigned int R>
|
template <unsigned int R>
|
||||||
|
|
@ -303,7 +312,9 @@ void ChaCha_OperateKeystream_NEON(const word32 *state, const byte* input, byte *
|
||||||
const uint32x4_t state3 = vld1q_u32(state + 3*4);
|
const uint32x4_t state3 = vld1q_u32(state + 3*4);
|
||||||
|
|
||||||
const uint32x4_t CTRS[3] = {
|
const uint32x4_t CTRS[3] = {
|
||||||
{1,0,0,0}, {2,0,0,0}, {3,0,0,0}
|
PACK32x4(1,0,0,0),
|
||||||
|
PACK32x4(2,0,0,0),
|
||||||
|
PACK32x4(3,0,0,0)
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32x4_t r0_0 = state0;
|
uint32x4_t r0_0 = state0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue