Update ma_yield().

This commit is contained in:
David Reid
2020-06-14 12:30:14 +10:00
parent 103574f108
commit 78aeabfa41
+19 -6
View File
@@ -8254,15 +8254,28 @@ static MA_INLINE void ma_yield()
#ifdef MA_POSIX #ifdef MA_POSIX
posix_yield(); posix_yield();
#else #else
#if defined(MA_X86) || defined(MA_X64) #if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64)
#if defined(_MSC_VER) && _MSC_VER >= 1400 /* x86/x64 */
_mm_pause(); #if defined(_MSC_VER) && !defined(__clang__)
#if _MSC_VER >= 1400
_mm_pause();
#else
__asm pause;
#endif
#else #else
__asm pause; __asm__ __volatile__ ("pause");
#endif #endif
#elif (defined(__arm__) && defined(__ARM_ARCH) && __ARM_ARCH >= 6) || (defined(_M_ARM) && _M_ARM >= 6)
/* ARM */
#if defined(_MSC_VER)
/* Apparently there is a __yield() intrinsic that's compatible with ARM, but I cannot find documentation for it nor can I find where it's declared. */
__yield();
#else
__asm__ __volatile__ ("yield");
#endif
#else
/* Unknown or unsupported architecture. No-op. */
#endif #endif
/* TODO: Implement me. x86 = PAUSE; ARM = YIELD; */
#endif #endif
} }
#endif #endif