#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 */