Files
Dominik Kundel 243a1b0276 Initial commit
Co-authored-by: Zhuohan Li <zhuohan@openai.com>
Co-authored-by: Maratyszcza <marat@openai.com>
Co-authored-by: Volodymyr Kyrylov <vol@wilab.org.ua>
2025-08-05 08:19:49 -07:00

108 lines
3.2 KiB
C

#pragma once
/***** Architecture detection macros *****/
#ifdef GPTOSS_ARCH_X86_64
#if GPTOSS_ARCH_X86_64 != 0 && GPTOSS_ARCH_X86_64 != 1
#error "Invalid GPTOSS_ARCH_X86_64 value: must be either 0 or 1"
#endif
#else
#if defined(__x86_64__) || defined(_M_X64) && !defined(_M_ARM64EC)
#define GPTOSS_ARCH_X86_64 1
#else
#define GPTOSS_ARCH_X86_64 0
#endif
#endif
#ifdef GPTOSS_ARCH_ARM64
#if GPTOSS_ARCH_ARM64 != 0 && GPTOSS_ARCH_ARM64 != 1
#error "Invalid GPTOSS_ARCH_ARM64 value: must be either 0 or 1"
#endif
#else
#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)
#define GPTOSS_ARCH_ARM64 1
#else
#define GPTOSS_ARCH_ARM64 0
#endif
#endif
#if GPTOSS_ARCH_X86_64 + GPTOSS_ARCH_ARM64 == 0
#error "Unsupported architecture: neither x86-64 nor ARM64 detected"
#elif GPTOSS_ARCH_X86_64 + GPTOSS_ARCH_ARM64 != 1
#error "Inconsistent architecture detection: both x86-64 and ARM64 detection macros are specified"
#endif
/***** Compiler portability macros *****/
#ifndef GPTOSS_LIKELY
#if defined(__GNUC__)
#define GPTOSS_LIKELY(condition) (__builtin_expect(!!(condition), 1))
#else
#define GPTOSS_LIKELY(condition) (!!(condition))
#endif
#endif
#ifndef GPTOSS_UNLIKELY
#if defined(__GNUC__)
#define GPTOSS_UNLIKELY(condition) (__builtin_expect(!!(condition), 0))
#else
#define GPTOSS_UNLIKELY(condition) (!!(condition))
#endif
#endif
#ifndef GPTOSS_UNPREDICTABLE
#if defined(__has_builtin)
#if __has_builtin(__builtin_unpredictable)
#define GPTOSS_UNPREDICTABLE(condition) (__builtin_unpredictable(!!(condition)))
#endif
#endif
#endif
#ifndef GPTOSS_UNPREDICTABLE
#if defined(__GNUC__) && (__GNUC__ >= 9) && !defined(__INTEL_COMPILER)
#define GPTOSS_UNPREDICTABLE(condition) (__builtin_expect_with_probability(!!(condition), 0, 0.5))
#else
#define GPTOSS_UNPREDICTABLE(condition) (!!(condition))
#endif
#endif
// Disable padding for structure members.
#ifndef GPTOSS_DENSELY_PACKED_STRUCTURE
#if defined(__GNUC__)
#define GPTOSS_DENSELY_PACKED_STRUCTURE __attribute__((__packed__))
#else
#error "Compiler-specific implementation of GPTOSS_DENSELY_PACKED_STRUCTURE required"
#endif
#endif
#ifndef GPTOSS_ALIGN
#if defined(__GNUC__)
#define GPTOSS_ALIGN(alignment) __attribute__((__aligned__(alignment)))
#elif defined(_MSC_VER)
#define GPTOSS_ALIGN(alignment) __declspec(align(alignment))
#else
#error "Compiler-specific implementation of GPTOSS_ALIGN required"
#endif
#endif
#ifndef GPTOSS_FORCE_INLINE
#if defined(__GNUC__)
#define GPTOSS_FORCE_INLINE inline __attribute__((__always_inline__))
#elif defined(_MSC_VER)
#define GPTOSS_FORCE_INLINE __forceinline
#else
#define GPTOSS_FORCE_INLINE inline
#endif
#endif
/***** Symbol visibility macros *****/
#ifndef GPTOSS_INTERNAL_SYMBOL
#if defined(__ELF__)
#define GPTOSS_INTERNAL_SYMBOL __attribute__((__visibility__("internal")))
#elif defined(__MACH__)
#define GPTOSS_INTERNAL_SYMBOL __attribute__((__visibility__("hidden")))
#else
#define GPTOSS_INTERNAL_SYMBOL
#endif
#endif