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
}