From 40baf712efd45fae214a47405ade1398dd1628e7 Mon Sep 17 00:00:00 2001 From: Cristian Dumitrescu Date: Mon, 13 Sep 2021 17:44:34 +0100 Subject: [PATCH] pipeline: create inline functions for instruction operands Create inline functions to get the instruction operands. Signed-off-by: Cristian Dumitrescu --- lib/pipeline/rte_swx_pipeline_internal.h | 29 ++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/lib/pipeline/rte_swx_pipeline_internal.h b/lib/pipeline/rte_swx_pipeline_internal.h index 791adfb471..efd136196f 100644 --- a/lib/pipeline/rte_swx_pipeline_internal.h +++ b/lib/pipeline/rte_swx_pipeline_internal.h @@ -928,6 +928,35 @@ struct thread { #define HEADER_VALID(thread, header_id) \ MASK64_BIT_GET((thread)->valid_headers, header_id) +static inline uint64_t +instr_operand_hbo(struct thread *t, const struct instr_operand *x) +{ + uint8_t *x_struct = t->structs[x->struct_id]; + uint64_t *x64_ptr = (uint64_t *)&x_struct[x->offset]; + uint64_t x64 = *x64_ptr; + uint64_t x64_mask = UINT64_MAX >> (64 - x->n_bits); + + return x64 & x64_mask; +} + +#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN + +static inline uint64_t +instr_operand_nbo(struct thread *t, const struct instr_operand *x) +{ + uint8_t *x_struct = t->structs[x->struct_id]; + uint64_t *x64_ptr = (uint64_t *)&x_struct[x->offset]; + uint64_t x64 = *x64_ptr; + + return ntoh64(x64) >> (64 - x->n_bits); +} + +#else + +#define instr_operand_nbo instr_operand_hbo + +#endif + #define ALU(thread, ip, operator) \ { \ uint8_t *dst_struct = (thread)->structs[(ip)->alu.dst.struct_id]; \ -- 2.20.1