1 /* Public domain. */
2 
3 #ifndef _LINUX_COMPILER_H
4 #define _LINUX_COMPILER_H
5 
6 #include <linux/kconfig.h>
7 #include <sys/atomic.h>		/* for READ_ONCE() WRITE_ONCE() */
8 
9 #define unlikely(x)	__builtin_expect(!!(x), 0)
10 #define likely(x)	__builtin_expect(!!(x), 1)
11 
12 #define __force
13 #define __acquires(x)
14 #define __releases(x)
15 #define __read_mostly
16 #define __iomem
17 #define __must_check
18 #define __init
19 #define __exit
20 #define __deprecated
21 #define __nonstring
22 #define __always_unused	__attribute__((__unused__))
23 #define __maybe_unused	__attribute__((__unused__))
24 #define __always_inline	inline __attribute__((__always_inline__))
25 #define noinline	__attribute__((__noinline__))
26 #define noinline_for_stack	 __attribute__((__noinline__))
27 #define fallthrough	do {} while (0)
28 #define __counted_by(x)
29 
30 #define __PASTE(x,y) __CONCAT(x,y)
31 
32 #ifndef __user
33 #define __user
34 #endif
35 
36 #define barrier()	__asm volatile("" : : : "memory")
37 
38 #define __printf(x, y)	__attribute__((__format__(__kprintf__,x,y)))
39 
40 /* The Linux code doesn't meet our usual standards! */
41 #ifdef __clang__
42 #pragma clang diagnostic ignored "-Winitializer-overrides"
43 #pragma clang diagnostic ignored "-Wunused-function"
44 #pragma clang diagnostic ignored "-Wunused-variable"
45 #pragma clang diagnostic ignored "-Wgnu-variable-sized-type-not-at-end"
46 #else
47 #pragma GCC diagnostic ignored "-Wformat-zero-length"
48 #endif
49 
50 #define __diag_push()
51 #define __diag_ignore_all(x, y)
52 #define __diag_pop()
53 
54 #endif
55