vkd3d: Unify _mm_pause detection.

Signed-off-by: Georg Lehmann <dadschoorse@gmail.com>
This commit is contained in:
Georg Lehmann 2021-04-16 23:13:08 +02:00 committed by Hans-Kristian Arntzen
parent c7eb6fdf61
commit 21dabb315d
2 changed files with 10 additions and 11 deletions

View File

@ -30,9 +30,7 @@ static inline void rw_spinlock_acquire_read(spinlock_t *spinlock)
uint32_t count = vkd3d_atomic_uint32_add(spinlock, VKD3D_RW_SPINLOCK_READ, vkd3d_memory_order_acquire);
while (count & VKD3D_RW_SPINLOCK_WRITE)
{
#ifdef __SSE2__
_mm_pause();
#endif
vkd3d_pause();
count = vkd3d_atomic_uint32_load_explicit(spinlock, vkd3d_memory_order_acquire);
}
}
@ -49,9 +47,7 @@ static inline void rw_spinlock_acquire_write(spinlock_t *spinlock)
VKD3D_RW_SPINLOCK_IDLE, VKD3D_RW_SPINLOCK_WRITE,
vkd3d_memory_order_acquire, vkd3d_memory_order_relaxed) != VKD3D_RW_SPINLOCK_IDLE)
{
#ifdef __SSE2__
_mm_pause();
#endif
vkd3d_pause();
}
}

View File

@ -28,6 +28,13 @@
#include <emmintrin.h>
#endif
static inline void vkd3d_pause(void)
{
#ifdef __SSE2__
_mm_pause();
#endif
}
#define vkd3d_spinlock_try_lock(lock) \
(!vkd3d_atomic_uint32_load_explicit(lock, vkd3d_memory_order_relaxed) && \
!vkd3d_atomic_uint32_exchange_explicit(lock, 1u, vkd3d_memory_order_acquire))
@ -49,11 +56,7 @@ static inline bool spinlock_try_acquire(spinlock_t *lock)
static inline void spinlock_acquire(spinlock_t *lock)
{
while (!spinlock_try_acquire(lock))
#ifdef __SSE2__
_mm_pause();
#else
continue;
#endif
vkd3d_pause();
}
static inline void spinlock_release(spinlock_t *lock)