DPDK
25.11.0
Toggle main menu visibility
Loading...
Searching...
No Matches
rte_cmp_x86.h
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
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
return
!_mm_test_all_zeros(x, x);
16
}
17
18
static
inline
int
19
rte_hash_k32_cmp_eq(
const
void
*key1,
const
void
*key2,
size_t
key_len)
20
{
21
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
rte_hash_k48_cmp_eq(
const
void
*key1,
const
void
*key2,
size_t
key_len)
28
{
29
return
rte_hash_k16_cmp_eq(key1, key2, key_len) ||
30
rte_hash_k16_cmp_eq((
const
char
*) key1 + 16,
31
(
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
rte_hash_k64_cmp_eq(
const
void
*key1,
const
void
*key2,
size_t
key_len)
38
{
39
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
rte_hash_k80_cmp_eq(
const
void
*key1,
const
void
*key2,
size_t
key_len)
46
{
47
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
rte_hash_k96_cmp_eq(
const
void
*key1,
const
void
*key2,
size_t
key_len)
54
{
55
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
rte_hash_k112_cmp_eq(
const
void
*key1,
const
void
*key2,
size_t
key_len)
62
{
63
return
rte_hash_k64_cmp_eq(key1, key2, key_len) ||
64
rte_hash_k32_cmp_eq((
const
char
*) key1 + 64,
65
(
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
rte_hash_k128_cmp_eq(
const
void
*key1,
const
void
*key2,
size_t
key_len)
72
{
73
return
rte_hash_k64_cmp_eq(key1, key2, key_len) ||
74
rte_hash_k64_cmp_eq((
const
char
*) key1 + 64,
75
(
const
char
*) key2 + 64, key_len);
76
}
__rte_unused
#define __rte_unused
Definition
rte_common.h:248
rte_vect.h
lib
hash
rte_cmp_x86.h
Generated by
1.17.0