DPDK  18.11.10
rte_lru.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2014 Intel Corporation
3  */
4 
5 #ifndef __INCLUDE_RTE_LRU_H__
6 #define __INCLUDE_RTE_LRU_H__
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 #include <rte_config.h>
13 #ifdef RTE_ARCH_X86_64
14 #include "rte_lru_x86.h"
15 #elif defined(RTE_ARCH_ARM64)
16 #include "rte_lru_arm64.h"
17 #elif defined(RTE_ARCH_MIPS_64)
18 #include "rte_lru_mips.h"
19 #elif defined(RTE_ARCH_LOONGARCH_64)
20 #include "rte_lru_lsx.h"
21 #else
22 #undef RTE_TABLE_HASH_LRU_STRATEGY
23 #define RTE_TABLE_HASH_LRU_STRATEGY 1
24 #endif
25 
26 #if RTE_TABLE_HASH_LRU_STRATEGY == 0
27 
28 #define lru_init(bucket) \
29 do \
30  bucket = bucket; \
31 while (0)
32 
33 #define lru_pos(bucket) (bucket->lru_list & 0xFFFFLLU)
34 
35 #define lru_update(bucket, mru_val) \
36 do { \
37  bucket = bucket; \
38  mru_val = mru_val; \
39 } while (0)
40 
41 #elif RTE_TABLE_HASH_LRU_STRATEGY == 1
42 
43 #define lru_init(bucket) \
44 do \
45  bucket->lru_list = 0x0000000100020003LLU; \
46 while (0)
47 
48 #define lru_pos(bucket) (bucket->lru_list & 0xFFFFLLU)
49 
50 #define lru_update(bucket, mru_val) \
51 do { \
52  uint64_t x, pos, x0, x1, x2, mask; \
53  \
54  x = bucket->lru_list; \
55  \
56  pos = 4; \
57  if ((x >> 48) == ((uint64_t) mru_val)) \
58  pos = 3; \
59  \
60  if (((x >> 32) & 0xFFFFLLU) == ((uint64_t) mru_val)) \
61  pos = 2; \
62  \
63  if (((x >> 16) & 0xFFFFLLU) == ((uint64_t) mru_val)) \
64  pos = 1; \
65  \
66  if ((x & 0xFFFFLLU) == ((uint64_t) mru_val)) \
67  pos = 0; \
68  \
69  \
70  pos <<= 4; \
71  mask = (~0LLU) << pos; \
72  x0 = x & (~mask); \
73  x1 = (x >> 16) & mask; \
74  x2 = (x << (48 - pos)) & (0xFFFFLLU << 48); \
75  x = x0 | x1 | x2; \
76  \
77  if (pos != 64) \
78  bucket->lru_list = x; \
79 } while (0)
80 
81 #elif (RTE_TABLE_HASH_LRU_STRATEGY == 2) || (RTE_TABLE_HASH_LRU_STRATEGY == 3)
82 
87 #else
88 
89 #error "Incorrect value for RTE_TABLE_HASH_LRU_STRATEGY"
90 
91 #endif
92 
93 #ifdef __cplusplus
94 }
95 #endif
96 
97 #endif