hash: fix build without SSE4.1
authorPablo de Lara <pablo.de.lara.guarch@intel.com>
Thu, 16 Jul 2015 09:00:54 +0000 (10:00 +0100)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Thu, 16 Jul 2015 14:52:15 +0000 (16:52 +0200)
_mm_test_all_zeros is not available for CPUs with no SSE4.1,
therefore, DPDK would not build.
This patch adds an alternative for this, using _mm_cmpeq_epi32 and
_mm_movemask_epi8.

Fixes: 48a399119619 ("hash: replace with cuckoo hash implementation")

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
lib/librte_hash/rte_cuckoo_hash.c

index 00ba3a3..d9ba066 100644 (file)
@@ -1125,9 +1125,15 @@ rte_hash_k16_cmp_eq(const void *key1, const void *key2, size_t key_len __rte_unu
 {
        const __m128i k1 = _mm_loadu_si128((const __m128i *) key1);
        const __m128i k2 = _mm_loadu_si128((const __m128i *) key2);
+#ifdef RTE_MACHINE_CPUFLAG_SSE4_1
        const __m128i x = _mm_xor_si128(k1, k2);
 
        return !_mm_test_all_zeros(x, x);
+#else
+       const __m128i x = _mm_cmpeq_epi32(k1, k2);
+
+       return (_mm_movemask_epi8(x) != 0xffff);
+#endif
 }
 
 static int