Files
brightstone/Common/def.h
T
veclavtlica 26f6ba56e9 web?
2026-09-14 02:04:16 +03:00

47 lines
1.2 KiB
C

/*
Compiler definitions helpers, for portability.
*/
#ifndef COM_DEF_H
#define COM_DEF_H
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || \
defined(__GNUC__) || defined(__clang__)
#define COM_DEF_COMPILE_MODERN 1
#endif
#define COM_DEF_TARGET_NATIVE 0
#define COM_DEF_TARGET_WASM 1
#if defined(__wasm__)
#define COM_DEF_NOSTD 1
#define COM_DEF_TARGET COM_DEF_TARGET_WASM
/* TODO: Move to std.h instead, forbid stdlib on any platform. */
#define assert(m_t) (m_t)
#define printf(...) ((void)0)
#else
#define COM_DEF_TARGET COM_DEF_TARGET_NATIVE
#endif
/* TODO: uppercase? */
#ifdef COM_DEF_COMPILE_MODERN
#define com_def_alignedas(v_as) _Alignas(v_as)
#define com_def_vector(v_t, v_v, v_n) \
v_t v_v __attribute__((vector_size(sizeof(v_t) * v_n)))
#else
#define com_def_alignedas(v_as)
#define com_def_vector(v_t, v_v, v_n) v_t v_v[v_n]
#endif
#define COM_DEF_VECTOR_NONE 0
#define COM_DEF_VECTOR_SSE2 1
#ifdef COM_DEF_COMPILE_MODERN
#define COM_DEF_VECTOR_IMPL COM_DEF_VECTOR_SSE2
#endif
// #define COM_DEF_PROFILE_VAR volatile /* Sadly, doesn't work in some cases */
#define COM_DEF_PROFILE_SINK(m_v) __asm__ volatile("" ::"r"(m_v) : "memory")
#endif