41#if defined(ZYAN_NO_LIBC) || \
42 (defined(ZYAN_MSVC) && defined(ZYAN_KERNEL))
44# if defined(ZYAN_MSVC) || defined(ZYAN_ICC)
45 typedef unsigned __int8
ZyanU8;
46 typedef unsigned __int16
ZyanU16;
47 typedef unsigned __int32
ZyanU32;
48 typedef unsigned __int64
ZyanU64;
49 typedef signed __int8
ZyanI8;
64# elif defined(ZYAN_GNUC)
66 typedef __UINT8_TYPE__
ZyanU8;
68 typedef unsigned char ZyanU8;
70# ifdef __UINT16_TYPE__
71 typedef __UINT16_TYPE__
ZyanU16;
73 typedef unsigned short int ZyanU16;
75# ifdef __UINT32_TYPE__
76 typedef __UINT32_TYPE__
ZyanU32;
80# ifdef __UINT64_TYPE__
81 typedef __UINT64_TYPE__
ZyanU64;
83# if defined(__x86_64__) && !defined(__ILP32__)
84 typedef unsigned long int ZyanU64;
86 typedef unsigned long long int ZyanU64;
90 typedef __INT8_TYPE__
ZyanI8;
92 typedef signed char ZyanI8;
97 typedef signed short int ZyanI16;
100 typedef __INT32_TYPE__
ZyanI32;
104# ifdef __INT64_TYPE__
105 typedef __INT64_TYPE__
ZyanI64;
107# if defined(__x86_64__) && !defined( __ILP32__)
108 typedef signed long int ZyanI64;
110 typedef signed long long int ZyanI64;
118# ifdef __PTRDIFF_TYPE__
123# ifdef __UINTPTR_TYPE__
126# if defined(__x86_64__) && !defined( __ILP32__)
132# ifdef __INTPTR_TYPE__
135# if defined(__x86_64__) && !defined( __ILP32__)
142# error "Unsupported compiler for no-libc mode."
145# if defined(ZYAN_MSVC)
146# define ZYAN_INT8_MIN (-127i8 - 1)
147# define ZYAN_INT16_MIN (-32767i16 - 1)
148# define ZYAN_INT32_MIN (-2147483647i32 - 1)
149# define ZYAN_INT64_MIN (-9223372036854775807i64 - 1)
150# define ZYAN_INT8_MAX 127i8
151# define ZYAN_INT16_MAX 32767i16
152# define ZYAN_INT32_MAX 2147483647i32
153# define ZYAN_INT64_MAX 9223372036854775807i64
154# define ZYAN_UINT8_MAX 0xffui8
155# define ZYAN_UINT16_MAX 0xffffui16
156# define ZYAN_UINT32_MAX 0xffffffffui32
157# define ZYAN_UINT64_MAX 0xffffffffffffffffui64
160# define ZYAN_INT8_MAX __INT8_MAX__
162# define ZYAN_INT8_MAX (127)
164# define ZYAN_INT8_MIN (-ZYAN_INT8_MAX - 1)
166# define ZYAN_INT16_MAX __INT16_MAX__
168# define ZYAN_INT16_MAX (32767)
170# define ZYAN_INT16_MIN (-ZYAN_INT16_MAX - 1)
172# define ZYAN_INT32_MAX __INT32_MAX__
174# define ZYAN_INT32_MAX (2147483647)
176# define ZYAN_INT32_MIN (-ZYAN_INT32_MAX - 1)
178# define ZYAN_INT64_MAX __INT64_MAX__
180# if defined(__x86_64__) && !defined( __ILP32__)
181# define ZYAN_INT64_MAX (9223372036854775807L)
183# define ZYAN_INT64_MAX (9223372036854775807LL)
186# define ZYAN_INT64_MIN (-ZYAN_INT64_MAX - 1)
188# define ZYAN_UINT8_MAX __UINT8_MAX__
190# define ZYAN_UINT8_MAX (255)
192# ifdef __UINT16_MAX__
193# define ZYAN_UINT16_MAX __UINT16_MAX__
195# define ZYAN_UINT16_MAX (65535)
197# ifdef __UINT32_MAX__
198# define ZYAN_UINT32_MAX __UINT32_MAX__
200# define ZYAN_UINT32_MAX (4294967295U)
202# ifdef __UINT64_MAX__
203# define ZYAN_UINT64_MAX __UINT64_MAX__
205# if defined(__x86_64__) && !defined( __ILP32__)
206# define ZYAN_UINT64_MAX (18446744073709551615UL)
208# define ZYAN_UINT64_MAX (18446744073709551615ULL)
229# define ZYAN_INT8_MIN INT8_MIN
230# define ZYAN_INT16_MIN INT16_MIN
231# define ZYAN_INT32_MIN INT32_MIN
232# define ZYAN_INT64_MIN INT64_MIN
233# define ZYAN_INT8_MAX INT8_MAX
234# define ZYAN_INT16_MAX INT16_MAX
235# define ZYAN_INT32_MAX INT32_MAX
236# define ZYAN_INT64_MAX INT64_MAX
237# define ZYAN_UINT8_MAX UINT8_MAX
238# define ZYAN_UINT16_MAX UINT16_MAX
239# define ZYAN_UINT32_MAX UINT32_MAX
240# define ZYAN_UINT64_MAX UINT64_MAX
277#define ZYAN_NULL ((void*)0)
310#define ZYAN_TERNARY_FALSE (-1)
311#define ZYAN_TERNARY_UNKNOWN 0x00
312#define ZYAN_TERNARY_TRUE 0x01
347#if defined(ZYAN_MSVC)
348# if defined(ZYAN_NO_LIBC)
349# if defined(__cplusplus)
352 unsigned short __cdecl _byteswap_ushort(
unsigned short);
353 unsigned long __cdecl _byteswap_ulong(
unsigned long);
354 unsigned __int64 __cdecl _byteswap_uint64(
unsigned __int64);
355# if defined(__cplusplus)
358# elif defined(ZYAN_KERNEL)
364# define ZYAN_BYTESWAP16(x) _byteswap_ushort((x))
365# define ZYAN_BYTESWAP32(x) _byteswap_ulong((x))
366# define ZYAN_BYTESWAP64(x) _byteswap_uint64((x))
367#elif ZYAN_HAS_BUILTIN(__builtin_bswap16) && \
368 ZYAN_HAS_BUILTIN(__builtin_bswap32) && \
369 ZYAN_HAS_BUILTIN(__builtin_bswap64)
370# define ZYAN_BYTESWAP16(x) __builtin_bswap16((x))
371# define ZYAN_BYTESWAP32(x) __builtin_bswap32((x))
372# define ZYAN_BYTESWAP64(x) __builtin_bswap64((x))
376 return (((x >> 8) & 0xFFU) | ((x & 0xFFU) << 8));
381 return (((x & 0xFF000000U) >> 24) |
382 ((x & 0x00FF0000U) >> 8 ) |
383 ((x & 0x0000FF00U) << 8 ) |
384 ((x & 0x000000FFU) << 24));
389 return (((x & 0xFF00000000000000ULL) >> 56) |
390 ((x & 0x00FF000000000000ULL) >> 40) |
391 ((x & 0x0000FF0000000000ULL) >> 24) |
392 ((x & 0x000000FF00000000ULL) >> 8 ) |
393 ((x & 0x00000000FF000000ULL) << 8 ) |
394 ((x & 0x0000000000FF0000ULL) << 24) |
395 ((x & 0x000000000000FF00ULL) << 40) |
396 ((x & 0x00000000000000FFULL) << 56));
406#if ZYAN_ENDIAN == ZYAN_LITTLE_ENDIAN
407# define ZYAN_LE16_TO_NATIVE(x)
408# define ZYAN_LE32_TO_NATIVE(x)
409# define ZYAN_LE64_TO_NATIVE(x)
411# define ZYAN_LE16_TO_NATIVE(x) (x) = ZYAN_BYTESWAP16((x))
412# define ZYAN_LE32_TO_NATIVE(x) (x) = ZYAN_BYTESWAP32((x))
413# define ZYAN_LE64_TO_NATIVE(x) (x) = ZYAN_BYTESWAP64((x))
General helper and platform detection macros.
#define ZYAN_INLINE
Definition Defines.h:356
ptrdiff_t ZyanISize
Definition Types.h:225
ZyanU8 ZyanBool
Defines the ZyanBool data-type.
Definition Types.h:296
int64_t ZyanI64
Definition Types.h:223
ZYAN_INLINE ZyanU64 ZYAN_BYTESWAP64(ZyanU64 x)
Definition Types.h:387
size_t ZyanUSize
Definition Types.h:224
uintptr_t ZyanUPointer
Definition Types.h:226
int8_t ZyanI8
Definition Types.h:220
ZYAN_STATIC_ASSERT((ZyanI8) -1 > > 1<(ZyanI8)((ZyanU8) -1 > > 1))
intptr_t ZyanIPointer
Definition Types.h:227
const void * ZyanConstVoidPointer
Defines the ZyanConstVoidPointer data-type.
Definition Types.h:275
int32_t ZyanI32
Definition Types.h:222
uint16_t ZyanU16
Definition Types.h:217
ZYAN_INLINE ZyanU16 ZYAN_BYTESWAP16(ZyanU16 x)
Collection of functions for swapping byte order in 16/32/64-bit values respectively.
Definition Types.h:374
int16_t ZyanI16
Definition Types.h:221
uint64_t ZyanU64
Definition Types.h:219
uint8_t ZyanU8
Definition Types.h:216
const char * ZyanConstCharPointer
Defines the ZyanConstCharPointer data-type.
Definition Types.h:334
ZYAN_INLINE ZyanU32 ZYAN_BYTESWAP32(ZyanU32 x)
Definition Types.h:379
char * ZyanCharPointer
Defines the ZyanCharPointer data-type.
Definition Types.h:327
ZyanI8 ZyanTernary
Defines the ZyanTernary data-type.
Definition Types.h:308
uint32_t ZyanU32
Definition Types.h:218
void * ZyanVoidPointer
Defines the ZyanVoidPointer data-type.
Definition Types.h:270