]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/jemalloc/include/jemalloc/internal/util.h
MFV r354383: 10592 misc. metaslab and vdev related ZoL bug fixes
[FreeBSD/FreeBSD.git] / contrib / jemalloc / include / jemalloc / internal / util.h
1 #ifndef JEMALLOC_INTERNAL_UTIL_H
2 #define JEMALLOC_INTERNAL_UTIL_H
3
4 #define UTIL_INLINE static inline
5
6 /* Junk fill patterns. */
7 #ifndef JEMALLOC_ALLOC_JUNK
8 #  define JEMALLOC_ALLOC_JUNK   ((uint8_t)0xa5)
9 #endif
10 #ifndef JEMALLOC_FREE_JUNK
11 #  define JEMALLOC_FREE_JUNK    ((uint8_t)0x5a)
12 #endif
13
14 /*
15  * Wrap a cpp argument that contains commas such that it isn't broken up into
16  * multiple arguments.
17  */
18 #define JEMALLOC_ARG_CONCAT(...) __VA_ARGS__
19
20 /* cpp macro definition stringification. */
21 #define STRINGIFY_HELPER(x) #x
22 #define STRINGIFY(x) STRINGIFY_HELPER(x)
23
24 /*
25  * Silence compiler warnings due to uninitialized values.  This is used
26  * wherever the compiler fails to recognize that the variable is never used
27  * uninitialized.
28  */
29 #define JEMALLOC_CC_SILENCE_INIT(v) = v
30
31 #ifdef __GNUC__
32 #  define likely(x)   __builtin_expect(!!(x), 1)
33 #  define unlikely(x) __builtin_expect(!!(x), 0)
34 #else
35 #  define likely(x)   !!(x)
36 #  define unlikely(x) !!(x)
37 #endif
38
39 #if !defined(JEMALLOC_INTERNAL_UNREACHABLE)
40 #  error JEMALLOC_INTERNAL_UNREACHABLE should have been defined by configure
41 #endif
42
43 #define unreachable() JEMALLOC_INTERNAL_UNREACHABLE()
44
45 /* Set error code. */
46 UTIL_INLINE void
47 set_errno(int errnum) {
48 #ifdef _WIN32
49         SetLastError(errnum);
50 #else
51         errno = errnum;
52 #endif
53 }
54
55 /* Get last error code. */
56 UTIL_INLINE int
57 get_errno(void) {
58 #ifdef _WIN32
59         return GetLastError();
60 #else
61         return errno;
62 #endif
63 }
64
65 #undef UTIL_INLINE
66
67 #endif /* JEMALLOC_INTERNAL_UTIL_H */