58 lines
1.5 KiB
C
58 lines
1.5 KiB
C
/*
|
|
Compiler definitions helpers, for portability.
|
|
We assume only modern GCC and Clang here.
|
|
*/
|
|
|
|
#ifndef COM_DEF_H
|
|
#define COM_DEF_H
|
|
|
|
#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 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)))
|
|
#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
|
|
|
|
#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
|
|
#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")
|
|
|
|
#endif
|