Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright(c) 2015 Intel Corporation
3 : : */
4 : :
5 : : #include <rte_vect.h>
6 : :
7 : : /* Functions to compare multiple of 16 byte keys (up to 128 bytes) */
8 : : static inline int
9 : 7325098 : rte_hash_k16_cmp_eq(const void *key1, const void *key2, size_t key_len __rte_unused)
10 : : {
11 : : const __m128i k1 = _mm_loadu_si128((const __m128i *) key1);
12 : : const __m128i k2 = _mm_loadu_si128((const __m128i *) key2);
13 : : const __m128i x = _mm_xor_si128(k1, k2);
14 : :
15 : 7325098 : return !_mm_test_all_zeros(x, x);
16 : : }
17 : :
18 : : static inline int
19 [ + - ]: 162 : rte_hash_k32_cmp_eq(const void *key1, const void *key2, size_t key_len)
20 : : {
21 [ - - - - : 162 : return rte_hash_k16_cmp_eq(key1, key2, key_len) ||
- - - - -
- - - - -
- - + - -
+ ]
22 : : rte_hash_k16_cmp_eq((const char *) key1 + 16,
23 : : (const char *) key2 + 16, key_len);
24 : : }
25 : :
26 : : static inline int
27 [ # # ]: 0 : rte_hash_k48_cmp_eq(const void *key1, const void *key2, size_t key_len)
28 : : {
29 [ # # ]: 0 : return rte_hash_k16_cmp_eq(key1, key2, key_len) ||
30 : : rte_hash_k16_cmp_eq((const char *) key1 + 16,
31 [ # # # # ]: 0 : (const char *) key2 + 16, key_len) ||
32 : : rte_hash_k16_cmp_eq((const char *) key1 + 32,
33 : : (const char *) key2 + 32, key_len);
34 : : }
35 : :
36 : : static inline int
37 [ # # ]: 0 : rte_hash_k64_cmp_eq(const void *key1, const void *key2, size_t key_len)
38 : : {
39 : 0 : return rte_hash_k32_cmp_eq(key1, key2, key_len) ||
40 : : rte_hash_k32_cmp_eq((const char *) key1 + 32,
41 : : (const char *) key2 + 32, key_len);
42 : : }
43 : :
44 : : static inline int
45 : 0 : rte_hash_k80_cmp_eq(const void *key1, const void *key2, size_t key_len)
46 : : {
47 [ # # # # ]: 0 : return rte_hash_k64_cmp_eq(key1, key2, key_len) ||
48 : : rte_hash_k16_cmp_eq((const char *) key1 + 64,
49 : : (const char *) key2 + 64, key_len);
50 : : }
51 : :
52 : : static inline int
53 : 0 : rte_hash_k96_cmp_eq(const void *key1, const void *key2, size_t key_len)
54 : : {
55 [ # # ]: 0 : return rte_hash_k64_cmp_eq(key1, key2, key_len) ||
56 : : rte_hash_k32_cmp_eq((const char *) key1 + 64,
57 : : (const char *) key2 + 64, key_len);
58 : : }
59 : :
60 : : static inline int
61 : 0 : rte_hash_k112_cmp_eq(const void *key1, const void *key2, size_t key_len)
62 : : {
63 : 0 : return rte_hash_k64_cmp_eq(key1, key2, key_len) ||
64 : : rte_hash_k32_cmp_eq((const char *) key1 + 64,
65 [ # # # # ]: 0 : (const char *) key2 + 64, key_len) ||
66 : : rte_hash_k16_cmp_eq((const char *) key1 + 96,
67 : : (const char *) key2 + 96, key_len);
68 : : }
69 : :
70 : : static inline int
71 : 0 : rte_hash_k128_cmp_eq(const void *key1, const void *key2, size_t key_len)
72 : : {
73 [ # # ]: 0 : return rte_hash_k64_cmp_eq(key1, key2, key_len) ||
74 [ # # ]: 0 : rte_hash_k64_cmp_eq((const char *) key1 + 64,
75 : : (const char *) key2 + 64, key_len);
76 : : }
|