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