[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT/INTEL-INTRINSICS PATCH v2 1/3] Implement _mm_pause



From: Sharan Santhanam <sharan.santhanam@xxxxxxxxx>

Signed-off-by: Sharan Santhanam <sharan.santhanam@xxxxxxxxx>
Signed-off-by: Felipe Huici <felipe.huici@xxxxxxxxx>
---
 include/emmintrin.h |  9 ---------
 include/xmmintrin.h | 30 +++++++++++++++++++++---------
 2 files changed, 21 insertions(+), 18 deletions(-)

diff --git a/include/emmintrin.h b/include/emmintrin.h
index 8703b9a..c0573a1 100644
--- a/include/emmintrin.h
+++ b/include/emmintrin.h
@@ -4999,15 +4999,6 @@ _mm_castsi128_pd(__m128i __a)
 extern "C" {
 #endif
 
-/// Indicates that a spin loop is being executed for the purposes of
-///    optimizing power consumption during the loop.
-///
-/// \headerfile <x86intrin.h>
-///
-/// This intrinsic corresponds to the <c> PAUSE </c> instruction.
-///
-void _mm_pause(void);
-
 #if defined(__cplusplus)
 } // extern "C"
 #endif
diff --git a/include/xmmintrin.h b/include/xmmintrin.h
index e2543a7..0b271b3 100644
--- a/include/xmmintrin.h
+++ b/include/xmmintrin.h
@@ -25,6 +25,15 @@
 #define __XMMINTRIN_H
 
 #include <mmintrin.h>
+/* Define the default attributes for the functions in this file. */
+#ifdef  __GNUC__
+#define __DEFAULT_FN_ATTRS __attribute__((__gnu_inline__, __always_inline__, 
__artificial__))
+#define __DEFAULT_FN_ATTRS_MMX __attribute__((__gnu_inline__, 
__always_inline__, __artificial__))
+#else
+#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, 
__target__("sse2"), __min_vector_width__(128)))
+#define __DEFAULT_FN_ATTRS_MMX __attribute__((__always_inline__, __nodebug__, 
__target__("mmx,sse2"), __min_vector_width__(64)))
+#endif
+
 
 typedef int __v4si __attribute__((__vector_size__(16)));
 typedef float __v4sf __attribute__((__vector_size__(16)));
@@ -39,15 +48,6 @@ typedef unsigned int __v4su 
__attribute__((__vector_size__(16)));
 #include <mm_malloc.h>
 #endif
 
-/* Define the default attributes for the functions in this file. */
-#ifdef  __GNUC__
-#define __DEFAULT_FN_ATTRS __attribute__((__gnu_inline__, __always_inline__, 
__artificial__))
-#define __DEFAULT_FN_ATTRS_MMX __attribute__((__gnu_inline__, 
__always_inline__, __artificial__))
-#else
-#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, 
__target__("sse"), __min_vector_width__(128)))
-#define __DEFAULT_FN_ATTRS_MMX __attribute__((__always_inline__, __nodebug__, 
__target__("mmx,sse"), __min_vector_width__(64)))
-#endif
-
 #define _MM_SHUFFLE(z, y, x, w) (((z) << 6) | ((y) << 4) | ((x) << 2) | (w))
 
 
@@ -3086,6 +3086,18 @@ do { \
 #define _m_ _mm_
 #define _m_ _mm_
 
+/// Indicates that a spin loop is being executed for the purposes of
+///    optimizing power consumption during the loop.
+///
+/// \headerfile <x86intrin.h>
+///
+/// This intrinsic corresponds to the <c> PAUSE </c> instruction.
+///
+static inline void __DEFAULT_FN_ATTRS _mm_pause(void)
+{
+       __builtin_ia32_pause();
+}
+
 #undef __DEFAULT_FN_ATTRS
 #undef __DEFAULT_FN_ATTRS_MMX
 
-- 
2.11.0


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.