F4MP/f4mp_originalcode/thirdparty/zpl/code/source/threading/fence.c
Jous99 37b16f1547 code upload
codigo original de f4mp y tilted para referencias
2026-01-06 18:45:00 +01:00

77 lines
2 KiB
C

// file: source/threading/fence.c
#ifdef ZPL_EDITOR
#include <zpl.h>
#endif
ZPL_BEGIN_C_DECLS
#if defined(_MSC_VER)
/* Microsoft C/C++-compatible compiler */
#include <intrin.h>
#elif defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__))
/* GCC-compatible compiler, targeting x86/x86-64 */
#include <x86intrin.h>
#elif defined(__GNUC__) && defined(__ARM_NEON__)
/* GCC-compatible compiler, targeting ARM with NEON */
#include <arm_neon.h>
#elif defined(__GNUC__) && defined(__IWMMXT__)
/* GCC-compatible compiler, targeting ARM with WMMX */
#include <mmintrin.h>
#elif (defined(__GNUC__) || defined(__xlC__)) && (defined(__VEC__) || defined(__ALTIVEC__))
/* XLC or GCC-compatible compiler, targeting PowerPC with VMX/VSX */
#include <altivec.h>
#elif defined(__GNUC__) && defined(__SPE__)
/* GCC-compatible compiler, targeting PowerPC with SPE */
#include <spe.h>
#endif
void zpl_yield_thread(void) {
#if defined(ZPL_SYSTEM_WINDOWS)
_mm_pause();
#elif defined(ZPL_SYSTEM_OSX)
__asm__ volatile ("" : : : "memory");
#elif defined(ZPL_CPU_X86)
_mm_pause();
#else
#error Unknown architecture
#endif
}
void zpl_mfence(void) {
#if defined(ZPL_SYSTEM_WINDOWS)
_ReadWriteBarrier();
#elif defined(ZPL_SYSTEM_OSX)
__sync_synchronize();
#elif defined(ZPL_CPU_X86)
_mm_mfence();
#else
#error Unknown architecture
#endif
}
void zpl_sfence(void) {
#if defined(ZPL_SYSTEM_WINDOWS)
_WriteBarrier();
#elif defined(ZPL_SYSTEM_OSX)
__asm__ volatile ("" : : : "memory");
#elif defined(ZPL_CPU_X86)
_mm_sfence();
#else
#error Unknown architecture
#endif
}
void zpl_lfence(void) {
#if defined(ZPL_SYSTEM_WINDOWS)
_ReadBarrier();
#elif defined(ZPL_SYSTEM_OSX)
__asm__ volatile ("" : : : "memory");
#elif defined(ZPL_CPU_X86)
_mm_lfence();
#else
#error Unknown architecture
#endif
}
ZPL_END_C_DECLS