From a57d3567987ce6e3ab98932f202f2661c0904596 Mon Sep 17 00:00:00 2001 From: Leonid Evdokimov Date: Thu, 26 Sep 2024 17:54:43 +0300 Subject: [PATCH] k-hashv32, k-hashv64: expose compile-time constants in `--list` --- Hashes.cpp | 8 ++++++++ Hashes.h | 2 ++ main.cpp | 13 ++++--------- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Hashes.cpp b/Hashes.cpp index c33ae593..a2ab6ed6 100644 --- a/Hashes.cpp +++ b/Hashes.cpp @@ -1327,6 +1327,14 @@ void nmhash32x_test ( const void * key, int len, uint32_t seed, void * out ) { #ifdef HAVE_KHASHV #include "k-hashv/khashv.h" +#define KHASH_VER_STR "vector:" MACRO_ITOA(KHASH_VECTOR) ", " \ + "scalar:" MACRO_ITOA(KHASHV_SCALAR) ", " \ + "__SSE3__:" MACRO_ITOA(__SSE3__) ", " \ + "__SSE4_1__:" MACRO_ITOA(__SSE4_1__) ", " \ + "__AVX512VL__:" MACRO_ITOA(__AVX512VL__) +const char * const khashv32_desc("Vectorized K-HashV, 32-bit, " KHASH_VER_STR); +const char * const khashv64_desc("Vectorized K-HashV, 64-bit, " KHASH_VER_STR); + khashvSeed khashv_seed; void khashv_seed_init(size_t &seed) { khashv_prep_seed64 (&khashv_seed, seed); diff --git a/Hashes.h b/Hashes.h index 006e702a..cd21c6ca 100644 --- a/Hashes.h +++ b/Hashes.h @@ -1392,6 +1392,8 @@ inline void khash64_test ( const void *key, int len, uint32_t seed, void *out) { #ifndef HAVE_BIT32 void khashv_seed_init(size_t &seed); // call to khashv_hash_vector not inlined. +extern const char * const khashv32_desc; +extern const char * const khashv64_desc; void khashv32_test ( const void *key, int len, uint32_t seed, void *out); void khashv64_test ( const void *key, int len, uint32_t seed, void *out); #endif diff --git a/main.cpp b/main.cpp index bbd702b4..ab30085f 100644 --- a/main.cpp +++ b/main.cpp @@ -761,15 +761,10 @@ HashInfo g_hashes[] = { nmhash32_test, 32, nmhash32_broken() ? 0U : 0x12A30553, "nmhash32", nmhash32_desc, GOOD, {}}, { nmhash32x_test, 32, nmhash32_broken() ? 0U : 0xA8580227, "nmhash32x", nmhash32x_desc, GOOD, {}}, #ifdef HAVE_KHASHV -#ifdef __clang__ // also gcc 9.4 -#define KHASHV32_VERIF 0xB69DF8EB -#define KHASHV64_VERIF 0xA6B7E55B -#else // new gcc-11 -#define KHASHV32_VERIF 0 /* 0x9A8F7952 */ -#define KHASHV64_VERIF 0 /* 0X90A2A4F9 */ -#endif -{ khashv32_test, 32, KHASHV32_VERIF, "k-hashv32", "Vectorized K-HashV, 32-bit", GOOD, {}}, -{ khashv64_test, 64, KHASHV64_VERIF, "k-hashv64", "Vectorized K-HashV, 64-bit", GOOD, {}}, +// There are certain GCC versions producing 0x9A8F7952 and 0X90A2A4F9 as verification values +// for k-hashv32 and k-hashv64. That deserves further investigation. +{ khashv32_test, 32, 0xB69DF8EB, "k-hashv32", khashv32_desc, GOOD, {}}, +{ khashv64_test, 64, 0xA6B7E55B, "k-hashv64", khashv64_desc, GOOD, {}}, #endif { komihash_test, 64, 0x8157FF6D, "komihash", "komihash 5.10", GOOD, {} }, { polymur_test, 64, 0x4F894810, "polymur", "github.com/orlp/polymur-hash v1, __SIZEOF_INT128__:" MACRO_ITOA(__SIZEOF_INT128__), GOOD, {} },