| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- #ifndef _TOOLS_LINUX_COMPILER_H_
- #define _TOOLS_LINUX_COMPILER_H_
- #ifndef __compiletime_error
- # define __compiletime_error(message)
- #endif
- /* Optimization barrier */
- /* The "volatile" is due to gcc bugs */
- #define barrier() __asm__ __volatile__("": : :"memory")
- #ifndef __always_inline
- # define __always_inline inline __attribute__((always_inline))
- #endif
- #ifndef noinline
- #define noinline
- #endif
- /* Are two types/vars the same type (ignoring qualifiers)? */
- #ifndef __same_type
- # define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
- #endif
- #ifdef __ANDROID__
- /*
- * FIXME: Big hammer to get rid of tons of:
- * "warning: always_inline function might not be inlinable"
- *
- * At least on android-ndk-r12/platforms/android-24/arch-arm
- */
- #undef __always_inline
- #define __always_inline inline
- #endif
- #define __user
- #define __rcu
- #define __read_mostly
- #ifndef __attribute_const__
- # define __attribute_const__
- #endif
- #ifndef __maybe_unused
- # define __maybe_unused __attribute__((unused))
- #endif
- #ifndef __used
- # define __used __attribute__((__unused__))
- #endif
- #ifndef __packed
- # define __packed __attribute__((__packed__))
- #endif
- #ifndef __force
- # define __force
- #endif
- #ifndef __weak
- # define __weak __attribute__((weak))
- #endif
- #ifndef likely
- # define likely(x) __builtin_expect(!!(x), 1)
- #endif
- #ifndef unlikely
- # define unlikely(x) __builtin_expect(!!(x), 0)
- #endif
- #ifndef __init
- # define __init
- #endif
- #ifndef noinline
- # define noinline
- #endif
- #define uninitialized_var(x) x = *(&(x))
- #ifndef __fallthrough
- # define __fallthrough
- #endif
- #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
- #ifndef max
- #define max(x, y) ({ \
- typeof(x) _max1 = (x); \
- typeof(y) _max2 = (y); \
- (void) (&_max1 == &_max2); \
- _max1 > _max2 ? _max1 : _max2; })
- #endif
- #ifndef min
- #define min(x, y) ({ \
- typeof(x) _min1 = (x); \
- typeof(y) _min2 = (y); \
- (void) (&_min1 == &_min2); \
- _min1 < _min2 ? _min1 : _min2; })
- #endif
- #ifndef roundup
- #define roundup(x, y) ( \
- { \
- const typeof(y) __y = y; \
- (((x) + (__y - 1)) / __y) * __y; \
- } \
- )
- #endif
- #define __round_mask(x, y) ((__typeof__(x))((y)-1))
- #define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)
- #define round_down(x, y) ((x) & ~__round_mask(x, y))
- #endif /* _TOOLS_LINUX_COMPILER_H */
|