1406937f8SMichal Mazurek /* SPDX-License-Identifier: BSD-3-Clause
2406937f8SMichal Mazurek * Copyright(c) 2022 StarFive
3406937f8SMichal Mazurek * Copyright(c) 2022 SiFive
4406937f8SMichal Mazurek * Copyright(c) 2022 Semihalf
5406937f8SMichal Mazurek */
6406937f8SMichal Mazurek
7406937f8SMichal Mazurek #ifndef _RTE_LPM_SCALAR_H_
8406937f8SMichal Mazurek #define _RTE_LPM_SCALAR_H_
9406937f8SMichal Mazurek
10406937f8SMichal Mazurek #include <rte_vect.h>
11406937f8SMichal Mazurek
12406937f8SMichal Mazurek #ifdef __cplusplus
13406937f8SMichal Mazurek extern "C" {
14406937f8SMichal Mazurek #endif
15406937f8SMichal Mazurek
16406937f8SMichal Mazurek static inline void
rte_lpm_lookupx4(const struct rte_lpm * lpm,xmm_t ip,uint32_t hop[4],uint32_t defv)17406937f8SMichal Mazurek rte_lpm_lookupx4(const struct rte_lpm *lpm, xmm_t ip, uint32_t hop[4],
18406937f8SMichal Mazurek uint32_t defv)
19406937f8SMichal Mazurek {
20*b13fb775SStanislaw Kardach rte_xmm_t xip = { .x = ip };
21406937f8SMichal Mazurek uint32_t nh;
22406937f8SMichal Mazurek int ret;
23406937f8SMichal Mazurek
24*b13fb775SStanislaw Kardach ret = rte_lpm_lookup(lpm, xip.u32[0], &nh);
25406937f8SMichal Mazurek hop[0] = (ret == 0) ? nh : defv;
26*b13fb775SStanislaw Kardach ret = rte_lpm_lookup(lpm, xip.u32[1], &nh);
27406937f8SMichal Mazurek hop[1] = (ret == 0) ? nh : defv;
28*b13fb775SStanislaw Kardach ret = rte_lpm_lookup(lpm, xip.u32[2], &nh);
29406937f8SMichal Mazurek hop[2] = (ret == 0) ? nh : defv;
30*b13fb775SStanislaw Kardach ret = rte_lpm_lookup(lpm, xip.u32[3], &nh);
31406937f8SMichal Mazurek hop[3] = (ret == 0) ? nh : defv;
32406937f8SMichal Mazurek }
33406937f8SMichal Mazurek
34406937f8SMichal Mazurek #ifdef __cplusplus
35406937f8SMichal Mazurek }
36406937f8SMichal Mazurek #endif
37406937f8SMichal Mazurek
38406937f8SMichal Mazurek #endif /* _RTE_LPM_SCALAR_H_ */
39