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