xref: /openbmc/u-boot/include/compiler.h (revision 37566090766d61beef70c62986b90749920255d8)
1*37566090SMike Frysinger /*
2*37566090SMike Frysinger  * Keep all the ugly #ifdef for system stuff here
3*37566090SMike Frysinger  */
4*37566090SMike Frysinger 
5*37566090SMike Frysinger #ifndef __COMPILER_H__
6*37566090SMike Frysinger #define __COMPILER_H__
7*37566090SMike Frysinger 
8*37566090SMike Frysinger #include <stddef.h>
9*37566090SMike Frysinger 
10*37566090SMike Frysinger #ifdef USE_HOSTCC
11*37566090SMike Frysinger 
12*37566090SMike Frysinger #if defined(__BEOS__)	 || \
13*37566090SMike Frysinger     defined(__NetBSD__)  || \
14*37566090SMike Frysinger     defined(__FreeBSD__) || \
15*37566090SMike Frysinger     defined(__sun__)	 || \
16*37566090SMike Frysinger     defined(__APPLE__)
17*37566090SMike Frysinger # include <inttypes.h>
18*37566090SMike Frysinger #elif defined(__linux__) || defined(__WIN32__) || defined(__MINGW32__)
19*37566090SMike Frysinger # include <stdint.h>
20*37566090SMike Frysinger #endif
21*37566090SMike Frysinger 
22*37566090SMike Frysinger #include <errno.h>
23*37566090SMike Frysinger #include <stdlib.h>
24*37566090SMike Frysinger #include <stdint.h>
25*37566090SMike Frysinger #include <stdio.h>
26*37566090SMike Frysinger #include <string.h>
27*37566090SMike Frysinger 
28*37566090SMike Frysinger extern int errno;
29*37566090SMike Frysinger 
30*37566090SMike Frysinger #if !defined(__WIN32__) && !defined(__MINGW32__)
31*37566090SMike Frysinger # include <sys/mman.h>
32*37566090SMike Frysinger #endif
33*37566090SMike Frysinger 
34*37566090SMike Frysinger /* Not all systems (like Windows) has this define, and yes
35*37566090SMike Frysinger  * we do replace/emulate mmap() on those systems ...
36*37566090SMike Frysinger  */
37*37566090SMike Frysinger #ifndef MAP_FAILED
38*37566090SMike Frysinger # define MAP_FAILED ((void *)-1)
39*37566090SMike Frysinger #endif
40*37566090SMike Frysinger 
41*37566090SMike Frysinger #include <fcntl.h>
42*37566090SMike Frysinger #ifndef O_BINARY		/* should be define'd on __WIN32__ */
43*37566090SMike Frysinger #define O_BINARY	0
44*37566090SMike Frysinger #endif
45*37566090SMike Frysinger 
46*37566090SMike Frysinger #ifdef __linux__
47*37566090SMike Frysinger # include <endian.h>
48*37566090SMike Frysinger # include <byteswap.h>
49*37566090SMike Frysinger #elif defined(__MACH__)
50*37566090SMike Frysinger # include <machine/endian.h>
51*37566090SMike Frysinger typedef unsigned long ulong;
52*37566090SMike Frysinger typedef unsigned int  uint;
53*37566090SMike Frysinger #endif
54*37566090SMike Frysinger 
55*37566090SMike Frysinger typedef uint8_t __u8;
56*37566090SMike Frysinger typedef uint16_t __u16;
57*37566090SMike Frysinger typedef uint32_t __u32;
58*37566090SMike Frysinger 
59*37566090SMike Frysinger #define uswap_16(x) \
60*37566090SMike Frysinger 	((((x) & 0xff00) >> 8) | \
61*37566090SMike Frysinger 	 (((x) & 0x00ff) << 8))
62*37566090SMike Frysinger #define uswap_32(x) \
63*37566090SMike Frysinger 	((((x) & 0xff000000) >> 24) | \
64*37566090SMike Frysinger 	 (((x) & 0x00ff0000) >>  8) | \
65*37566090SMike Frysinger 	 (((x) & 0x0000ff00) <<  8) | \
66*37566090SMike Frysinger 	 (((x) & 0x000000ff) << 24))
67*37566090SMike Frysinger #define _uswap_64(x, sfx) \
68*37566090SMike Frysinger 	((((x) & 0xff00000000000000##sfx) >> 56) | \
69*37566090SMike Frysinger 	 (((x) & 0x00ff000000000000##sfx) >> 40) | \
70*37566090SMike Frysinger 	 (((x) & 0x0000ff0000000000##sfx) >> 24) | \
71*37566090SMike Frysinger 	 (((x) & 0x000000ff00000000##sfx) >>  8) | \
72*37566090SMike Frysinger 	 (((x) & 0x00000000ff000000##sfx) <<  8) | \
73*37566090SMike Frysinger 	 (((x) & 0x0000000000ff0000##sfx) << 24) | \
74*37566090SMike Frysinger 	 (((x) & 0x000000000000ff00##sfx) << 40) | \
75*37566090SMike Frysinger 	 (((x) & 0x00000000000000ff##sfx) << 56))
76*37566090SMike Frysinger #if defined(__GNUC__)
77*37566090SMike Frysinger # define uswap_64(x) _uswap_64(x, ull)
78*37566090SMike Frysinger #else
79*37566090SMike Frysinger # define uswap_64(x) _uswap_64(x, )
80*37566090SMike Frysinger #endif
81*37566090SMike Frysinger 
82*37566090SMike Frysinger #if __BYTE_ORDER == __LITTLE_ENDIAN
83*37566090SMike Frysinger # define cpu_to_le16(x)		(x)
84*37566090SMike Frysinger # define cpu_to_le32(x)		(x)
85*37566090SMike Frysinger # define cpu_to_le64(x)		(x)
86*37566090SMike Frysinger # define le16_to_cpu(x)		(x)
87*37566090SMike Frysinger # define le32_to_cpu(x)		(x)
88*37566090SMike Frysinger # define le64_to_cpu(x)		(x)
89*37566090SMike Frysinger # define cpu_to_be16(x)		uswap_16(x)
90*37566090SMike Frysinger # define cpu_to_be32(x)		uswap_32(x)
91*37566090SMike Frysinger # define cpu_to_be64(x)		uswap_64(x)
92*37566090SMike Frysinger # define be16_to_cpu(x)		uswap_16(x)
93*37566090SMike Frysinger # define be32_to_cpu(x)		uswap_32(x)
94*37566090SMike Frysinger # define be64_to_cpu(x)		uswap_64(x)
95*37566090SMike Frysinger #else
96*37566090SMike Frysinger # define cpu_to_le16(x)		uswap_16(x)
97*37566090SMike Frysinger # define cpu_to_le32(x)		uswap_32(x)
98*37566090SMike Frysinger # define cpu_to_le64(x)		uswap_64(x)
99*37566090SMike Frysinger # define le16_to_cpu(x)		uswap_16(x)
100*37566090SMike Frysinger # define le32_to_cpu(x)		uswap_32(x)
101*37566090SMike Frysinger # define le64_to_cpu(x)		uswap_64(x)
102*37566090SMike Frysinger # define cpu_to_be16(x)		(x)
103*37566090SMike Frysinger # define cpu_to_be32(x)		(x)
104*37566090SMike Frysinger # define cpu_to_be64(x)		(x)
105*37566090SMike Frysinger # define be16_to_cpu(x)		(x)
106*37566090SMike Frysinger # define be32_to_cpu(x)		(x)
107*37566090SMike Frysinger # define be64_to_cpu(x)		(x)
108*37566090SMike Frysinger #endif
109*37566090SMike Frysinger 
110*37566090SMike Frysinger #else /* !USE_HOSTCC */
111*37566090SMike Frysinger 
112*37566090SMike Frysinger #include <linux/string.h>
113*37566090SMike Frysinger #include <linux/types.h>
114*37566090SMike Frysinger #include <asm/byteorder.h>
115*37566090SMike Frysinger 
116*37566090SMike Frysinger /* Types for `void *' pointers. */
117*37566090SMike Frysinger #if __WORDSIZE == 64
118*37566090SMike Frysinger typedef unsigned long int       uintptr_t;
119*37566090SMike Frysinger #else
120*37566090SMike Frysinger typedef unsigned int            uintptr_t;
121*37566090SMike Frysinger #endif
122*37566090SMike Frysinger 
123*37566090SMike Frysinger #endif
124*37566090SMike Frysinger 
125*37566090SMike Frysinger #endif
126