Blob Blame History Raw
From 3d7650c6e63286b836a7948fddb5ecc8004f29d6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= <besser82@fedoraproject.org>
Date: Sun, 30 Apr 2017 11:52:26 +0200
Subject: [PATCH] Better support for different and unknown architectures

---
 src/shogun/lib/cpu.h | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/shogun/lib/cpu.h b/src/shogun/lib/cpu.h
index 0916756..fa43477 100644
--- a/src/shogun/lib/cpu.h
+++ b/src/shogun/lib/cpu.h
@@ -36,9 +36,23 @@
 SG_FORCED_INLINE static void CpuRelax()
 {
 #ifdef _MSC_VER
-        _mm_pause();
+	_mm_pause();
+#elif defined(__i386__) || defined(__x86_64__)
+	asm volatile("pause");
+#elif defined(__arm__) || defined(__aarch64__)
+	asm volatile("yield");
+#elif defined(__powerpc__) || defined(__ppc__)
+	asm volatile("or 27,27,27");
+#elif defined(__s390__) || defined(__s390x__)
+	asm volatile("" : : : "memory");
 #else
-        asm("pause");
+#warning "Unknown architecture, defaulting to delaying loop."
+	static uint32_t bar = 13;
+	static uint32_t* foo = &bar;
+	for (unsigned int i = 0; i < 100000; i++)
+	{
+		*foo = (*foo * 33) + 17;
+	}
 #endif
 }