1 /* 2 * JEMALLOC_ALWAYS_INLINE and JEMALLOC_INLINE are used within header files for 3 * functions that are static inline functions if inlining is enabled, and 4 * single-definition library-private functions if inlining is disabled. 5 * 6 * JEMALLOC_ALWAYS_INLINE_C and JEMALLOC_INLINE_C are for use in .c files, in 7 * which case the denoted functions are always static, regardless of whether 8 * inlining is enabled. 9 */ 10 #if defined(JEMALLOC_DEBUG) || defined(JEMALLOC_CODE_COVERAGE) 11 /* Disable inlining to make debugging/profiling easier. */ 12 # define JEMALLOC_ALWAYS_INLINE 13 # define JEMALLOC_ALWAYS_INLINE_C static 14 # define JEMALLOC_INLINE 15 # define JEMALLOC_INLINE_C static 16 # define inline 17 #else 18 # define JEMALLOC_ENABLE_INLINE 19 # ifdef JEMALLOC_HAVE_ATTR 20 # define JEMALLOC_ALWAYS_INLINE \ 21 static inline JEMALLOC_ATTR(unused) JEMALLOC_ATTR(always_inline) 22 # define JEMALLOC_ALWAYS_INLINE_C \ 23 static inline JEMALLOC_ATTR(always_inline) 24 # else 25 # define JEMALLOC_ALWAYS_INLINE static inline 26 # define JEMALLOC_ALWAYS_INLINE_C static inline 27 # endif 28 # define JEMALLOC_INLINE static inline 29 # define JEMALLOC_INLINE_C static inline 30 # ifdef _MSC_VER 31 # define inline _inline 32 # endif 33 #endif 34 35 #ifdef JEMALLOC_CC_SILENCE 36 # define UNUSED JEMALLOC_ATTR(unused) 37 #else 38 # define UNUSED 39 #endif 40 41 #define ZU(z) ((size_t)z) 42 #define ZI(z) ((ssize_t)z) 43 #define QU(q) ((uint64_t)q) 44 #define QI(q) ((int64_t)q) 45 46 #define KZU(z) ZU(z##ULL) 47 #define KZI(z) ZI(z##LL) 48 #define KQU(q) QU(q##ULL) 49 #define KQI(q) QI(q##LL) 50 51 #ifndef __DECONST 52 # define __DECONST(type, var) ((type)(uintptr_t)(const void *)(var)) 53 #endif 54 55 #ifndef JEMALLOC_HAS_RESTRICT 56 # define restrict 57 #endif 58