[PATCH] Make the thash library arch-independent
flat view
STALE4096d
From: Vladimir Medvedkin <hidden>
Date: 2015-07-28 13:09:17
Subsystem:
library code, the rest · Maintainers:
Andrew Morton, Linus Torvalds
Signed-off-by: Vladimir Medvedkin <redacted> --- lib/librte_hash/rte_thash.h | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/lib/librte_hash/rte_thash.h b/lib/librte_hash/rte_thash.h
index 6156e8a..ddb650a 100644
--- a/lib/librte_hash/rte_thash.h
+++ b/lib/librte_hash/rte_thash.h@@ -53,14 +53,23 @@ extern "C" { #include <stdint.h> #include <rte_byteorder.h> -#include <rte_vect.h> #include <rte_ip.h> +#ifdef __SSE3__ +#include <rte_vect.h> +#endif /* __SSE3__ */ + +#ifndef XMM_SIZE +#define XMM_SIZE 16 +#endif /* XMM_SIZE */ + +#ifdef __SSE3__ /* Byte swap mask used for converting IPv6 address * 4-byte chunks to CPU byte order */ static const __m128i rte_thash_ipv6_bswap_mask = { 0x0405060700010203, 0x0C0D0E0F08090A0B}; +#endif /* __SSE3__ */ /** * length in dwords of input tuple to
@@ -157,12 +166,22 @@ rte_convert_rss_key(const uint32_t *orig, uint32_t *targ, int len) static inline void rte_thash_load_v6_addrs(const struct ipv6_hdr *orig, union rte_thash_tuple *targ) { +#ifdef __SSE__ __m128i ipv6 = _mm_loadu_si128((const __m128i *)orig->src_addr); *(__m128i *)targ->v6.src_addr = _mm_shuffle_epi8(ipv6, rte_thash_ipv6_bswap_mask); ipv6 = _mm_loadu_si128((const __m128i *)orig->dst_addr); *(__m128i *)targ->v6.dst_addr = _mm_shuffle_epi8(ipv6, rte_thash_ipv6_bswap_mask); +#else + int i; + for (i = 0; i < 4; i++) { + *((uint32_t *)targ->v6.src_addr + i) = + rte_be_to_cpu_32(*((const uint32_t *)orig->src_addr + i)); + *((uint32_t *)targ->v6.dst_addr + i) = + rte_be_to_cpu_32(*((const uint32_t *)orig->dst_addr + i)); + } +#endif /* __SSE3__ */ } /**
--
1.8.3.2