Blame view

include/compiler.h 3.65 KB
375660907   Mike Frysinger   compiler.h: unify...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  /*
   * Keep all the ugly #ifdef for system stuff here
   */
  
  #ifndef __COMPILER_H__
  #define __COMPILER_H__
  
  #include <stddef.h>
  
  #ifdef USE_HOSTCC
  
  #if defined(__BEOS__)	 || \
      defined(__NetBSD__)  || \
      defined(__FreeBSD__) || \
      defined(__sun__)	 || \
      defined(__APPLE__)
  # include <inttypes.h>
3715a540c   Jonathan Gray   compiler.h: use s...
18
  #elif defined(__linux__) || defined(__WIN32__) || defined(__MINGW32__) || defined(__OpenBSD__)
375660907   Mike Frysinger   compiler.h: unify...
19
20
21
22
23
24
25
26
  # include <stdint.h>
  #endif
  
  #include <errno.h>
  #include <stdlib.h>
  #include <stdint.h>
  #include <stdio.h>
  #include <string.h>
375660907   Mike Frysinger   compiler.h: unify...
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
  #if !defined(__WIN32__) && !defined(__MINGW32__)
  # include <sys/mman.h>
  #endif
  
  /* Not all systems (like Windows) has this define, and yes
   * we do replace/emulate mmap() on those systems ...
   */
  #ifndef MAP_FAILED
  # define MAP_FAILED ((void *)-1)
  #endif
  
  #include <fcntl.h>
  #ifndef O_BINARY		/* should be define'd on __WIN32__ */
  #define O_BINARY	0
  #endif
  
  #ifdef __linux__
  # include <endian.h>
  # include <byteswap.h>
5bce5dc33   Jeroen Hofstee   include/compiler....
46
  #elif defined(__MACH__) || defined(__FreeBSD__)
375660907   Mike Frysinger   compiler.h: unify...
47
48
  # include <machine/endian.h>
  typedef unsigned long ulong;
375660907   Mike Frysinger   compiler.h: unify...
49
  #endif
ed8271d11   Jeroen Hofstee   tools: compiler.h...
50
51
  #ifdef __FreeBSD__
  # include <sys/endian.h> /* htole32 and friends */
f29aa23b5   Justin Hibbits   Fix FreeBSD endia...
52
53
54
  # define __BYTE_ORDER BYTE_ORDER
  # define __LITTLE_ENDIAN LITTLE_ENDIAN
  # define __BIG_ENDIAN BIG_ENDIAN
3715a540c   Jonathan Gray   compiler.h: use s...
55
56
  #elif defined(__OpenBSD__)
  # include <endian.h>
fd184b9c8   Jonathan Gray   compiler.h: use u...
57
58
59
  # define __BYTE_ORDER BYTE_ORDER
  # define __LITTLE_ENDIAN LITTLE_ENDIAN
  # define __BIG_ENDIAN BIG_ENDIAN
ed8271d11   Jeroen Hofstee   tools: compiler.h...
60
  #endif
9d16e93dc   Jeroen Hofstee   tools: compiler.h...
61
  #include <time.h>
375660907   Mike Frysinger   compiler.h: unify...
62
63
64
65
  
  typedef uint8_t __u8;
  typedef uint16_t __u16;
  typedef uint32_t __u32;
b050c72d5   Mike Frysinger   compiler.h: add u...
66
  typedef unsigned int uint;
375660907   Mike Frysinger   compiler.h: unify...
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
  
  #define uswap_16(x) \
  	((((x) & 0xff00) >> 8) | \
  	 (((x) & 0x00ff) << 8))
  #define uswap_32(x) \
  	((((x) & 0xff000000) >> 24) | \
  	 (((x) & 0x00ff0000) >>  8) | \
  	 (((x) & 0x0000ff00) <<  8) | \
  	 (((x) & 0x000000ff) << 24))
  #define _uswap_64(x, sfx) \
  	((((x) & 0xff00000000000000##sfx) >> 56) | \
  	 (((x) & 0x00ff000000000000##sfx) >> 40) | \
  	 (((x) & 0x0000ff0000000000##sfx) >> 24) | \
  	 (((x) & 0x000000ff00000000##sfx) >>  8) | \
  	 (((x) & 0x00000000ff000000##sfx) <<  8) | \
  	 (((x) & 0x0000000000ff0000##sfx) << 24) | \
  	 (((x) & 0x000000000000ff00##sfx) << 40) | \
  	 (((x) & 0x00000000000000ff##sfx) << 56))
  #if defined(__GNUC__)
  # define uswap_64(x) _uswap_64(x, ull)
  #else
  # define uswap_64(x) _uswap_64(x, )
  #endif
fd184b9c8   Jonathan Gray   compiler.h: use u...
90
  #if __BYTE_ORDER == __LITTLE_ENDIAN
375660907   Mike Frysinger   compiler.h: unify...
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
  # define cpu_to_le16(x)		(x)
  # define cpu_to_le32(x)		(x)
  # define cpu_to_le64(x)		(x)
  # define le16_to_cpu(x)		(x)
  # define le32_to_cpu(x)		(x)
  # define le64_to_cpu(x)		(x)
  # define cpu_to_be16(x)		uswap_16(x)
  # define cpu_to_be32(x)		uswap_32(x)
  # define cpu_to_be64(x)		uswap_64(x)
  # define be16_to_cpu(x)		uswap_16(x)
  # define be32_to_cpu(x)		uswap_32(x)
  # define be64_to_cpu(x)		uswap_64(x)
  #else
  # define cpu_to_le16(x)		uswap_16(x)
  # define cpu_to_le32(x)		uswap_32(x)
  # define cpu_to_le64(x)		uswap_64(x)
  # define le16_to_cpu(x)		uswap_16(x)
  # define le32_to_cpu(x)		uswap_32(x)
  # define le64_to_cpu(x)		uswap_64(x)
  # define cpu_to_be16(x)		(x)
  # define cpu_to_be32(x)		(x)
  # define cpu_to_be64(x)		(x)
  # define be16_to_cpu(x)		(x)
  # define be32_to_cpu(x)		(x)
  # define be64_to_cpu(x)		(x)
  #endif
  
  #else /* !USE_HOSTCC */
0d296cc2d   Gabe Black   Provide option to...
119
120
121
  #ifdef CONFIG_USE_STDINT
  /* Provided by gcc. */
  #include <stdint.h>
2e680f92b   York Sun   Revert "include/l...
122
123
124
  #else
  /* Type for `void *' pointers. */
  typedef unsigned long int uintptr_t;
0d296cc2d   Gabe Black   Provide option to...
125
  #endif
375660907   Mike Frysinger   compiler.h: unify...
126
127
128
  #include <linux/string.h>
  #include <linux/types.h>
  #include <asm/byteorder.h>
a7551a3f7   Simon Glass   sandbox: Add comp...
129
130
131
132
133
134
135
136
137
138
139
  #if __SIZEOF_LONG__ == 8
  # define __WORDSIZE	64
  #elif __SIZEOF_LONG__ == 4
  # define __WORDSIZE	32
  #else
  /*
   * Assume 32-bit for now - only newer toolchains support this feature and
   * this is only required for sandbox support at present.
   */
  #define __WORDSIZE	32
  #endif
c9502f491   Simon Glass   Define uintptr_t ...
140
  #endif /* USE_HOSTCC */
375660907   Mike Frysinger   compiler.h: unify...
141

b63815e31   Matthias Kaehlcke   move definition o...
142
143
  #define likely(x)	__builtin_expect(!!(x), 1)
  #define unlikely(x)	__builtin_expect(!!(x), 0)
375660907   Mike Frysinger   compiler.h: unify...
144
  #endif