vppinfra: use crc32q instruction instead of xxhash in bihash_8_8 39/3339/3
authorDamjan Marion <damarion@cisco.com>
Tue, 11 Oct 2016 07:53:12 +0000 (09:53 +0200)
committerDave Barach <openvpp@barachs.net>
Tue, 11 Oct 2016 18:34:02 +0000 (18:34 +0000)
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>
vppinfra/Makefile.am
vppinfra/vppinfra/bihash_8_8.h

index 48a347e..d0a023e 100644 (file)
@@ -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 \
index 9b5da5a..4087d4d 100644 (file)
 #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