mirror of https://github.com/Cyan4973/xxHash.git
fixed dispatcher compilation in c++ mode
This commit is contained in:
parent
6379a93461
commit
e4ecae117c
|
@ -24,6 +24,8 @@ matrix:
|
|||
- make dispatch
|
||||
- make clean
|
||||
- CC=g++ make CFLAGS="-O2 -mavx512f"
|
||||
- make clean
|
||||
- CC=g++ make CFLAGS="-Wall -Wextra" DISPATCH=1
|
||||
|
||||
- name: Check results consistency on x64
|
||||
arch: amd64
|
||||
|
|
56
xxh3.h
56
xxh3.h
|
@ -1702,28 +1702,28 @@ XXH3_mergeAccs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secre
|
|||
XXH_PRIME64_4, XXH_PRIME32_2, XXH_PRIME64_5, XXH_PRIME32_1 }
|
||||
|
||||
XXH_FORCE_INLINE XXH64_hash_t
|
||||
XXH3_hashLong_64b_internal(const xxh_u8* XXH_RESTRICT input, size_t len,
|
||||
const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
|
||||
XXH3_hashLong_64b_internal(const void* XXH_RESTRICT input, size_t len,
|
||||
const void* XXH_RESTRICT secret, size_t secretSize,
|
||||
XXH3_f_accumulate_512 f_acc512,
|
||||
XXH3_f_scrambleAcc f_scramble)
|
||||
{
|
||||
XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC;
|
||||
|
||||
XXH3_hashLong_internal_loop(acc, input, len, secret, secretSize, f_acc512, f_scramble);
|
||||
XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, (const xxh_u8*)secret, secretSize, f_acc512, f_scramble);
|
||||
|
||||
/* converge into final hash */
|
||||
XXH_STATIC_ASSERT(sizeof(acc) == 64);
|
||||
/* do not align on 8, so that the secret is different from the accumulator */
|
||||
#define XXH_SECRET_MERGEACCS_START 11
|
||||
XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);
|
||||
return XXH3_mergeAccs(acc, secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)len * XXH_PRIME64_1);
|
||||
return XXH3_mergeAccs(acc, (const xxh_u8*)secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)len * XXH_PRIME64_1);
|
||||
}
|
||||
|
||||
/*
|
||||
* It's important for performance that XXH3_hashLong is not inlined.
|
||||
*/
|
||||
XXH_NO_INLINE XXH64_hash_t
|
||||
XXH3_hashLong_64b_withSecret(const xxh_u8* XXH_RESTRICT input, size_t len,
|
||||
XXH3_hashLong_64b_withSecret(const void* XXH_RESTRICT input, size_t len,
|
||||
XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen)
|
||||
{
|
||||
(void)seed64;
|
||||
|
@ -1738,7 +1738,7 @@ XXH3_hashLong_64b_withSecret(const xxh_u8* XXH_RESTRICT input, size_t len,
|
|||
* and uses this opportunity to streamline the generated code for better performance.
|
||||
*/
|
||||
XXH_NO_INLINE XXH64_hash_t
|
||||
XXH3_hashLong_64b_default(const xxh_u8* XXH_RESTRICT input, size_t len,
|
||||
XXH3_hashLong_64b_default(const void* XXH_RESTRICT input, size_t len,
|
||||
XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen)
|
||||
{
|
||||
(void)seed64; (void)secret; (void)secretLen;
|
||||
|
@ -1757,7 +1757,7 @@ XXH3_hashLong_64b_default(const xxh_u8* XXH_RESTRICT input, size_t len,
|
|||
* why (uop cache maybe?), but the difference is large and easily measurable.
|
||||
*/
|
||||
XXH_FORCE_INLINE XXH64_hash_t
|
||||
XXH3_hashLong_64b_withSeed_internal(const xxh_u8* input, size_t len,
|
||||
XXH3_hashLong_64b_withSeed_internal(const void* input, size_t len,
|
||||
XXH64_hash_t seed,
|
||||
XXH3_f_accumulate_512 f_acc512,
|
||||
XXH3_f_scrambleAcc f_scramble,
|
||||
|
@ -1778,7 +1778,7 @@ XXH3_hashLong_64b_withSeed_internal(const xxh_u8* input, size_t len,
|
|||
* It's important for performance that XXH3_hashLong is not inlined.
|
||||
*/
|
||||
XXH_NO_INLINE XXH64_hash_t
|
||||
XXH3_hashLong_64b_withSeed(const xxh_u8* input, size_t len,
|
||||
XXH3_hashLong_64b_withSeed(const void* input, size_t len,
|
||||
XXH64_hash_t seed, const xxh_u8* secret, size_t secretLen)
|
||||
{
|
||||
(void)secret; (void)secretLen;
|
||||
|
@ -1787,7 +1787,7 @@ XXH3_hashLong_64b_withSeed(const xxh_u8* input, size_t len,
|
|||
}
|
||||
|
||||
|
||||
typedef XXH64_hash_t (*XXH3_hashLong64_f)(const xxh_u8* XXH_RESTRICT, size_t,
|
||||
typedef XXH64_hash_t (*XXH3_hashLong64_f)(const void* XXH_RESTRICT, size_t,
|
||||
XXH64_hash_t, const xxh_u8* XXH_RESTRICT, size_t);
|
||||
|
||||
XXH_FORCE_INLINE XXH64_hash_t
|
||||
|
@ -1809,7 +1809,7 @@ XXH3_64bits_internal(const void* XXH_RESTRICT input, size_t len,
|
|||
return XXH3_len_17to128_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
|
||||
if (len <= XXH3_MIDSIZE_MAX)
|
||||
return XXH3_len_129to240_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
|
||||
return f_hashLong((const xxh_u8*)input, len, seed64, (const xxh_u8*)secret, secretLen);
|
||||
return f_hashLong(input, len, seed64, (const xxh_u8*)secret, secretLen);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2434,14 +2434,14 @@ XXH3_len_129to240_128b(const xxh_u8* XXH_RESTRICT input, size_t len,
|
|||
}
|
||||
|
||||
XXH_FORCE_INLINE XXH128_hash_t
|
||||
XXH3_hashLong_128b_internal(const xxh_u8* XXH_RESTRICT input, size_t len,
|
||||
XXH3_hashLong_128b_internal(const void* XXH_RESTRICT input, size_t len,
|
||||
const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
|
||||
XXH3_f_accumulate_512 f_acc512,
|
||||
XXH3_f_scrambleAcc f_scramble)
|
||||
{
|
||||
XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC;
|
||||
|
||||
XXH3_hashLong_internal_loop(acc, input, len, secret, secretSize, f_acc512, f_scramble);
|
||||
XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, secret, secretSize, f_acc512, f_scramble);
|
||||
|
||||
/* converge into final hash */
|
||||
XXH_STATIC_ASSERT(sizeof(acc) == 64);
|
||||
|
@ -2462,9 +2462,9 @@ XXH3_hashLong_128b_internal(const xxh_u8* XXH_RESTRICT input, size_t len,
|
|||
* It's important for performance that XXH3_hashLong is not inlined.
|
||||
*/
|
||||
XXH_NO_INLINE XXH128_hash_t
|
||||
XXH3_hashLong_128b_default(const xxh_u8* XXH_RESTRICT input, size_t len,
|
||||
XXH3_hashLong_128b_default(const void* XXH_RESTRICT input, size_t len,
|
||||
XXH64_hash_t seed64,
|
||||
const xxh_u8* XXH_RESTRICT secret, size_t secretLen)
|
||||
const void* XXH_RESTRICT secret, size_t secretLen)
|
||||
{
|
||||
(void)seed64; (void)secret; (void)secretLen;
|
||||
return XXH3_hashLong_128b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret),
|
||||
|
@ -2475,17 +2475,17 @@ XXH3_hashLong_128b_default(const xxh_u8* XXH_RESTRICT input, size_t len,
|
|||
* It's important for performance that XXH3_hashLong is not inlined.
|
||||
*/
|
||||
XXH_NO_INLINE XXH128_hash_t
|
||||
XXH3_hashLong_128b_withSecret(const xxh_u8* XXH_RESTRICT input, size_t len,
|
||||
XXH3_hashLong_128b_withSecret(const void* XXH_RESTRICT input, size_t len,
|
||||
XXH64_hash_t seed64,
|
||||
const xxh_u8* XXH_RESTRICT secret, size_t secretLen)
|
||||
const void* XXH_RESTRICT secret, size_t secretLen)
|
||||
{
|
||||
(void)seed64;
|
||||
return XXH3_hashLong_128b_internal(input, len, secret, secretLen,
|
||||
return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, secretLen,
|
||||
XXH3_accumulate_512, XXH3_scrambleAcc);
|
||||
}
|
||||
|
||||
XXH_FORCE_INLINE XXH128_hash_t
|
||||
XXH3_hashLong_128b_withSeed_internal(const xxh_u8* XXH_RESTRICT input, size_t len,
|
||||
XXH3_hashLong_128b_withSeed_internal(const void* XXH_RESTRICT input, size_t len,
|
||||
XXH64_hash_t seed64,
|
||||
XXH3_f_accumulate_512 f_acc512,
|
||||
XXH3_f_scrambleAcc f_scramble,
|
||||
|
@ -2497,7 +2497,7 @@ XXH3_hashLong_128b_withSeed_internal(const xxh_u8* XXH_RESTRICT input, size_t le
|
|||
f_acc512, f_scramble);
|
||||
{ XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];
|
||||
f_initSec(secret, seed64);
|
||||
return XXH3_hashLong_128b_internal(input, len, secret, sizeof(secret),
|
||||
return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, sizeof(secret),
|
||||
f_acc512, f_scramble);
|
||||
}
|
||||
}
|
||||
|
@ -2506,20 +2506,20 @@ XXH3_hashLong_128b_withSeed_internal(const xxh_u8* XXH_RESTRICT input, size_t le
|
|||
* It's important for performance that XXH3_hashLong is not inlined.
|
||||
*/
|
||||
XXH_NO_INLINE XXH128_hash_t
|
||||
XXH3_hashLong_128b_withSeed(const xxh_u8* input, size_t len,
|
||||
XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen)
|
||||
XXH3_hashLong_128b_withSeed(const void* input, size_t len,
|
||||
XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen)
|
||||
{
|
||||
(void)secret; (void)secretLen;
|
||||
return XXH3_hashLong_128b_withSeed_internal(input, len, seed64,
|
||||
XXH3_accumulate_512, XXH3_scrambleAcc, XXH3_initCustomSecret);
|
||||
}
|
||||
|
||||
typedef XXH128_hash_t (*XXH3_hashLong128_f)(const xxh_u8* XXH_RESTRICT, size_t,
|
||||
XXH64_hash_t, const xxh_u8* XXH_RESTRICT, size_t);
|
||||
typedef XXH128_hash_t (*XXH3_hashLong128_f)(const void* XXH_RESTRICT, size_t,
|
||||
XXH64_hash_t, const void* XXH_RESTRICT, size_t);
|
||||
|
||||
XXH_FORCE_INLINE XXH128_hash_t
|
||||
XXH3_128bits_internal(const void* input, size_t len,
|
||||
XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen,
|
||||
XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen,
|
||||
XXH3_hashLong128_f f_hl128)
|
||||
{
|
||||
XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN);
|
||||
|
@ -2530,12 +2530,12 @@ XXH3_128bits_internal(const void* input, size_t len,
|
|||
* Adding a check and a branch here would cost performance at every hash.
|
||||
*/
|
||||
if (len <= 16)
|
||||
return XXH3_len_0to16_128b((const xxh_u8*)input, len, secret, seed64);
|
||||
return XXH3_len_0to16_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64);
|
||||
if (len <= 128)
|
||||
return XXH3_len_17to128_128b((const xxh_u8*)input, len, secret, secretLen, seed64);
|
||||
return XXH3_len_17to128_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
|
||||
if (len <= XXH3_MIDSIZE_MAX)
|
||||
return XXH3_len_129to240_128b((const xxh_u8*)input, len, secret, secretLen, seed64);
|
||||
return f_hl128((const xxh_u8*)input, len, seed64, secret, secretLen);
|
||||
return XXH3_len_129to240_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
|
||||
return f_hl128(input, len, seed64, secret, secretLen);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -33,6 +33,10 @@
|
|||
*/
|
||||
|
||||
|
||||
#if defined (__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Dispatcher code for XXH3 on x86-based targets.
|
||||
*/
|
||||
|
@ -459,14 +463,14 @@ XXHL128_default_avx512(const void* XXH_RESTRICT input, size_t len)
|
|||
XXH_NO_INLINE XXH128_hash_t
|
||||
XXHL128_secret_scalar(const void* XXH_RESTRICT input, size_t len, const void* XXH_RESTRICT secret, size_t secretLen)
|
||||
{
|
||||
return XXH3_hashLong_128b_internal(input, len, secret, secretLen,
|
||||
return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, secretLen,
|
||||
XXH3_accumulate_512_scalar, XXH3_scrambleAcc_scalar);
|
||||
}
|
||||
|
||||
XXH_NO_INLINE XXH_TARGET_SSE2 XXH128_hash_t
|
||||
XXHL128_secret_sse2(const void* XXH_RESTRICT input, size_t len, const void* XXH_RESTRICT secret, size_t secretLen)
|
||||
{
|
||||
return XXH3_hashLong_128b_internal(input, len, secret, secretLen,
|
||||
return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, secretLen,
|
||||
XXH3_accumulate_512_sse2, XXH3_scrambleAcc_sse2);
|
||||
}
|
||||
|
||||
|
@ -474,7 +478,7 @@ XXHL128_secret_sse2(const void* XXH_RESTRICT input, size_t len, const void* XXH_
|
|||
XXH_NO_INLINE XXH_TARGET_AVX2 XXH128_hash_t
|
||||
XXHL128_secret_avx2(const void* XXH_RESTRICT input, size_t len, const void* XXH_RESTRICT secret, size_t secretLen)
|
||||
{
|
||||
return XXH3_hashLong_128b_internal(input, len, secret, secretLen,
|
||||
return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, secretLen,
|
||||
XXH3_accumulate_512_avx2, XXH3_scrambleAcc_avx2);
|
||||
}
|
||||
#endif
|
||||
|
@ -483,7 +487,7 @@ XXHL128_secret_avx2(const void* XXH_RESTRICT input, size_t len, const void* XXH_
|
|||
XXH_NO_INLINE XXH_TARGET_AVX512 XXH128_hash_t
|
||||
XXHL128_secret_avx512(const void* XXH_RESTRICT input, size_t len, const void* XXH_RESTRICT secret, size_t secretLen)
|
||||
{
|
||||
return XXH3_hashLong_128b_internal(input, len, secret, secretLen,
|
||||
return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, secretLen,
|
||||
XXH3_accumulate_512_avx512, XXH3_scrambleAcc_avx512);
|
||||
}
|
||||
#endif
|
||||
|
@ -640,7 +644,7 @@ static void setDispatch(void)
|
|||
/* ==== XXH3 public functions ==== */
|
||||
|
||||
static XXH64_hash_t
|
||||
XXH3_hashLong_64b_defaultSecret_selection(const xxh_u8* input, size_t len,
|
||||
XXH3_hashLong_64b_defaultSecret_selection(const void* input, size_t len,
|
||||
XXH64_hash_t seed64, const xxh_u8* secret, size_t secretLen)
|
||||
{
|
||||
(void)seed64; (void)secret; (void)secretLen;
|
||||
|
@ -654,7 +658,7 @@ XXH64_hash_t XXH3_64bits_dispatch(const void* input, size_t len)
|
|||
}
|
||||
|
||||
static XXH64_hash_t
|
||||
XXH3_hashLong_64b_withSeed_selection(const xxh_u8* input, size_t len,
|
||||
XXH3_hashLong_64b_withSeed_selection(const void* input, size_t len,
|
||||
XXH64_hash_t seed64, const xxh_u8* secret, size_t secretLen)
|
||||
{
|
||||
(void)secret; (void)secretLen;
|
||||
|
@ -668,7 +672,7 @@ XXH64_hash_t XXH3_64bits_withSeed_dispatch(const void* input, size_t len, XXH64_
|
|||
}
|
||||
|
||||
static XXH64_hash_t
|
||||
XXH3_hashLong_64b_withSecret_selection(const xxh_u8* input, size_t len,
|
||||
XXH3_hashLong_64b_withSecret_selection(const void* input, size_t len,
|
||||
XXH64_hash_t seed64, const xxh_u8* secret, size_t secretLen)
|
||||
{
|
||||
(void)seed64;
|
||||
|
@ -692,8 +696,8 @@ XXH3_64bits_update_dispatch(XXH3_state_t* state, const void* input, size_t len)
|
|||
/* ==== XXH128 public functions ==== */
|
||||
|
||||
static XXH128_hash_t
|
||||
XXH3_hashLong_128b_defaultSecret_selection(const xxh_u8* input, size_t len,
|
||||
XXH64_hash_t seed64, const xxh_u8* secret, size_t secretLen)
|
||||
XXH3_hashLong_128b_defaultSecret_selection(const void* input, size_t len,
|
||||
XXH64_hash_t seed64, const void* secret, size_t secretLen)
|
||||
{
|
||||
(void)seed64; (void)secret; (void)secretLen;
|
||||
if (g_dispatch128.hashLong128_default == NULL) setDispatch();
|
||||
|
@ -706,8 +710,8 @@ XXH128_hash_t XXH3_128bits_dispatch(const void* input, size_t len)
|
|||
}
|
||||
|
||||
static XXH128_hash_t
|
||||
XXH3_hashLong_128b_withSeed_selection(const xxh_u8* input, size_t len,
|
||||
XXH64_hash_t seed64, const xxh_u8* secret, size_t secretLen)
|
||||
XXH3_hashLong_128b_withSeed_selection(const void* input, size_t len,
|
||||
XXH64_hash_t seed64, const void* secret, size_t secretLen)
|
||||
{
|
||||
(void)secret; (void)secretLen;
|
||||
if (g_dispatch128.hashLong128_seed == NULL) setDispatch();
|
||||
|
@ -720,8 +724,8 @@ XXH128_hash_t XXH3_128bits_withSeed_dispatch(const void* input, size_t len, XXH6
|
|||
}
|
||||
|
||||
static XXH128_hash_t
|
||||
XXH3_hashLong_128b_withSecret_selection(const xxh_u8* input, size_t len,
|
||||
XXH64_hash_t seed64, const xxh_u8* secret, size_t secretLen)
|
||||
XXH3_hashLong_128b_withSecret_selection(const void* input, size_t len,
|
||||
XXH64_hash_t seed64, const void* secret, size_t secretLen)
|
||||
{
|
||||
(void)seed64;
|
||||
if (g_dispatch128.hashLong128_secret == NULL) setDispatch();
|
||||
|
@ -739,3 +743,7 @@ XXH3_128bits_update_dispatch(XXH3_state_t* state, const void* input, size_t len)
|
|||
if (g_dispatch128.update == NULL) setDispatch();
|
||||
return g_dispatch128.update(state, (const xxh_u8*)input, len);
|
||||
}
|
||||
|
||||
#if defined (__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -35,13 +35,12 @@
|
|||
#ifndef XXH_X86DISPATCH_H_13563687684
|
||||
#define XXH_X86DISPATCH_H_13563687684
|
||||
|
||||
#include "xxhash.h" /* XXH64_hash_t, XXH3_state_t */
|
||||
|
||||
#if defined (__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include "xxhash.h" /* XXH64_hash_t, XXH3_state_t */
|
||||
|
||||
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_dispatch(const void* input, size_t len);
|
||||
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSeed_dispatch(const void* input, size_t len, XXH64_hash_t seed);
|
||||
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSecret_dispatch(const void* input, size_t len, const void* secret, size_t secretLen);
|
||||
|
@ -52,6 +51,10 @@ XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSeed_dispatch(const void* input, s
|
|||
XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSecret_dispatch(const void* input, size_t len, const void* secret, size_t secretLen);
|
||||
XXH_PUBLIC_API XXH_errorcode XXH3_128bits_update_dispatch(XXH3_state_t* state, const void* input, size_t len);
|
||||
|
||||
#if defined (__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* automatic replacement of XXH3 functions.
|
||||
* can be disabled by setting XXH_DISPATCH_DISABLE_REPLACE */
|
||||
|
@ -80,9 +83,4 @@ XXH_PUBLIC_API XXH_errorcode XXH3_128bits_update_dispatch(XXH3_state_t* state, c
|
|||
|
||||
#endif /* XXH_DISPATCH_DISABLE_REPLACE */
|
||||
|
||||
|
||||
#if defined (__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* XXH_X86DISPATCH_H_13563687684 */
|
||||
|
|
Loading…
Reference in New Issue