vkd3d: Unify _mm_pause detection.
Signed-off-by: Georg Lehmann <dadschoorse@gmail.com>
This commit is contained in:
parent
c7eb6fdf61
commit
21dabb315d
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue