5 #ifndef __INCLUDE_RTE_LRU_MIPS_H__ 6 #define __INCLUDE_RTE_LRU_MIPS_H__ 14 #include <rte_config.h> 17 #ifndef RTE_TABLE_HASH_LRU_STRATEGY 18 #define RTE_TABLE_HASH_LRU_STRATEGY 3 21 #if RTE_TABLE_HASH_LRU_STRATEGY == 3 23 #define lru_init(bucket) \ 24 { bucket->lru_list = ~0LLU; } 27 f_lru_pos(uint64_t lru_list)
29 xmm_t lst = (xmm_t) {.i64 = { lru_list, (uint64_t)-1} };
30 uint16_t min_val, i, j = 0;
33 for (i = 0; i < 8; i++) {
34 if (min_val > lst.u16[i]) {
42 #define lru_pos(bucket) f_lru_pos(bucket->lru_list) 44 #ifdef RTE_ARCH_NO_VECTOR 45 #define lru_update(bucket, mru_val) \ 47 const uint64_t orvals[] = {0xFFFFLLU, 0xFFFFLLU << 16, \ 48 0xFFFFLLU << 32, 0xFFFFLLU << 48, 0LLU}; \ 49 const uint64_t decs[] = {0x1000100010001LLU, 0}; \ 51 xmm_t v_zeros = (xmm_t) {.u64 = {0, 0} }; \ 52 xmm_t lru = v_zeros, vdec = v_zeros; \ 53 lru.i64[0] = bucket->lru_list; \ 54 vdec.i64[0] = decs[mru_val>>2]; \ 55 for (j = 0; j < 8; j++) \ 56 lru.u16[j] -= vdec.u16[j]; \ 57 bucket->lru_list = lru.i64[0] | orvals[mru_val]; \