1 /* 2 --------------------------------------------------------------------------- 3 Copyright (c) 1998-2008, Brian Gladman, Worcester, UK. All rights reserved. 4 5 LICENSE TERMS 6 7 The redistribution and use of this software (with or without changes) 8 is allowed without the payment of fees or royalties provided that: 9 10 1. source code distributions include the above copyright notice, this 11 list of conditions and the following disclaimer; 12 13 2. binary distributions include the above copyright notice, this list 14 of conditions and the following disclaimer in their documentation; 15 16 3. the name of the copyright holder is not used to endorse products 17 built using this software without specific written permission. 18 19 DISCLAIMER 20 21 This software is provided 'as is' with no explicit or implied warranties 22 in respect of its properties, including, but not limited to, correctness 23 and/or fitness for purpose. 24 --------------------------------------------------------------------------- 25 Issue Date: 20/12/2007 26 Changes for ARM 9/9/2010 27 */ 28 29 #ifndef _BRG_ENDIAN_H 30 #define _BRG_ENDIAN_H 31 32 #define IS_BIG_ENDIAN 4321 /* byte 0 is most significant (mc68k) */ 33 #define IS_LITTLE_ENDIAN 1234 /* byte 0 is least significant (i386) */ 34 35 #if 0 36 /* Include files where endian defines and byteswap functions may reside */ 37 #if defined( __sun ) 38 # include <sys/isa_defs.h> 39 #elif defined( __FreeBSD__ ) || defined( __OpenBSD__ ) || defined( __NetBSD__ ) 40 # include <sys/endian.h> 41 #elif defined( BSD ) && ( BSD >= 199103 ) || defined( __APPLE__ ) || \ 42 defined( __CYGWIN32__ ) || defined( __DJGPP__ ) || defined( __osf__ ) 43 # include <machine/endian.h> 44 #elif defined( __linux__ ) || defined( __GNUC__ ) || defined( __GNU_LIBRARY__ ) 45 # if !defined( __MINGW32__ ) && !defined( _AIX ) 46 # include <endian.h> 47 # if !defined( __BEOS__ ) 48 # include <byteswap.h> 49 # endif 50 # endif 51 #endif 52 #endif 53 54 /* Now attempt to set the define for platform byte order using any */ 55 /* of the four forms SYMBOL, _SYMBOL, __SYMBOL & __SYMBOL__, which */ 56 /* seem to encompass most endian symbol definitions */ 57 58 #if defined( BIG_ENDIAN ) && defined( LITTLE_ENDIAN ) 59 # if defined( BYTE_ORDER ) && BYTE_ORDER == BIG_ENDIAN 60 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN 61 # elif defined( BYTE_ORDER ) && BYTE_ORDER == LITTLE_ENDIAN 62 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN 63 # endif 64 #elif defined( BIG_ENDIAN ) 65 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN 66 #elif defined( LITTLE_ENDIAN ) 67 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN 68 #endif 69 70 #if defined( _BIG_ENDIAN ) && defined( _LITTLE_ENDIAN ) 71 # if defined( _BYTE_ORDER ) && _BYTE_ORDER == _BIG_ENDIAN 72 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN 73 # elif defined( _BYTE_ORDER ) && _BYTE_ORDER == _LITTLE_ENDIAN 74 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN 75 # endif 76 #elif defined( _BIG_ENDIAN ) 77 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN 78 #elif defined( _LITTLE_ENDIAN ) 79 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN 80 #endif 81 82 #if defined( __BIG_ENDIAN ) && defined( __LITTLE_ENDIAN ) 83 # if defined( __BYTE_ORDER ) && __BYTE_ORDER == __BIG_ENDIAN 84 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN 85 # elif defined( __BYTE_ORDER ) && __BYTE_ORDER == __LITTLE_ENDIAN 86 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN 87 # endif 88 #elif defined( __BIG_ENDIAN ) 89 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN 90 #elif defined( __LITTLE_ENDIAN ) 91 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN 92 #endif 93 94 #if defined( __BIG_ENDIAN__ ) && defined( __LITTLE_ENDIAN__ ) 95 # if defined( __BYTE_ORDER__ ) && __BYTE_ORDER__ == __BIG_ENDIAN__ 96 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN 97 # elif defined( __BYTE_ORDER__ ) && __BYTE_ORDER__ == __LITTLE_ENDIAN__ 98 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN 99 # endif 100 #elif defined( __BIG_ENDIAN__ ) 101 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN 102 #elif defined( __LITTLE_ENDIAN__ ) 103 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN 104 #endif 105 106 /* if the platform byte order could not be determined, then try to */ 107 /* set this define using common machine defines */ 108 #if !defined(PLATFORM_BYTE_ORDER) 109 110 #if defined( __alpha__ ) || defined( __alpha ) || defined( i386 ) || \ 111 defined( __i386__ ) || defined( _M_I86 ) || defined( _M_IX86 ) || \ 112 defined( __OS2__ ) || defined( sun386 ) || defined( __TURBOC__ ) || \ 113 defined( vax ) || defined( vms ) || defined( VMS ) || \ 114 defined( __VMS ) || defined( _M_X64 ) 115 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN 116 117 #elif defined( AMIGA ) || defined( applec ) || defined( __AS400__ ) || \ 118 defined( _CRAY ) || defined( __hppa ) || defined( __hp9000 ) || \ 119 defined( ibm370 ) || defined( mc68000 ) || defined( m68k ) || \ 120 defined( __MRC__ ) || defined( __MVS__ ) || defined( __MWERKS__ ) || \ 121 defined( sparc ) || defined( __sparc) || defined( SYMANTEC_C ) || \ 122 defined( __VOS__ ) || defined( __TIGCC__ ) || defined( __TANDEM ) || \ 123 defined( THINK_C ) || defined( __VMCMS__ ) || defined( _AIX ) 124 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN 125 126 #elif defined(__arm__) 127 # ifdef __BIG_ENDIAN 128 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN 129 # else 130 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN 131 # endif 132 #elif 1 /* **** EDIT HERE IF NECESSARY **** */ 133 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN 134 #elif 0 /* **** EDIT HERE IF NECESSARY **** */ 135 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN 136 #else 137 # error Please edit lines 132 or 134 in brg_endian.h to set the platform byte order 138 #endif 139 140 #endif 141 142 #endif 143