12#if defined(_WIN32) || defined(__CYGWIN__)
13#ifdef REDUCT_BUILD_LIB
14#define REDUCT_API __declspec(dllexport)
15#elif defined(REDUCT_USE_LIB)
16#define REDUCT_API __declspec(dllimport)
22#define REDUCT_API __attribute__((visibility("default")))
31#define REDUCT_LIB_OPEN(_path) LoadLibraryA(_path)
32#define REDUCT_LIB_CLOSE(_lib) FreeLibrary(_lib)
33#define REDUCT_LIB_SYM(_lib, _name) GetProcAddress(_lib, _name)
34#define REDUCT_LIB_ERROR() "Windows Error"
39#define REDUCT_LIB_OPEN(_path) dlopen(_path, RTLD_NOW | RTLD_GLOBAL)
40#define REDUCT_LIB_CLOSE(_lib) dlclose(_lib)
41#define REDUCT_LIB_SYM(_lib, _name) dlsym(_lib, _name)
42#define REDUCT_LIB_ERROR() dlerror()
45#if defined(__GNUC__) || defined(__clang__)
46#define REDUCT_LIKELY(_x) __builtin_expect(!!(_x), 1)
47#define REDUCT_UNLIKELY(_x) __builtin_expect(!!(_x), 0)
48#define REDUCT_NORETURN __attribute__((noreturn))
49#define REDUCT_ALWAYS_INLINE __attribute__((always_inline))
50#define REDUCT_ALIGNED(_x) __attribute__((aligned(_x)))
51#elif defined(_MSC_VER)
52#define REDUCT_LIKELY(_x) (_x)
53#define REDUCT_UNLIKELY(_x) (_x)
54#define REDUCT_NORETURN __declspec(noreturn)
55#define REDUCT_ALWAYS_INLINE __forceinline
56#define REDUCT_ALIGNED(_x) __declspec(align(_x))
58#define REDUCT_LIKELY(_x) (_x)
59#define REDUCT_UNLIKELY(_x) (_x)
60#define REDUCT_NORETURN
61#define REDUCT_ALWAYS_INLINE
64#define REDUCT_MIN(_a, _b) ((_a) < (_b) ? (_a) : (_b))
65#define REDUCT_MAX(_a, _b) ((_a) > (_b) ? (_a) : (_b))
67#define REDUCT_UNUSED(_x) ((void)(_x))
72#define REDUCT_PI 3.14159265358979323846
77#define REDUCT_E 2.7182818284590452354
86 }){0x7FF0000000000000ULL}) \
96 }){0x7FF8000000000000ULL}) \
102#define REDUCT_PATH_MAX 1024
113#define REDUCT_CONTAINER_OF(_ptr, _type, _member) ((_type*)((char*)(_ptr) - offsetof(_type, _member)))
131typedef struct reduct_rvsdg_origin* (
139#define REDUCT_LIB_ENTRY "reduct_module_init"
152#define REDUCT_INPUT_ID_NONE ((reduct_input_id_t) - 1)
154#define REDUCT_ALIGNMENT 64
156#define REDUCT_ROUND_UP(_val, _align) (((_val) + (_align) - 1) & ~((_align) - 1))
uint16_t reduct_input_id_t
Identifies a reduct_input_t within a Reduct structure.
reduct_handle_t(* reduct_native_fn)(struct reduct *reduct, size_t argc, reduct_handle_t *argv)
Native function pointer type.
struct reduct_rvsdg_origin *(* reduct_native_intrinsic_fn)(struct reduct_builder *builder, struct reduct_list *expr)
Intrinsic handler function type.
reduct_handle_t(* reduct_module_init_fn)(struct reduct *reduct)
Module initialization function type.