34 #ifndef __INCLUDE_RTE_LRU_H__ 35 #define __INCLUDE_RTE_LRU_H__ 41 #ifdef RTE_ARCH_X86_64 42 #include "rte_lru_x86.h" 43 #elif defined(RTE_ARCH_ARM64) 44 #include "rte_lru_arm64.h" 46 #undef RTE_TABLE_HASH_LRU_STRATEGY 47 #define RTE_TABLE_HASH_LRU_STRATEGY 1 50 #if RTE_TABLE_HASH_LRU_STRATEGY == 0 52 #define lru_init(bucket) \ 57 #define lru_pos(bucket) (bucket->lru_list & 0xFFFFLLU) 59 #define lru_update(bucket, mru_val) \ 65 #elif RTE_TABLE_HASH_LRU_STRATEGY == 1 67 #define lru_init(bucket) \ 69 bucket->lru_list = 0x0000000100020003LLU; \ 72 #define lru_pos(bucket) (bucket->lru_list & 0xFFFFLLU) 74 #define lru_update(bucket, mru_val) \ 76 uint64_t x, pos, x0, x1, x2, mask; \ 78 x = bucket->lru_list; \ 81 if ((x >> 48) == ((uint64_t) mru_val)) \ 84 if (((x >> 32) & 0xFFFFLLU) == ((uint64_t) mru_val)) \ 87 if (((x >> 16) & 0xFFFFLLU) == ((uint64_t) mru_val)) \ 90 if ((x & 0xFFFFLLU) == ((uint64_t) mru_val)) \ 95 mask = (~0LLU) << pos; \ 97 x1 = (x >> 16) & mask; \ 98 x2 = (x << (48 - pos)) & (0xFFFFLLU << 48); \ 102 bucket->lru_list = x; \ 105 #elif (RTE_TABLE_HASH_LRU_STRATEGY == 2) || (RTE_TABLE_HASH_LRU_STRATEGY == 3) 113 #error "Incorrect value for RTE_TABLE_HASH_LRU_STRATEGY"