/** * @file * * @author Mamadou Babaei * * @section LICENSE * * Copyright (c) 2020 - 2025 SenseGlove * * @section DESCRIPTION * * Cross-(architecture/compiler/platform) intrinsics. */ #pragma once #include #if SG_COMPILER_MSVC #include #elif SG_COMPILER_CLANG #if SG_CPU_ANY_X86 #include #endif /* SG_CPU_ANY_X86 */ #elif SG_COMPILER_GCC #if SG_CPU_ANY_X86 #include #endif /* SG_CPU_ANY_X86 */ #else /* SG_COMPILER_MSVC */ #include #endif /* SG_COMPILER_MSVC */ namespace SGCommon { class SGCOMMON_API Intrinsics; }// namespace SGCommon class SGCOMMON_API SGCommon::Intrinsics { public: static SG_FORCEINLINE void Yield() noexcept { #if SG_CPU_ANY_X86 _mm_pause(); #elif SG_CPU_ANY_ARM #if SG_COMPILER_MSVC __yield(); #else /* SG_COMPILER_MSVC */ __asm__ __volatile__("yield"); #endif /* SG_COMPILER_MSVC */ #else /* SG_CPU_ANY_X86 */ std::this_thread::yield(); #endif /* SG_CPU_ANY_X86 */ } };