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