1#if defined(DUK_F_C99) || defined(DUK_F_CPP11)
2/* C99 / C++11 and above: rely on va_copy() which is required. */
3#define DUK_VA_COPY(dest,src) va_copy(dest,src)
4#else
5/* Clang: assume we have __va_copy() in non-C99 mode. */
6#define DUK_VA_COPY(dest,src) __va_copy(dest,src)
7#endif
8
9#define DUK_NORETURN(decl)  decl __attribute__((noreturn))
10
11#if defined(__clang__) && defined(__has_builtin)
12#if __has_builtin(__builtin_unreachable)
13#define DUK_UNREACHABLE()  do { __builtin_unreachable(); } while (0)
14#endif
15#endif
16
17#define DUK_USE_BRANCH_HINTS
18#define DUK_LIKELY(x)    __builtin_expect((x), 1)
19#define DUK_UNLIKELY(x)  __builtin_expect((x), 0)
20#if defined(__clang__) && defined(__has_builtin)
21#if __has_builtin(__builtin_unpredictable)
22#define DUK_UNPREDICTABLE(x)  __builtin_unpredictable((x))
23#endif
24#endif
25
26#if defined(DUK_F_C99) || defined(DUK_F_CPP11)
27#define DUK_NOINLINE        __attribute__((noinline))
28#define DUK_INLINE          inline
29#define DUK_ALWAYS_INLINE   inline __attribute__((always_inline))
30#endif
31
32/* DUK_HOT */
33/* DUK_COLD */
34
35#if defined(DUK_F_DLL_BUILD) && defined(DUK_F_WINDOWS)
36#snippet "msvc_visibility.h.in"
37#else
38#snippet "gcc_clang_visibility.h.in"
39#endif
40
41#if defined(DUK_F_CPP)
42#define DUK_USE_COMPILER_STRING "clang"
43#else
44#define DUK_USE_COMPILER_STRING "clang"
45#endif
46
47#undef DUK_USE_VARIADIC_MACROS
48#if defined(DUK_F_C99) || defined(DUK_F_CPP11)
49#define DUK_USE_VARIADIC_MACROS
50#endif
51
52#define DUK_USE_UNION_INITIALIZERS
53
54#undef DUK_USE_FLEX_C99
55#undef DUK_USE_FLEX_ZEROSIZE
56#undef DUK_USE_FLEX_ONESIZE
57#if defined(DUK_F_C99)
58#define DUK_USE_FLEX_C99
59#else
60#define DUK_USE_FLEX_ZEROSIZE
61#endif
62
63#define DUK_USE_CLANG_PRAGMAS
64#define DUK_USE_PACK_CLANG_ATTR
65
66#if defined(__clang__) && defined(__has_builtin)
67#if __has_builtin(__builtin_bswap64)
68#define DUK_BSWAP64(x) ((duk_uint64_t) __builtin_bswap64((duk_uint64_t) (x)))
69#endif
70#if __has_builtin(__builtin_bswap32)
71#define DUK_BSWAP32(x) ((duk_uint32_t) __builtin_bswap32((duk_uint32_t) (x)))
72#endif
73#if __has_builtin(__builtin_bswap16)
74#define DUK_BSWAP16(x) ((duk_uint16_t) __builtin_bswap16((duk_uint16_t) (x)))
75#endif
76#endif
77