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