diff options
author | 2016-10-11 09:53:12 +0200 | |
---|---|---|
committer | 2016-10-11 18:34:02 +0000 | |
commit | 383740d102769721f2da64c4d6666025b0543836 (patch) | |
tree | 24830f990bdfd8939d67c262be6c326426517688 | |
parent | dfa9c5bb9a6e9548267f3456724a5a1a7f342b06 (diff) |
vppinfra: use crc32q instruction instead of xxhash in bihash_8_8
xxhash calculation takes 10 clock cycles on Haswell so it makes sense
to use crc32q insutrction when available.
Change-Id: Iab5e7d9c8ec0125626bbcd067e5dc30574c8febc
Signed-off-by: Damjan Marion <damarion@cisco.com>
-rw-r--r-- | vppinfra/Makefile.am | 3 | ||||
-rw-r--r-- | vppinfra/vppinfra/bihash_8_8.h | 8 |
2 files changed, 11 insertions, 0 deletions
diff --git a/vppinfra/Makefile.am b/vppinfra/Makefile.am index 48a347e0..d0a023e2 100644 --- a/vppinfra/Makefile.am +++ b/vppinfra/Makefile.am @@ -224,6 +224,9 @@ nobase_include_HEADERS = \ CLIB_CORE = \ vppinfra/asm_x86.c \ vppinfra/backtrace.c \ + vppinfra/bihash_8_8.h \ + vppinfra/bihash_24_8.h \ + vppinfra/bihash_template.h \ vppinfra/cpu.c \ vppinfra/elf.c \ vppinfra/elog.c \ diff --git a/vppinfra/vppinfra/bihash_8_8.h b/vppinfra/vppinfra/bihash_8_8.h index 9b5da5a2..4087d4dd 100644 --- a/vppinfra/vppinfra/bihash_8_8.h +++ b/vppinfra/vppinfra/bihash_8_8.h @@ -25,6 +25,10 @@ #include <vppinfra/pool.h> #include <vppinfra/xxhash.h> +#if __SSE4_2__ +#include <x86intrin.h> +#endif + /** 8 octet key, 8 octet key value pair */ typedef struct { @@ -49,7 +53,11 @@ clib_bihash_is_free_8_8 (clib_bihash_kv_8_8_t * v) static inline u64 clib_bihash_hash_8_8 (clib_bihash_kv_8_8_t * v) { +#if __SSE4_2__ + return _mm_crc32_u64 (v->key, 0); +#else return clib_xxhash (v->key); +#endif } /** Format a clib_bihash_kv_8_8_t instance |