diff --git a/Hashes.cpp b/Hashes.cpp index 6145e56f..315fd062 100644 --- a/Hashes.cpp +++ b/Hashes.cpp @@ -1366,6 +1366,6 @@ void polymur_test ( const void *key, int len, uint32_t seed, void *out) { (uint64_t)seed); } -#if defined(HAVE_SSE2) && defined(HAVE_AESNI) && !defined(_MSC_VER) +#if defined(HAVE_SSE2) && defined(HAVE_AESNI) #include "aesnihash-peterrk.hpp" #endif diff --git a/Hashes.h b/Hashes.h index 872c9cb7..a5a06bf8 100644 --- a/Hashes.h +++ b/Hashes.h @@ -539,7 +539,6 @@ inline void t1ha0_ia32aes_noavx_test(const void * key, int len, uint32_t seed, v // objsize 0-39d: 925 *(uint64_t*)out = t1ha0_ia32aes_noavx(key, len, seed); } -void aesnihash_peterrk(const void * in, int len0, uint32_t seed, void * out); #endif #if defined(__AVX__) inline void t1ha0_ia32aes_avx1_test(const void * key, int len, uint32_t seed, void * out) @@ -1425,3 +1424,6 @@ extern "C" void crc64_jones_test2(const void *input, int len, uint32_t seed, voi extern "C" void crc64_jones_test3(const void *input, int len, uint32_t seed, void *out); extern "C" void crc64_jones_default(const void *input, int len, uint32_t seed, void *out); +#if defined(HAVE_SSE2) && defined(HAVE_AESNI) +void aesnihash_peterrk(const void * in, int len0, uint32_t seed, void * out); +#endif diff --git a/aesnihash-peterrk.hpp b/aesnihash-peterrk.hpp index 531e977b..fdb1d835 100644 --- a/aesnihash-peterrk.hpp +++ b/aesnihash-peterrk.hpp @@ -96,11 +96,21 @@ void aesnihash_peterrk(const void * in, int len0, uint32_t seed, void * out) { case 11: mix(GREEDILY_READ(11, msg)); break; case 10: mix(GREEDILY_READ(10, msg)); break; case 9: mix(GREEDILY_READ(9, msg)); break; +#ifndef _MSC_VER case 8: mix((__m128i)_mm_load_sd((const double *)msg)); break; +#else + // MSVC cannot copy __m128d -> __m128i + case 8: mix(GREEDILY_READ(7, msg)); break; +#endif case 7: mix(GREEDILY_READ(7, msg)); break; case 6: mix(GREEDILY_READ(6, msg)); break; case 5: mix(GREEDILY_READ(5, msg)); break; +#ifndef _MSC_VER case 4: mix((__m128i)_mm_load_ss((const float *)msg)); break; +#else + // MSVC cannot copy __m128 -> __m128i + case 4: mix(GREEDILY_READ(4, msg)); break; +#endif case 3: mix(GREEDILY_READ(3, msg)); break; case 2: mix(GREEDILY_READ(2, msg)); break; case 1: mix(GREEDILY_READ(1, msg)); break; diff --git a/main.cpp b/main.cpp index b846e6a6..dbdf52dc 100644 --- a/main.cpp +++ b/main.cpp @@ -385,10 +385,17 @@ HashInfo g_hashes[] = #if defined(HAVE_SSE2) && defined(HAVE_AESNI) && !defined(_MSC_VER) { aesnihash_test, 64, 0xA68E0D42, "aesnihash", "majek's seeded aesnihash with aesenc, 64-bit for x64", POOR, {0x70736575} }, -{ aesnihash_peterrk, 128, 0xF06DA1B1, "aesni-hash-peterrk", "PeterRK's seeded aesnihash with aesenc, 128-bit for x64", GOOD, {} }, { aesni128_test, 128, 0xF06DA1B1, "aesni", "aesni 128bit", GOOD,{} }, { aesni64_test, 64, 0x3AA1A480, "aesni-low","aesni 64bit", GOOD,{} }, #endif +#if defined(HAVE_SSE2) && defined(HAVE_AESNI) +#ifndef _MSC_VER +#define AESPRK_VFY 0xF06DA1B1 +#else +#define AESPRK_VFY 0x4E311231 +#endif +{ aesnihash_peterrk, 128, AESPRK_VFY, "aesni-hash-peterrk", "PeterRK's seeded aesnihash, 128-bit for x64, unportable", GOOD, {} }, +#endif #if defined(HAVE_SSE2) && defined(__x86_64__) && !defined(_WIN32) && !defined(_MSC_VER) { falkhash_test_cxx, 64, 0x2F99B071, "falkhash", "falkhash.asm with aesenc, 64-bit for x64", POOR, {} }, #endif