FD.io VPP
v21.10.1-2-g0a485f517
Vector Packet Processing
bihash_16_8.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2016 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 _16_8
25
#define BIHASH_KVP_PER_PAGE 4
26
#define BIHASH_KVP_AT_BUCKET_LEVEL 1
27
#define BIHASH_LAZY_INSTANTIATE 0
28
#define BIHASH_BUCKET_PREFETCH_CACHE_LINES 2
29
#define BIHASH_USE_HEAP 1
30
31
#ifndef __included_bihash_16_8_h__
32
#define __included_bihash_16_8_h__
33
34
#include <
vppinfra/heap.h
>
35
#include <
vppinfra/format.h
>
36
#include <
vppinfra/pool.h
>
37
#include <
vppinfra/xxhash.h
>
38
#include <
vppinfra/crc32.h
>
39
40
typedef
struct
41
{
42
u64
key
[2];
43
u64
value
;
44
}
clib_bihash_kv_16_8_t
;
45
46
static
inline
int
47
clib_bihash_is_free_16_8
(
clib_bihash_kv_16_8_t
* v)
48
{
49
/* Free values are clib_memset to 0xff, check a bit... */
50
if
(v->
key
[0] == ~0ULL && v->
value
== ~0ULL)
51
return
1;
52
return
0;
53
}
54
55
static
inline
u64
56
clib_bihash_hash_16_8
(
clib_bihash_kv_16_8_t
* v)
57
{
58
#ifdef clib_crc32c_uses_intrinsics
59
return
clib_crc32c ((
u8
*) v->
key
, 16);
60
#else
61
u64
tmp
= v->
key
[0] ^ v->
key
[1];
62
return
clib_xxhash
(
tmp
);
63
#endif
64
}
65
66
static
inline
u8
*
67
format_bihash_kvp_16_8
(
u8
* s, va_list * args)
68
{
69
clib_bihash_kv_16_8_t
*v = va_arg (*args,
clib_bihash_kv_16_8_t
*);
70
71
s =
format
(s,
"key %llu %llu value %llu"
, v->
key
[0], v->
key
[1], v->
value
);
72
return
s;
73
}
74
75
static
inline
int
76
clib_bihash_key_compare_16_8
(
u64
*
a
,
u64
*
b
)
77
{
78
#if defined(CLIB_HAVE_VEC128) && defined(CLIB_HAVE_VEC128_UNALIGNED_LOAD_STORE)
79
u64x2
v;
80
v = u64x2_load_unaligned (
a
) ^ u64x2_load_unaligned (
b
);
81
return
u64x2_is_all_zero (v);
82
#else
83
return
((
a
[0] ^
b
[0]) | (
a
[1] ^
b
[1])) == 0;
84
#endif
85
}
86
87
#undef __included_bihash_template_h__
88
#include <
vppinfra/bihash_template.h
>
89
90
#endif
/* __included_bihash_16_8_h__ */
91
92
/*
93
* fd.io coding-style-patch-verification: ON
94
*
95
* Local Variables:
96
* eval: (c-set-style "gnu")
97
* End:
98
*/
tmp
u32 * tmp
Definition:
interface_output.c:1096
clib_bihash_kv_16_8_t::value
u64 value
Definition:
bihash_16_8.h:43
bihash_template.h
clib_bihash_is_free_16_8
static int clib_bihash_is_free_16_8(clib_bihash_kv_16_8_t *v)
Definition:
bihash_16_8.h:47
clib_bihash_key_compare_16_8
static int clib_bihash_key_compare_16_8(u64 *a, u64 *b)
Definition:
bihash_16_8.h:76
u64x2
epu8_epi32 epu16_epi32 u64x2
Definition:
vector_sse42.h:444
format_bihash_kvp_16_8
static u8 * format_bihash_kvp_16_8(u8 *s, va_list *args)
Definition:
bihash_16_8.h:67
key
typedef key
Definition:
ipsec_types.api:91
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
xxhash.h
clib_bihash_kv_16_8_t
Definition:
bihash_16_8.h:40
u64
unsigned long u64
Definition:
types.h:89
format
description fragment has unexpected format
Definition:
map.api:433
clib_bihash_kv_16_8_t::key
u64 key[2]
Definition:
bihash_16_8.h:42
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
clib_bihash_hash_16_8
static u64 clib_bihash_hash_16_8(clib_bihash_kv_16_8_t *v)
Definition:
bihash_16_8.h:56
heap.h
src
vppinfra
bihash_16_8.h
Generated on Sat Jan 8 2022 10:37:10 for FD.io VPP by
1.8.17