some progress

This commit is contained in:
veclavtlica
2026-10-07 11:21:21 +03:00
parent 14062e9d00
commit 8d502173a2
26 changed files with 705 additions and 212 deletions
+34 -14
View File
@@ -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