some progress
This commit is contained in:
+34
-14
@@ -1,37 +1,57 @@
|
||||
/*
|
||||
Compiler definitions helpers, for portability.
|
||||
We assume only modern GCC and Clang here.
|
||||
*/
|
||||
|
||||
#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
|
||||
#define COM_DEF_COMPILER_CLANG 1
|
||||
#define COM_DEF_COMPILER_GCC 2
|
||||
|
||||
#if defined(__GNUC__) && !defined(__clang__)
|
||||
#define COM_DEF_COMPILER COM_DEF_COMPILER_GCC
|
||||
#elif defined(__clang__)
|
||||
#define COM_DEF_COMPILER COM_DEF_COMPILER_CLANG
|
||||
#endif
|
||||
|
||||
#define COM_DEF_TARGET_LINUX 0
|
||||
#define COM_DEF_TARGET_WASM 1
|
||||
#define COM_DEF_TARGET_LINUX 1
|
||||
#define COM_DEF_TARGET_WASM 2
|
||||
|
||||
#if defined(__wasm__)
|
||||
#define COM_DEF_TARGET COM_DEF_TARGET_WASM
|
||||
#define com_def_export_sym(m_s) __attribute__((export_name(m_s)))
|
||||
#else
|
||||
#elif defined(__linux__)
|
||||
#define COM_DEF_TARGET COM_DEF_TARGET_LINUX
|
||||
#define com_def_export_sym(m_s) __attribute__((visibility("default")))
|
||||
#else
|
||||
#error Unknown target.
|
||||
#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)))
|
||||
#define COM_DEF_CPU_AMD64 1
|
||||
#define COM_DEF_CPU_X86 2
|
||||
#define COM_DEF_CPU_WASM32 3
|
||||
|
||||
#if defined(__wasm__)
|
||||
#define COM_DEF_CPU COM_DEF_CPU_WASM32
|
||||
#define COM_DEF_ALIGNMENT 16
|
||||
#define COM_DEF_CPU_LITEND 1
|
||||
#elif defined(__x86_64__) || defined(__amd64__)
|
||||
#define COM_DEF_CPU COM_DEF_CPU_AMD64
|
||||
#define COM_DEF_CPU_LITEND 1
|
||||
#define COM_DEF_ALIGNMENT 32
|
||||
#elif defined(__i386__)
|
||||
#define COM_DEF_CPU COM_DEF_CPU_X86
|
||||
#define COM_DEF_ALIGNMENT 16
|
||||
#define COM_DEF_CPU_LITEND 1
|
||||
#else
|
||||
#define com_def_alignedas(v_as)
|
||||
#define com_def_vector(v_t, v_v, v_n) v_t v_v[v_n]
|
||||
#error Unknown cpu.
|
||||
#endif
|
||||
|
||||
#define com_def_alignedas(v_as) _Alignas(v_as)
|
||||
#define com_def_vector(v_t, v_v, v_b) v_t v_v __attribute__((vector_size(v_b)))
|
||||
|
||||
// #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")
|
||||
#define com_def_profile_sink(m_v) __asm__ volatile("" ::"r"(m_v) : "memory")
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user