| #ifndef _TOOLS_LINUX_COMPILER_H_ |
| #define _TOOLS_LINUX_COMPILER_H_ |
| |
| /* 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 |
| |
| #define __user |
| |
| #ifndef __attribute_const__ |
| # define __attribute_const__ |
| #endif |
| |
| #ifndef __maybe_unused |
| # define __maybe_unused __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 |
| |
| #define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x)) |
| |
| #endif /* _TOOLS_LINUX_COMPILER_H */ |