Blame view

include/compiler.h 3.26 KB
375660907   Mike Frysinger   compiler.h: unify...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  /*
   * 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>
  #elif defined(__linux__) || defined(__WIN32__) || defined(__MINGW32__)
  # 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
50
51
52
53
  #endif
  
  typedef uint8_t __u8;
  typedef uint16_t __u16;
  typedef uint32_t __u32;
b050c72d5   Mike Frysinger   compiler.h: add u...
54
  typedef unsigned int uint;
375660907   Mike Frysinger   compiler.h: unify...
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
  
  #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
  
  #if __BYTE_ORDER == __LITTLE_ENDIAN
  # 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 */
  
  #include <linux/string.h>
  #include <linux/types.h>
  #include <asm/byteorder.h>
a7551a3f7   Simon Glass   sandbox: Add comp...
112
113
114
115
116
117
118
119
120
121
122
  #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 ...
123
124
  /* Type for `void *' pointers. */
  typedef unsigned long int uintptr_t;
375660907   Mike Frysinger   compiler.h: unify...
125

c9502f491   Simon Glass   Define uintptr_t ...
126
  #endif /* USE_HOSTCC */
375660907   Mike Frysinger   compiler.h: unify...
127

d8bc55a6f   Anton Vorontsov   Move uninitialize...
128
129
  /* compiler options */
  #define uninitialized_var(x)		x = x
b63815e31   Matthias Kaehlcke   move definition o...
130
131
  #define likely(x)	__builtin_expect(!!(x), 1)
  #define unlikely(x)	__builtin_expect(!!(x), 0)
375660907   Mike Frysinger   compiler.h: unify...
132
  #endif