Fix SHA ARM64 compile with MSVC compiler (GH #776)

pull/778/head
Jeffrey Walton 2019-01-04 11:18:34 -05:00
parent 5ccbd9af6a
commit 9277d115a8
No known key found for this signature in database
GPG Key ID: B36AB348921B1838
1 changed files with 17 additions and 2 deletions

View File

@ -45,6 +45,17 @@
# define EXCEPTION_EXECUTE_HANDLER 1
#endif
// Thanks to Peter Cordes, https://stackoverflow.com/q/54016821/608639
#if (CRYPTOPP_ARM_NEON_AVAILABLE)
# ifndef PACK32x4
# 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 // PACK32x4
#endif // Microsoft workaround
// Clang __m128i casts
#define M128_CAST(x) ((__m128i *)(void *)(x))
#define CONST_M128_CAST(x) ((const __m128i *)(const void *)(x))
@ -83,7 +94,9 @@ bool CPU_ProbeSHA1()
volatile bool result = true;
__try
{
uint32x4_t data1 = {1,2,3,4}, data2 = {5,6,7,8}, data3 = {9,10,11,12};
uint32x4_t data1 = PACK32x4(1,2,3,4);
uint32x4_t data2 = PACK32x4(5,6,7,8);
uint32x4_t data3 = PACK32x4(9,10,11,12);
uint32x4_t r1 = vsha1cq_u32 (data1, 0, data2);
uint32x4_t r2 = vsha1mq_u32 (data1, 0, data2);
@ -145,7 +158,9 @@ bool CPU_ProbeSHA2()
volatile bool result = true;
__try
{
uint32x4_t data1 = {1,2,3,4}, data2 = {5,6,7,8}, data3 = {9,10,11,12};
uint32x4_t data1 = PACK32x4(1,2,3,4);
uint32x4_t data2 = PACK32x4(5,6,7,8);
uint32x4_t data3 = PACK32x4(9,10,11,12);
uint32x4_t r1 = vsha256hq_u32 (data1, data2, data3);
uint32x4_t r2 = vsha256h2q_u32 (data1, data2, data3);