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