OSSIA
Open Scenario System for Interactive Application
Loading...
Searching...
No Matches
yield.hpp
1
#pragma once
2
#include <ossia/detail/config.hpp>
3
4
// Adapted from bind9:
5
// https://gitlab.isc.org/isc-projects/bind9/-/blob/main/lib/isc/rwlock.c
6
#if defined(__EMSCRIPTEN__)
7
#include <thread>
8
// TODO once we support asyncify
9
#define ossia_rwlock_pause() std::this_thread::yield()
10
#elif defined(__x86_64__) || defined(_M_X64)
11
#include <immintrin.h>
12
#define ossia_rwlock_pause() _mm_pause()
13
#elif defined(__i386__)
14
#define ossia_rwlock_pause() __asm__ __volatile__("rep; nop" ::: "memory")
15
#elif defined(__ia64__)
16
#define ossia_rwlock_pause() __asm__ __volatile__("hint @pause" ::: "memory")
17
#elif defined(__aarch64__)
18
#define ossia_rwlock_pause() __asm__ __volatile__("dmb ishst\n\tyield" ::: "memory")
19
#elif defined(__arm__)
20
#define ossia_rwlock_pause() __asm__ __volatile__("yield" ::: "memory")
21
#elif defined(__sparc) || defined(__sparc__)
22
#define ossia_rwlock_pause() __asm__ __volatile__("pause" ::: "memory")
23
#elif defined(__ppc__) || defined(_ARCH_PPC) || defined(_ARCH_PWR) \
24
|| defined(_ARCH_PWR2) || defined(_POWER)
25
#define ossia_rwlock_pause() __asm__ __volatile__("or 27,27,27" ::: "memory")
26
#elif defined(#elif defined(__riscv)
27
#define ossia_rwlock_pause() __asm__ __volatile__("pause" ::: "memory")
28
#elif defined(_MSC_VER)
29
#include <windows.h>
30
#define ossia_rwlock_pause() YieldProcessor()
31
#else
32
#include <thread>
33
#define ossia_rwlock_pause() std::this_thread::yield()
34
#endif
src
ossia
detail
yield.hpp
Generated on Fri Jan 23 2026 02:46:30 for OSSIA by
1.9.8