26#define XRT_ALIGNAS(n) __declspec(align(n))
27#elif defined(XRT_DOXYGEN)
28#define XRT_ALIGNAS(align)
31#define XRT_ALIGNAS(align) alignas(align)
34#if (defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN) || \
35 (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) || \
36 (defined(__STDC_ENDIAN_NATIVE__) && __STDC_ENDIAN_NATIVE__ == __STDC_ENDIAN_BIG__) || defined(__BIG_ENDIAN__) || \
37 defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || defined(_MIBSEB) || defined(__MIBSEB) || \
42#elif (defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN) || \
43 (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || \
44 (defined(__STDC_ENDIAN_NATIVE__) && __STDC_ENDIAN_NATIVE__ == __STDC_ENDIAN_LITTLE__) || \
45 defined(__LITTLE_ENDIAN__) || defined(__ARMEL__) || defined(__THUMBEL__) || defined(__AARCH64EL__) || \
46 defined(_MIPSEL) || defined(__MIPSEL) || defined(__MIPSEL__) || defined(__x86_64__) || defined(_M_X64) || \
47 defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86)
52#error "@todo: Unable to determine current architecture."
58#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
60#if defined(__x86_64__) || defined(_M_X64) || defined(__aarch64__) || defined(_ARCH_PPC64) || defined(__s390x__) || \
61 (defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 8)
71#define XRT_PRINTF_FORMAT(fmt, list) __attribute__((format(printf, fmt, list)))
73#define XRT_PRINTF_FORMAT(fmt, list)
81#define XRT_MAYBE_UNUSED __attribute__((unused))
82#elif defined(_MSC_VER) && defined(__cplusplus)
83#define XRT_MAYBE_UNUSED [[maybe_unused]]
85#define XRT_MAYBE_UNUSED
92#if defined(__GNUC__) && (__GNUC__ >= 4)
93#define XRT_CHECK_RESULT __attribute__((warn_unused_result))
94#elif defined(_MSC_VER) && (_MSC_VER >= 1700)
95#define XRT_CHECK_RESULT _Check_return_
97#define XRT_CHECK_RESULT
105#define XRT_NO_INLINE __attribute__((noinline))
106#elif defined(_MSC_VER)
107#define XRT_NO_INLINE __declspec(noinline)
119#define XRT_DEBUGBREAK()
120#elif defined(__clang__) || defined(__GNUC__)
121#define XRT_DEBUGBREAK() __builtin_trap()
122#elif defined(_MSC_VER)
123#define XRT_DEBUGBREAK() __debugbreak()
125#error "compiler not supported"
130typedef volatile int32_t xrt_atomic_s32_t;
133xrt_atomic_s32_inc_return(xrt_atomic_s32_t *p)
136 return __sync_add_and_fetch(p, 1);
137#elif defined(_MSC_VER)
138 return InterlockedIncrement((
volatile LONG *)p);
140#error "compiler not supported"
144xrt_atomic_s32_dec_return(xrt_atomic_s32_t *p)
147 return __sync_sub_and_fetch(p, 1);
148#elif defined(_MSC_VER)
149 return InterlockedDecrement((
volatile LONG *)p);
151#error "compiler not supported"
155xrt_atomic_s32_cmpxchg(xrt_atomic_s32_t *p, int32_t old_, int32_t new_)
158 return __sync_val_compare_and_swap(p, old_, new_);
159#elif defined(_MSC_VER)
160 return InterlockedCompareExchange((
volatile LONG *)p, old_, new_);
162#error "compiler not supported"
167typedef intptr_t ssize_t;
169#define _SSIZE_T_DEFINED
177#define container_of(ptr, type, field) (type *)((char *)ptr - offsetof(type, field))
190#define XRT_STRUCT_INIT {}
193#elif defined(__cplusplus)
196#define XRT_STRUCT_INIT {}
202#define XRT_STRUCT_INIT {0}
223#define XRT_C11_COMPOUND(X)
225#define XRT_C11_COMPOUND(X) (X)
A minimal way to include Windows.h.