1 #ifndef _U_COMPILER_H_
2 #define _U_COMPILER_H_
3 
4 /* Function inlining */
5 #ifndef inline
6 #  ifdef __cplusplus
7      /* C++ supports inline keyword */
8 #  elif defined(__GNUC__)
9 #    define inline __inline__
10 #  elif defined(_MSC_VER)
11 #    define inline __inline
12 #  elif defined(__ICL)
13 #    define inline __inline
14 #  elif defined(__INTEL_COMPILER)
15      /* Intel compiler supports inline keyword */
16 #  elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100)
17 #    define inline __inline
18 #  elif defined(__SUNPRO_C) && defined(__C99FEATURES__)
19      /* C99 supports inline keyword */
20 #  elif (__STDC_VERSION__ >= 199901L)
21      /* C99 supports inline keyword */
22 #  else
23 #    define inline
24 #  endif
25 #endif
26 #ifndef INLINE
27 #  define INLINE inline
28 #endif
29 
30 /* Function visibility */
31 #ifndef PUBLIC
32 #  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
33 #    define PUBLIC __attribute__((visibility("default")))
34 #  elif defined(_MSC_VER)
35 #    define PUBLIC __declspec(dllexport)
36 #  else
37 #    define PUBLIC
38 #  endif
39 #endif
40 
41 #ifndef likely
42 #  if defined(__GNUC__)
43 #    define likely(x)   __builtin_expect(!!(x), 1)
44 #    define unlikely(x) __builtin_expect(!!(x), 0)
45 #  else
46 #    define likely(x)   (x)
47 #    define unlikely(x) (x)
48 #  endif
49 #endif
50 
51 #endif /* _U_COMPILER_H_ */
52