CNDP  22.08.0
cne_cmp_x86.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2015-2022 Intel Corporation
3  */
8 #include <cne_vect.h>
9 
10 /* Functions to compare multiple of 16 byte keys (up to 128 bytes) */
11 static int
12 cne_hash_k16_cmp_eq(const void *key1, const void *key2, size_t key_len __cne_unused)
13 {
14  const __m128i k1 = _mm_loadu_si128((const __m128i *)key1);
15  const __m128i k2 = _mm_loadu_si128((const __m128i *)key2);
16  const __m128i x = _mm_xor_si128(k1, k2);
17 
18  return !_mm_test_all_zeros(x, x);
19 }
20 
21 static int
22 cne_hash_k32_cmp_eq(const void *key1, const void *key2, size_t key_len)
23 {
24  return cne_hash_k16_cmp_eq(key1, key2, key_len) ||
25  cne_hash_k16_cmp_eq((const char *)key1 + 16, (const char *)key2 + 16, key_len);
26 }
27 
28 static int
29 cne_hash_k48_cmp_eq(const void *key1, const void *key2, size_t key_len)
30 {
31  return cne_hash_k16_cmp_eq(key1, key2, key_len) ||
32  cne_hash_k16_cmp_eq((const char *)key1 + 16, (const char *)key2 + 16, key_len) ||
33  cne_hash_k16_cmp_eq((const char *)key1 + 32, (const char *)key2 + 32, key_len);
34 }
35 
36 static int
37 cne_hash_k64_cmp_eq(const void *key1, const void *key2, size_t key_len)
38 {
39  return cne_hash_k32_cmp_eq(key1, key2, key_len) ||
40  cne_hash_k32_cmp_eq((const char *)key1 + 32, (const char *)key2 + 32, key_len);
41 }
42 
43 static int
44 cne_hash_k80_cmp_eq(const void *key1, const void *key2, size_t key_len)
45 {
46  return cne_hash_k64_cmp_eq(key1, key2, key_len) ||
47  cne_hash_k16_cmp_eq((const char *)key1 + 64, (const char *)key2 + 64, key_len);
48 }
49 
50 static int
51 cne_hash_k96_cmp_eq(const void *key1, const void *key2, size_t key_len)
52 {
53  return cne_hash_k64_cmp_eq(key1, key2, key_len) ||
54  cne_hash_k32_cmp_eq((const char *)key1 + 64, (const char *)key2 + 64, key_len);
55 }
56 
57 static int
58 cne_hash_k112_cmp_eq(const void *key1, const void *key2, size_t key_len)
59 {
60  return cne_hash_k64_cmp_eq(key1, key2, key_len) ||
61  cne_hash_k32_cmp_eq((const char *)key1 + 64, (const char *)key2 + 64, key_len) ||
62  cne_hash_k16_cmp_eq((const char *)key1 + 96, (const char *)key2 + 96, key_len);
63 }
64 
65 static int
66 cne_hash_k128_cmp_eq(const void *key1, const void *key2, size_t key_len)
67 {
68  return cne_hash_k64_cmp_eq(key1, key2, key_len) ||
69  cne_hash_k64_cmp_eq((const char *)key1 + 64, (const char *)key2 + 64, key_len);
70 }
#define __cne_unused
Definition: cne_common.h:144