From d0630ae6461f890ac0a0fa09edd263c3f5abb10c Mon Sep 17 00:00:00 2001 From: vczh Date: Fri, 23 Sep 2022 23:49:35 -0700 Subject: [PATCH] Use __yield instead of _mm_pause on ARM --- Import/VlppOS.Linux.cpp | 9 ++++++++- Import/VlppOS.Windows.cpp | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Import/VlppOS.Linux.cpp b/Import/VlppOS.Linux.cpp index 3c201d97..bd583d3e 100644 --- a/Import/VlppOS.Linux.cpp +++ b/Import/VlppOS.Linux.cpp @@ -1536,7 +1536,14 @@ SpinLock { while(__sync_val_compare_and_swap(&token, 0, 1)!=0) { - while(token!=0) _mm_pause(); + while (token != 0) + { +#ifdef VCZH_ARM + __yield(); +#else + _mm_pause(); +#endif + } } } diff --git a/Import/VlppOS.Windows.cpp b/Import/VlppOS.Windows.cpp index 5bcb304d..b6974b23 100644 --- a/Import/VlppOS.Windows.cpp +++ b/Import/VlppOS.Windows.cpp @@ -1779,7 +1779,14 @@ SpinLock { while(_InterlockedCompareExchange(&token, 1, 0)!=0) { - while(token!=0) _mm_pause(); + while (token != 0) + { +#ifdef VCZH_ARM + __yield(); +#else + _mm_pause(); +#endif + } } }