-
Notifications
You must be signed in to change notification settings - Fork 0
pause techniques on many architectures
Michael R. Crusoe edited this page Jan 23, 2021
·
2 revisions
#if defined(__SSE2__) // AMD and Intel
#include <emmintrin.h>
_mm_pause();
#elif defined(__i386__) || defined(__x86_64__)
asm volatile("pause");
#elif defined(__aarch64__)
asm volatile("wfe");
#elif defined(__armel__) || defined(__ARMEL__)
asm volatile ("nop" ::: "memory"); // default operation - does nothing => Might lead to passive spinning.
#elif defined(__arm__) || defined(__aarch64__) // arm big endian / arm64
__asm__ __volatile__ ("yield" ::: "memory");
#elif defined(__ia64__) // IA64
__asm__ __volatile__ ("hint @pause");
#elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) // PowerPC
__asm__ __volatile__ ("or 27,27,27" ::: "memory");
#else // everything else.
asm volatile ("nop" ::: "memory"); // default operation - does nothing => Might lead to passive spinning.
#endif