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