34 lines
909 B
C
34 lines
909 B
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
|
|
|
|
/* 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
|