2#include "gaia/config/config_core.h"
12#ifndef TCB_SPAN_NO_CONTRACT_CHECKING
20#if !defined(NDEBUG) || defined(_DEBUG)
21 #define GAIA_DEBUG_BUILD 1
23 #define GAIA_DEBUG_BUILD 0
30#if !defined(GAIA_DEBUG)
31 #if GAIA_DEBUG_BUILD || GAIA_FORCE_DEBUG
38#if GAIA_DISABLE_ASSERTS
39 #ifdef GAIA_ASSERT_ENABLED
40 #undef GAIA_ASSERT_ENABLED
42 #define GAIA_ASSERT_ENABLED 0
47 #define GAIA_ASSERT(cond)
52 #define GAIA_ASSERT2(cond, msg)
53#elif !defined(GAIA_ASSERT)
57 #define GAIA_ASSERT_ENABLED 1
58 #define GAIA_ASSERT(cond) \
60 GAIA_MSVC_WARNING_PUSH() \
61 GAIA_MSVC_WARNING_DISABLE(4127) \
63 GAIA_MSVC_WARNING_POP() \
65 #define GAIA_ASSERT2(cond, msg) \
67 GAIA_MSVC_WARNING_PUSH() \
68 GAIA_MSVC_WARNING_DISABLE(4127) \
69 assert((cond) && (msg)); \
70 GAIA_MSVC_WARNING_POP() \
75 #define GAIA_ASSERT_ENABLED 1
76 #define GAIA_ASSERT(cond) \
78 GAIA_MSVC_WARNING_PUSH() \
79 GAIA_MSVC_WARNING_DISABLE(4127) \
80 if GAIA_UNLIKELY (!(cond)) \
82 GAIA_LOG_E("%s:%d: Assertion failed: '%s'.", __FILE__, __LINE__, #cond); \
84 GAIA_MSVC_WARNING_POP() \
86 #define GAIA_ASSERT2(cond, msg) \
88 GAIA_MSVC_WARNING_PUSH() \
89 GAIA_MSVC_WARNING_DISABLE(4127) \
90 if GAIA_UNLIKELY (!(cond)) \
92 GAIA_LOG_E("%s:%d: Assertion failed: '%s'.", __FILE__, __LINE__, (msg)); \
94 GAIA_MSVC_WARNING_POP() \
97 #define GAIA_ASSERT_ENABLED 0
98 #define GAIA_ASSERT(cond)
99 #define GAIA_ASSERT2(cond, msg)
104#if !defined(GAIA_ECS_VALIDATE_CHUNKS)
105 #define GAIA_ECS_VALIDATE_CHUNKS (GAIA_DEBUG && GAIA_DEVMODE)
107#if !defined(GAIA_ECS_VALIDATE_ENTITY_LIST)
108 #define GAIA_ECS_VALIDATE_ENTITY_LIST (GAIA_DEBUG && GAIA_DEVMODE)
110#if !defined(GAIA_ECS_VALIDATE_ARCHETYPE_GRAPH)
111 #define GAIA_ECS_VALIDATE_ARCHETYPE_GRAPH (GAIA_DEBUG && GAIA_DEVMODE)
134 GAIA_FORCEINLINE
void prefetch(
const void* x,
int hint) {
136 #if GAIA_COMPILER_CLANG
167 #elif GAIA_COMPILER_GCC
168 #if !defined(__i386) || defined(__SSE__)
169 if (__builtin_constant_p(hint)) {
170 __builtin_prefetch(x, 0, hint);
173 __builtin_prefetch(x);
175 #elif !GAIA_HAS_NO_INLINE_ASSEMBLY
181 asm volatile(
"prefetchnta (%0)" : :
"r"(x));
183 #elif GAIA_COMPILER_MSVC && GAIA_ARCH == GAIA_ARCH_X86
186 _mm_prefetch(
static_cast<const char*
>(x), _MM_HINT_T1);
189 _mm_prefetch(
static_cast<const char*
>(x), _MM_HINT_T2);
192 _mm_prefetch(
static_cast<const char*
>(x), _MM_HINT_NTA);
195 _mm_prefetch(
static_cast<const char*
>(x), _MM_HINT_T0);
Checks if endianess was detected correctly at compile-time.
Definition bitset.h:9
PrefetchHint
Definition config_core_end.h:120
@ PREFETCH_HINT_T2
Temporal data with respect to second level cache misses — prefetch data into L3 cache and higher,...
Definition config_core_end.h:127
@ PREFETCH_HINT_NTA
Non-temporal data with respect to all cache levels — prefetch data into non-temporal cache structure ...
Definition config_core_end.h:130
@ PREFETCH_HINT_T1
Temporal data with respect to first level cache misses — prefetch data into L2 cache and higher.
Definition config_core_end.h:124
@ PREFETCH_HINT_T0
Temporal data — prefetch data into all levels of the cache hierarchy.
Definition config_core_end.h:122
GAIA_FORCEINLINE void prefetch(const void *x, int hint)
Prefetch intrinsic.
Definition config_core_end.h:134