CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
clang_cpu.h
1#pragma once
2
3#include <cx/platform/base.h>
4
5#if defined(__aarch64__)
6#define _CPU_PAUSE __asm__ volatile("yield")
7#elif defined(__EMSCRIPTEN__)
8// WebAssembly doesn't have a spinloop hint
9#define _CPU_PAUSE
10#else
11#define _CPU_PAUSE __asm__ volatile("pause")
12#endif
13
14#define _CPU_PREFETCH(ptr) __builtin_prefetch((ptr), 0, 0)
15
16_meta_inline int ctz32(unsigned long mask)
17{
18 return __builtin_ctz(mask);
19}
20
21#if defined (_ARCH_X64) || defined(_ARCH_ARM64)
22
23_meta_inline int ctz64(unsigned long long mask)
24{
25 return __builtin_ctzll(mask);
26}
27
28#endif
Compiler and platform detection macros.