FD.io VPP
v21.10.1-2-g0a485f517
Vector Packet Processing
bihash_24_16.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2015 Cisco and/or its affiliates.
3
* Licensed under the Apache License, Version 2.0 (the "License");
4
* you may not use this file except in compliance with the License.
5
* You may obtain a copy of the License at:
6
*
7
* http://www.apache.org/licenses/LICENSE-2.0
8
*
9
* Unless required by applicable law or agreed to in writing, software
10
* distributed under the License is distributed on an "AS IS" BASIS,
11
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
* See the License for the specific language governing permissions and
13
* limitations under the License.
14
*/
15
#undef BIHASH_TYPE
16
#undef BIHASH_KVP_PER_PAGE
17
#undef BIHASH_32_64_SVM
18
#undef BIHASH_ENABLE_STATS
19
#undef BIHASH_KVP_AT_BUCKET_LEVEL
20
#undef BIHASH_LAZY_INSTANTIATE
21
#undef BIHASH_BUCKET_PREFETCH_CACHE_LINES
22
#undef BIHASH_USE_HEAP
23
24
#define BIHASH_TYPE _24_16
25
#define BIHASH_KVP_PER_PAGE 4
26
#define BIHASH_KVP_AT_BUCKET_LEVEL 0
27
#define BIHASH_LAZY_INSTANTIATE 1
28
#define BIHASH_BUCKET_PREFETCH_CACHE_LINES 1
29
#define BIHASH_USE_HEAP 1
30
31
#ifndef __included_bihash_24_16_h__
32
#define __included_bihash_24_16_h__
33
34
#include <
vppinfra/crc32.h
>
35
#include <
vppinfra/heap.h
>
36
#include <
vppinfra/format.h
>
37
#include <
vppinfra/pool.h
>
38
#include <
vppinfra/xxhash.h
>
39
40
typedef
struct
41
{
42
u64
key
[3];
43
u64
value
[2];
44
}
clib_bihash_kv_24_16_t
;
45
46
static
inline
int
47
clib_bihash_is_free_24_16
(
const
clib_bihash_kv_24_16_t
* v)
48
{
49
/* Free values are clib_memset to 0xff, check a bit... */
50
if
(v->
key
[0] == ~0ULL && v->
value
[0] == ~0ULL && v->
value
[1] == ~0ULL)
51
return
1;
52
return
0;
53
}
54
55
static
inline
u64
56
clib_bihash_hash_24_16
(
const
clib_bihash_kv_24_16_t
* v)
57
{
58
#ifdef clib_crc32c_uses_intrinsics
59
return
clib_crc32c ((
u8
*) v->
key
, 24);
60
#else
61
u64
tmp
= v->
key
[0] ^ v->
key
[1] ^ v->
key
[2];
62
return
clib_xxhash
(
tmp
);
63
#endif
64
}
65
66
static
inline
u8
*
67
format_bihash_kvp_24_16
(
u8
* s, va_list * args)
68
{
69
clib_bihash_kv_24_16_t
*v = va_arg (*args,
clib_bihash_kv_24_16_t
*);
70
71
s =
format
(s,
"key %llu %llu %llu value %llu %llu"
,
72
v->
key
[0], v->
key
[1], v->
key
[2], v->
value
[0], v->
value
[1]);
73
return
s;
74
}
75
76
static
inline
int
77
clib_bihash_key_compare_24_16
(
u64
*
a
,
u64
*
b
)
78
{
79
#if defined (CLIB_HAVE_VEC512)
80
u64x8
v = u64x8_load_unaligned (
a
) ^ u64x8_load_unaligned (
b
);
81
return
(u64x8_is_zero_mask (v) & 0x7) == 0;
82
#elif defined(CLIB_HAVE_VEC128) && defined(CLIB_HAVE_VEC128_UNALIGNED_LOAD_STORE)
83
u64x2
v = {
a
[2] ^
b
[2], 0 };
84
v |= u64x2_load_unaligned (
a
) ^ u64x2_load_unaligned (
b
);
85
return
u64x2_is_all_zero (v);
86
#else
87
return
((
a
[0] ^
b
[0]) | (
a
[1] ^
b
[1]) | (
a
[2] ^
b
[2])) == 0;
88
#endif
89
}
90
91
#undef __included_bihash_template_h__
92
#include <
vppinfra/bihash_template.h
>
93
94
#endif
/* __included_bihash_24_16_h__ */
95
96
/*
97
* fd.io coding-style-patch-verification: ON
98
*
99
* Local Variables:
100
* eval: (c-set-style "gnu")
101
* End:
102
*/
tmp
u32 * tmp
Definition:
interface_output.c:1096
bihash_template.h
format_bihash_kvp_24_16
static u8 * format_bihash_kvp_24_16(u8 *s, va_list *args)
Definition:
bihash_24_16.h:67
u64x2
epu8_epi32 epu16_epi32 u64x2
Definition:
vector_sse42.h:444
clib_bihash_kv_24_16_t
Definition:
bihash_24_16.h:40
clib_bihash_hash_24_16
static u64 clib_bihash_hash_24_16(const clib_bihash_kv_24_16_t *v)
Definition:
bihash_24_16.h:56
key
typedef key
Definition:
ipsec_types.api:91
clib_bihash_kv_24_16_t::value
u64 value[2]
Definition:
bihash_24_16.h:43
clib_bihash_key_compare_24_16
static int clib_bihash_key_compare_24_16(u64 *a, u64 *b)
Definition:
bihash_24_16.h:77
crc32.h
pool.h
Fixed length block allocator. Pools are built from clib vectors and bitmaps. Use pools when repeatedl...
format.h
clib_xxhash
static u64 clib_xxhash(u64 key)
Definition:
xxhash.h:58
clib_bihash_kv_24_16_t::key
u64 key[3]
Definition:
bihash_24_16.h:42
xxhash.h
u64
unsigned long u64
Definition:
types.h:89
format
description fragment has unexpected format
Definition:
map.api:433
value
u8 value
Definition:
qos.api:54
b
vlib_buffer_t ** b
Definition:
nat44_ei_out2in.c:717
u8
unsigned char u8
Definition:
types.h:56
a
a
Definition:
bitmap.h:525
u64x8
__m512i u64x8
Definition:
vector_avx512.h:306
clib_bihash_is_free_24_16
static int clib_bihash_is_free_24_16(const clib_bihash_kv_24_16_t *v)
Definition:
bihash_24_16.h:47
heap.h
src
vppinfra
bihash_24_16.h
Generated on Sat Jan 8 2022 10:37:10 for FD.io VPP by
1.8.17