qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC 04/48] exec: introduce qemu_xxhash{2, 4, 5, 6, 7}


From: Alex Bennée
Subject: Re: [Qemu-devel] [RFC 04/48] exec: introduce qemu_xxhash{2, 4, 5, 6, 7}
Date: Wed, 14 Nov 2018 13:04:56 +0000
User-agent: mu4e 1.1.0; emacs 26.1.50

Emilio G. Cota <address@hidden> writes:

> Before moving them all to include/qemu/xxhash.h.
>
> Signed-off-by: Emilio G. Cota <address@hidden>

Reviewed-by: Alex Bennée <address@hidden>

> ---
>  include/exec/tb-hash-xx.h | 41 +++++++++++++++++++++++++++++----------
>  include/exec/tb-hash.h    |  2 +-
>  tests/qht-bench.c         |  2 +-
>  util/qsp.c                | 12 ++++++------
>  4 files changed, 39 insertions(+), 18 deletions(-)
>
> diff --git a/include/exec/tb-hash-xx.h b/include/exec/tb-hash-xx.h
> index 747a9a612c..98ce4b628a 100644
> --- a/include/exec/tb-hash-xx.h
> +++ b/include/exec/tb-hash-xx.h
> @@ -42,23 +42,23 @@
>  #define PRIME32_4    668265263U
>  #define PRIME32_5    374761393U
>
> -#define TB_HASH_XX_SEED 1
> +#define QEMU_XXHASH_SEED 1
>
>  /*
>   * xxhash32, customized for input variables that are not guaranteed to be
>   * contiguous in memory.
>   */
>  static inline uint32_t
> -tb_hash_func7(uint64_t a0, uint64_t b0, uint32_t e, uint32_t f, uint32_t g)
> +qemu_xxhash7(uint64_t ab, uint64_t cd, uint32_t e, uint32_t f, uint32_t g)
>  {
> -    uint32_t v1 = TB_HASH_XX_SEED + PRIME32_1 + PRIME32_2;
> -    uint32_t v2 = TB_HASH_XX_SEED + PRIME32_2;
> -    uint32_t v3 = TB_HASH_XX_SEED + 0;
> -    uint32_t v4 = TB_HASH_XX_SEED - PRIME32_1;
> -    uint32_t a = a0 >> 32;
> -    uint32_t b = a0;
> -    uint32_t c = b0 >> 32;
> -    uint32_t d = b0;
> +    uint32_t v1 = QEMU_XXHASH_SEED + PRIME32_1 + PRIME32_2;
> +    uint32_t v2 = QEMU_XXHASH_SEED + PRIME32_2;
> +    uint32_t v3 = QEMU_XXHASH_SEED + 0;
> +    uint32_t v4 = QEMU_XXHASH_SEED - PRIME32_1;
> +    uint32_t a = ab >> 32;
> +    uint32_t b = ab;
> +    uint32_t c = cd >> 32;
> +    uint32_t d = cd;
>      uint32_t h32;
>
>      v1 += a * PRIME32_2;
> @@ -98,4 +98,25 @@ tb_hash_func7(uint64_t a0, uint64_t b0, uint32_t e, 
> uint32_t f, uint32_t g)
>      return h32;
>  }
>
> +static inline uint32_t qemu_xxhash2(uint64_t ab)
> +{
> +    return qemu_xxhash7(ab, 0, 0, 0, 0);
> +}
> +
> +static inline uint32_t qemu_xxhash4(uint64_t ab, uint64_t cd)
> +{
> +    return qemu_xxhash7(ab, cd, 0, 0, 0);
> +}
> +
> +static inline uint32_t qemu_xxhash5(uint64_t ab, uint64_t cd, uint32_t e)
> +{
> +    return qemu_xxhash7(ab, cd, e, 0, 0);
> +}
> +
> +static inline uint32_t qemu_xxhash6(uint64_t ab, uint64_t cd, uint32_t e,
> +                                    uint32_t f)
> +{
> +    return qemu_xxhash7(ab, cd, e, f, 0);
> +}
> +
>  #endif /* EXEC_TB_HASH_XX_H */
> diff --git a/include/exec/tb-hash.h b/include/exec/tb-hash.h
> index 0526c4f678..731ba4c272 100644
> --- a/include/exec/tb-hash.h
> +++ b/include/exec/tb-hash.h
> @@ -61,7 +61,7 @@ static inline
>  uint32_t tb_hash_func(tb_page_addr_t phys_pc, target_ulong pc, uint32_t 
> flags,
>                        uint32_t cf_mask, uint32_t trace_vcpu_dstate)
>  {
> -    return tb_hash_func7(phys_pc, pc, flags, cf_mask, trace_vcpu_dstate);
> +    return qemu_xxhash7(phys_pc, pc, flags, cf_mask, trace_vcpu_dstate);
>  }
>
>  #endif
> diff --git a/tests/qht-bench.c b/tests/qht-bench.c
> index 2089e2bed1..2ea132fe57 100644
> --- a/tests/qht-bench.c
> +++ b/tests/qht-bench.c
> @@ -104,7 +104,7 @@ static bool is_equal(const void *ap, const void *bp)
>
>  static uint32_t h(unsigned long v)
>  {
> -    return tb_hash_func7(v, 0, 0, 0, 0);
> +    return qemu_xxhash2(v);
>  }
>
>  static uint32_t hval(unsigned long v)
> diff --git a/util/qsp.c b/util/qsp.c
> index a848b09c6d..dc29c41fde 100644
> --- a/util/qsp.c
> +++ b/util/qsp.c
> @@ -135,13 +135,13 @@ QemuCondWaitFunc qemu_cond_wait_func = 
> qemu_cond_wait_impl;
>   * without it we still get a pretty unique hash.
>   */
>  static inline
> -uint32_t do_qsp_callsite_hash(const QSPCallSite *callsite, uint64_t a)
> +uint32_t do_qsp_callsite_hash(const QSPCallSite *callsite, uint64_t ab)
>  {
> -    uint64_t b = (uint64_t)(uintptr_t)callsite->obj;
> +    uint64_t cd = (uint64_t)(uintptr_t)callsite->obj;
>      uint32_t e = callsite->line;
>      uint32_t f = callsite->type;
>
> -    return tb_hash_func7(a, b, e, f, 0);
> +    return qemu_xxhash6(ab, cd, e, f);
>  }
>
>  static inline
> @@ -169,11 +169,11 @@ static uint32_t qsp_entry_no_thread_hash(const QSPEntry 
> *entry)
>  static uint32_t qsp_entry_no_thread_obj_hash(const QSPEntry *entry)
>  {
>      const QSPCallSite *callsite = entry->callsite;
> -    uint64_t a = g_str_hash(callsite->file);
> -    uint64_t b = callsite->line;
> +    uint64_t ab = g_str_hash(callsite->file);
> +    uint64_t cd = callsite->line;
>      uint32_t e = callsite->type;
>
> -    return tb_hash_func7(a, b, e, 0, 0);
> +    return qemu_xxhash5(ab, cd, e);
>  }
>
>  static bool qsp_callsite_cmp(const void *ap, const void *bp)


--
Alex Bennée



reply via email to

[Prev in Thread] Current Thread [Next in Thread]