[PATCH v4 06/14] eal: use prefetch intrinsics
Tyler Retzlaff
roretzla at linux.microsoft.com
Tue Apr 11 23:12:20 CEST 2023
Inline assembly is not supported for MSVC x64 instead use _mm_prefetch
and _mm_cldemote intrinsics.
Signed-off-by: Tyler Retzlaff <roretzla at linux.microsoft.com>
---
lib/eal/x86/include/rte_prefetch.h | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/lib/eal/x86/include/rte_prefetch.h b/lib/eal/x86/include/rte_prefetch.h
index 7fd01c4..1391af0 100644
--- a/lib/eal/x86/include/rte_prefetch.h
+++ b/lib/eal/x86/include/rte_prefetch.h
@@ -13,6 +13,7 @@
#include <rte_common.h>
#include "generic/rte_prefetch.h"
+#ifndef RTE_TOOLCHAIN_MSVC
static inline void rte_prefetch0(const volatile void *p)
{
asm volatile ("prefetcht0 %[p]" : : [p] "m" (*(const volatile char *)p));
@@ -43,6 +44,34 @@ static inline void rte_prefetch_non_temporal(const volatile void *p)
{
asm volatile(".byte 0x0f, 0x1c, 0x06" :: "S" (p));
}
+#else
+static inline void rte_prefetch0(const volatile void *p)
+{
+ _mm_prefetch(p, 1);
+}
+
+static inline void rte_prefetch1(const volatile void *p)
+{
+ _mm_prefetch(p, 2);
+}
+
+static inline void rte_prefetch2(const volatile void *p)
+{
+ _mm_prefetch(p, 3);
+}
+
+static inline void rte_prefetch_non_temporal(const volatile void *p)
+{
+ _mm_prefetch(p, 0);
+}
+__rte_experimental
+static inline void
+rte_cldemote(const volatile void *p)
+{
+ _mm_cldemote(p);
+}
+#endif
+
#ifdef __cplusplus
}
--
1.8.3.1
More information about the dev
mailing list