|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |